Django 中的会员管理
membership management in Django
我正在 Django 2.0
中编写我的第一个 Django 应用程序
我的应用程序有两种会员级别
- 免费用户
- 付费用户
此外,在应用程序中,我想为免费用户禁用某些 function/views
并根据会员级别隐藏模板中的元素。
如何在我的应用程序中管理所有这些?
是否可以使用内置的权限管理器来完成这一切?
我尝试阅读文档,但它包含的内置模块很少,无法按照我的要求将其分开
是的,您可以...最简单的方法是 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()
需要在这里回答代码形成:
当然可以,只需按照此处所述添加您自己的模板标签即可:
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 %}
我正在 Django 2.0
我的应用程序有两种会员级别
- 免费用户
- 付费用户
此外,在应用程序中,我想为免费用户禁用某些 function/views
并根据会员级别隐藏模板中的元素。
如何在我的应用程序中管理所有这些?
是否可以使用内置的权限管理器来完成这一切?
我尝试阅读文档,但它包含的内置模块很少,无法按照我的要求将其分开
是的,您可以...最简单的方法是 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()
需要在这里回答代码形成:
当然可以,只需按照此处所述添加您自己的模板标签即可:
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 %}