• django用户权限操作


    第一步:创建数据库和超级管理员,为了比较方便使用(里面有些的是没用的),额外新增

    chioces ,
    per_method ,
    argument_list 
    # 用户权限
    # 建立一个权限表,将映射关系存到数据库中
    class Permission(models.Model):
    identifier = models.CharField(max_length=40, unique=True)
    USERNAME_FIELD = 'identifier'


    name = models.CharField("权限名称", max_length=64,null=True)
    url = models.CharField('URL名称', max_length=255,null=True)
    #chioces = ((1, 'GET'), (2, 'POST'))
    #per_method = models.SmallIntegerField('请求方法', choices=chioces, default=1)
    #argument_list = models.CharField('参数列表', max_length=255, help_text='多个参数之间用英文半角逗号隔开', blank=True, null=True)
    describe = models.CharField('描述', max_length=255,null=True)

    def __str__(self):
    return self.name

    class Meta:
    verbose_name = '权限表'
    verbose_name_plural = verbose_name
    #权限信息,这里定义的权限的名字,后面是描述信息,描述信息是在django admin中显示权限用的
    permissions = (
    ('views_user_list', '查看用户信息表'),
    ('views_user_info', '查看用户详细信息'),
    )

    创建数据库和超级管理员

    python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser


    第二步:创建验证权限的代码
    from django.shortcuts import render
    from django.core.urlresolvers import resolve #此方法可以将url地址转换成url的name
    from user.models import Permission

    def perm_check(request, *args, **kwargs):
    url_obj = resolve(request.path_info)
    url_name = url_obj.url_name #获取url地址的名字
    perm_name = ''
    #权限必须和urlname配合使得
    if url_name:
    #获取请求方法,和请求参数
    url_method, url_args = request.method, request.GET
    print("11111111111")

    if url_method == 'GET':
    url_method =1
    else:
    url_method =2
    #将各个参数的值用逗号隔开组成字符串,因为数据库中是这样存的 后期可以用一下
    # for i in url_args:
    # url_args_list.append(str(url_args[i]))
    # url_args_list = ','.join(url_args_list)
    #操作数据库
    get_perm = Permission.objects.filter(url=url_name,per_method=url_method)
    if get_perm:
    for i in get_perm:
    perm_name = i.name #获取权限名称
    perm_str = 'user.%s' % perm_name
    if request.user.has_perm(perm_str):
    print('====》权限已匹配')
    return True
    else:
    print('---->权限没有匹配')
    return False
    else:
    return False
    else:
    return False #没有权限设置,默认不放过


    def check_permission(fun): #定义一个装饰器,在views中应用
    def wapper(request, *args, **kwargs):
    if perm_check(request, *args, **kwargs): #调用上面的权限验证方法
    return fun(request, *args, **kwargs)
    return render(request, 'user/403.html', locals())
    return wapper
    第三步:注册需要权限操作的数据库表,在admin里面
    from django.contrib import admin

    # Register your models here.
    from . import models

    admin.site.register([models.UserInfo,models.Permission])

    第四步:使用
    from user.userTool.permission import  check_permission
    @check_permission


  • 相关阅读:
    C++初识
    实现小程序iphonex与iphone6底部适配
    vue-element实现外部独立全选
    flex中图片元素被挤压问题
    vue+element-Ui实现简单的表单必填项验证(1)
    Vuex——项目应用(1)
    Vue项目小应用
    transtion过渡
    axios的高阶用法
    阿里云服务器初步使用介绍
  • 原文地址:https://www.cnblogs.com/ylinhuang/p/10185395.html
Copyright © 2020-2023  润新知