为了账号安全,请及时绑定邮箱和手机立即绑定

Django根据不同的用户组部分限制内容

Django根据不同的用户组部分限制内容

梵蒂冈之花 2021-05-14 09:20:41
上周刚开始使用Django,我正面临有关两种类型的用户(普通用户和VIP用户)以及如何限制普通用户查看VIP内容的问题。我正在将Django与MySQL配合使用。我的网站不需要用户注册,但我将为他们提供用户名/密码。我通过Django管理员手动创建用户,并根据VIP或普通用户对其进行分组。我将上载内容(同样通过admin),并且我有一个布尔复选框,该复选框确定它是否是VIP内容。到目前为止,我所做的是:用户必须登录才能查看内容登录后,VIP可以看到VIP内容,普通用户将无法看到VIP内容。FAQ.html{% extends 'base.html' %}...skipping...{% for faqs in fq reversed %}<a href="{% url 'faq_topics' faqs.pk %}">{{ faqs.name }}</a>{{ endfor }}faq_topics.html<h2>{{ faqs.name }}</h2><h6 style="padding: 20px 20px 20px 20px">{{ faqs.description|linebreaksbr }}</h6>urls.pyurlpatterns = [path('faq/', views.faq, name='faq'),url(r'^faq/(?P<pk>\d+)/$', views.faq_topics, name='faq_topics'),]views.pydef is_user(user):    return user.groups.filter(name='User').exists()def is_vip(user):    return user.groups.filter(name='VIP').exists()@login_required@user_passes_test(is_user)def faq(request):    fq = FAQ.objects.filter(vip_only=False)    return render(request, 'faq.html', {'fq':fq})models.pyclass FAQ(models.Model):    name = models.CharField(max_length=30, unique=True)    description = models.CharField(max_length=300)    vip_only = models.BooleanField(default=False)错误案例进行了3个FAQ条目,第一个被归类为VIP。普通用户登录到“常见问题”部分时,他/她只会看到2个内容欢迎来到常见问题解答部分127.0.0.1:8000/faq/3/127.0.0.1:8000/faq/2/但是,用户可以轻松地猜测faq / 1 /存在,并且当他们实际尝试时,他们也可以访问vip内容。在过去的两天里,我一直在网上搜索内容,我将学习如何使用@user_passes_test来限制用户和objects.filter(vip_only = False)来限制内容。另外,我希望我的views.py控制两种用户的内容,但我尚未实现。如果有人可以教我如何在一个模板中实现“ 2个视图”,将不胜感激。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 274 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信