型号和权限

Ben*_*nNG 1 django django-models

我目前正在学习python / django作为自己的教程,我已经做到了:

  • 创建用户->确定
  • 创建登录用户->确定
  • 创建一个名为“ Article”的新模型,将标题和内容作为属性->确定
  • 创建几个“ Article”实例->确定
  • 我将所有文章显示在webapp的根目录->
  • 最后一步是:为了操纵权限,仅显示一些文章,具体取决于使用权限登录的用户。例如,如果用户A:则仅显示具有奇数ID的文章(没有任何意义,但仅用于学习)

手动进行“实例许可”似乎很复杂,对吧?

干杯

Ben*_*nNG 5

首先,我们必须创建2个权限

from django.db import models

class Article(models.Model):
    title = models.TextField()
    content = models.TextField()

    class Meta:
        permissions = (
            ('can_view_odd_ids', 'can_view_odd_ids'),
            ('can_view_even_ids', 'can_view_even_ids'),
        )

    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

运行迁移后,我们可以使用Shell手动将权限应用于用户

odd_even = Permission.objects.get(name='can_view_even_ids')
user_yui = User.objects.get(username='yui')
user_yui.user_permissions.add(odd_even)
user_yui.save()
Run Code Online (Sandbox Code Playgroud)

然后在视图中测试对我们用户的许可(类似这样)

def my_view(request):
    data = {}
    if request.user.is_authenticated():
        count = Article.objects.all().count()
        if request.user.has_perm("account.can_view_odd_ids"):
            data = {'articles': Article.objects.all()[1::2]})
        elif request.user.has_perm("account.can_view_even_ids"):
            data = {'articles': Article.objects.all()[0::2]})
    return render(request, 'index.html', data)
Run Code Online (Sandbox Code Playgroud)