python django 权限控制 控制views里的控制器

1、首先要将sqlite的数据同步到mysql中,方便管理
修改setting.py,如下:

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
        'NAME': 'django', # 数据库名称
        'HOST': '192.168.111.66', # 数据库地址,本机 ip 地址 127.0.0.1
        'PORT': 3306, # 端口
        'USER': 'root',  # 数据库用户名
        'PASSWORD': '######', # 数据库密码
    }
}

然后执行

python manage.py makemigration
python manage.py migrate
#添加一个超级用户
python manage.py createsuperuser 

这里如果出错,请添加__init__.py内容

import pymysql
pymysql.install_as_MySQLdb()

2、在路由中添加管理后台

path('', views.index),
path('admin/', admin.site.urls),

3、运行项目,进入后台http://ip/admin/,使用超级用户登录,在这里添加需要的用户
4、修改mysql数据库,添加需要的权限模块到django_content_type与权限到auth_permission,如下图所示:
django_content_type:
python django 权限控制 控制views里的控制器_第1张图片
auth_permission:
在这里插入图片描述
5、给views.py中的控制器添加限制装饰器

from django.contrib.auth.decorators import login_required,permission_required
@login_required(login_url="/login/") #判断ruquest.user中是否有对象,没有跳转到/login/
@permission_required("views.index",login_url="/login/",raise_exception=True)
def index(request:HttpRequest):
    context={}
    context["ul"]=["后台管理","用户管理","用户列表"]
    context["body"]="Hello World"
    context["title"]="后台管理系统"
    context["user"]=request.user.last_name+request.user.first_name
    return render(request,"main.html",context)
@login_required(login_url="/login/")
@permission_required("views.about",login_url="/login/",raise_exception=True)
def about(request):
    data=[
        {"name": "test", "desc": "test"},
       
        {"name": "bk_task_list", "desc": "后台任务管理"},
    ]
    return render(request,"about.html",{"list":data})

在模版中使用:模版中使用全局变量perms存储当前用户的所有权限

{% if perms.应用名.权限标识 %}
    <!-- 这里是有权限才显示的内容 -->
{% endif %}

6、配置路由,这一步不用再说了。
7、在/admin/后台管理里,给用户或者组添加权限即可。
8、代码添加权限:

#创建权限的第二种方法通过实例模型创建权限
from django.contrib.auth.models import Permission,ContentType #引入models类
def add_permission(request):
    content_type = ContentType.objects.get_for_model(views)
    '''
    codename  权限的名称
    name  权限的描述
    content_tpye 指定那个表的权限
    '''
    permission = Permission.objects.create(codename='black_article',name='拉黑文章',content_type=content_type)
    return HttpResponse('权限创建成功!')

你可能感兴趣的:(Linux,python,django,python)