1

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

我的申请有两种会员级别

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

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

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

是否可以使用内置的权限管理器来完成这一切?

我尝试阅读文档,但它包含很少的内置模块,无法根据我的要求获得如何分离它

4

2 回答 2

3

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

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()
于 2017-12-28T08:36:40.250 回答
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 %}
于 2017-12-28T09:08:58.383 回答