【问题标题】:membership management in DjangoDjango中的成员管理
【发布时间】:2017-12-28 08:02:57
【问题描述】:

我正在Django 2.0 中编写我的第一个 Django 应用程序

我的申请有两种会员级别

  1. 免费用户
  2. 付费用户

此外,我希望在应用程序中为免费用户禁用某些 function/views,并根据会员级别隐藏模板中的元素。

如何在我的应用程序中管理所有这些?

是否可以使用内置权限管理器完成所有操作?

我尝试阅读文档,但它包含的内置模块很少,无法根据我的要求了解如何将其分开

【问题讨论】:

    标签: django django-permissions django-2.0


    【解决方案1】:

    是的,您可以...最简单的方法是Group-User-Model。您可以使用内置的用户和组管理。 只需将组 freepaid 添加到该组中即可。 您可以在每个函数中查询,例如

    def main(request):
      if request.user.groups.filter(name='paid').exists():
         return HttpResponse("You're a paid user")
      else:
         return HttpResponse("You're a free user")
    

    或者如果内容仅对付费用户可见:

    def onlyPaidUsersView(request):
      if request.user.groups.filter(name='paid').exists():
         return render(request, 'paid.html',{})
      else:
         return HttpResponse("Only available for paid users",status=403)
    

    在模板文件中也是如此——您只需要定义自己的模板标签:

    from django import template
    from django.contrib.auth.models import Group
    
    register = template.Library()
    
    @register.filter(name='has_group')
    def has_group(user, group_name):
        group =  Group.objects.get(name=group_name)
        return group in user.groups.all()
    

    【讨论】:

    • 谢谢。有没有办法(最好是装饰器)将CreateView 仅限于付费用户?或某种许可 can_add
    • 是的,内置系统中有几个选项。只需登录/admin 仪表板并编辑组。核心级别和模型级别已经有一些权限...
    • 我想在视图级别检查它,例如在视图中检查用户/组是否有权创建其他打印消息并重新加载同一页面或重定向
    【解决方案2】:

    代码形成需要在这里回答:

    当然,只需像这里提到的那样添加您自己的模板标签:

    https://docs.djangoproject.com/en/2.0/howto/custom-template-tags/

    并添加如下内容:

    @register.filter(name='has_perm')
    def user_has_perm(user, perm):
    if request.user.has_perm('app_name.%s'%perm):
       return True
    else:
      return False
    

    在 html 文件中:

    {% load myfilter %}
    {% if request.user|user_has_perm:'can_add_sth' %}
    ...
    {% else %}
    ...
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2014-08-10
      • 2023-03-24
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多