【问题标题】:Django display html page based on user typeDjango根据用户类型显示html页面
【发布时间】:2020-05-04 21:10:30
【问题描述】:
我想根据用户类型(管理员、访客、学生等)显示我网站的主页。为来宾用户显示登录页面的链接会很好,但是对于已经通过身份验证的用户,应该隐藏此链接。对于管理员来说,应该有一个 django-admin 的链接。除此之外,其他用户角色的主页也存在一些差异。
有什么好的方法来实现这个?我有几个选择:
- 为每个用户角色创建 html 页面:
home_guest.html, home_admin.html, ...
- 创建一个单独的 html 页面,但在其中放置一些 if 子句,例如
{% if user.is_authenticated %}
【问题讨论】:
标签:
django
django-templates
【解决方案1】:
您可以从文档开始,使用:
from django.contrib.auth.decorators import user_passes_test
def email_check(user):
return user.email.endswith('@example.com')
@user_passes_test(email_check)
def my_view(request):
...
这大致意味着如果用户通过了测试——在电子邮件endswith 上提供——那么他们将能够看到视图。就我而言,我稍微偏离了这一点并创建了一个
class User(AbstractBaseUser):
status: 1,2 per se, in my model:
student=1
teacher=2
STATUS_CHOICES = ((student, "student"),(teacher, "teacher"),)
status = models.IntegerField(choices = STATUS_CHOICES)
这让您可以创建一个is_status 属性:
@property
def is_status (self):
return self.status
然后在您的登录视图中,您可以与属性一起玩。如果为 1,则显示该视图,否则,显示另一个。