【问题标题】:Django display html page based on user typeDjango根据用户类型显示html页面
【发布时间】:2020-05-04 21:10:30
【问题描述】:

我想根据用户类型(管理员、访客、学生等)显示我网站的主页。为来宾用户显示登录页面的链接会很好,但是对于已经通过身份验证的用户,应该隐藏此链接。对于管理员来说,应该有一个 django-admin 的链接。除此之外,其他用户角色的主页也存在一些差异。

有什么好的方法来实现这个?我有几个选择:

  1. 为每个用户角色创建 html 页面:home_guest.html, home_admin.html, ...
  2. 创建一个单独的 html 页面,但在其中放置一些 if 子句,例如 {% if user.is_authenticated %}

【问题讨论】:

  • 绝对是选项2。参数依赖是模板的用途。

标签: 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,则显示该视图,否则,显示另一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2012-09-17
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多