• 167.权限-添加权限的两种方式


    Django中内置了权限功能,他的权限都是针对表与模型级别的,比如对某个模型上的数据是否可以进行增删改查操作,它不能针对数据级别,比如针对某个表的某条数据进行增删改查操作如果要实现数据级别的,考虑使用django.guardian.

    1.通过定义模型的方式添加权限

    (1)权限都是django.contrib.auth.Permission的实例。这个模型包含三个字段:name、codename、content_type,其中的content_type表示这个permission是属于哪个app下的哪个models。
    (2)使用Django创建模型,在映射到数据库中之后,就会默认的为项目创建auth_permission表,表中的字段:name(权限的描述信息);content_type_id(django_content_type表中的key,即代表的是app对应的模型);codename(权限的名字)。在我们创建模型的时候,Django默认会为我们添加增(add)、删(delete)、改(change)、查(view)权限,如果想要对某个表或者是模型添加权限。那么,我们可以在定义模型的时候,在Meta类中指定permission。示例代码如下:
    class Article(models.Model):
        title = models.CharField(max_length=100)
        content = models.CharField(max_length=100)
        author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    
        class Meta:
            permissions = {
                ('black_article', '拉黑文章')
                }
    
    在views.py文件中为user添加该权限。分析:如果想要为用户添加拉黑文章的权限,那么就需要使用ContentType和Permission模型创建实例对象,首先需要导入Django内置的这两个模型。
    示例代码如下:
    from django.contrib.auth.models import Permission, ContentType
    
    def permission_view(request):
        # 1. 通过ContentType模型获取要添加的某个app下的某个模型
        content_type = ContentType.objects.get_for_model(Article)
        # 2. 创建权限示例
        permission = Permission.objects.create(content_type=content_type)
        if permission:
            print('添加权限成功!')
        else:
            print('您不能添加该权限!')
        return HttpResponse('添加权限!')
    
    之后,就可以在auth_permission中查看到我们添加的拉黑文章的权限了。

    2. 通过代码的形式

    def permission_view(request):
        # 2. 通过代码的形式添加权限
        content_type = ContentType.objects.get_for_model(Article)
        Permission.objects.create(codename='black_article', name='拉黑文章', content_type=content_type)
        return HttpResponse('添加权限!')
    
    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    有关Angular 2.0的一切
    后Angular时代二三事
    构建单页Web应用
    用JS渲染的单页面应用其实性能还是比较差的
    给一位打算从事前端,但是又有疑惑的在校大学生的回信
    企业文化与价值观 — 给新员工的一封信
    老码农的技术理想
    (OK) install vmware12 in fedora23
    ECMAScript——wikipedia
    《ECMAScript 6入门》——JavaScript
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12354534.html
Copyright © 2020-2023  润新知