首页 > 解决方案 > 不同用户登录上的 Django 呈现不同的 html 页面

问题描述

我正在使用 Django。我正在使用 django 的内置身份验证 .user 进行人员登录。我已经使用模型配置文件扩展了 auth.user(包含角色和图像)

models.py 如下:

from django.contrib.auth.models import User

class Profile(models.Model):

ROLE_CHOICES = [
    ('SALES', 'SALES'),
    ('MARKETING', 'MARKETING'),
    ('HR', 'HR'),
    ('PROJECT MANAGER', 'PROJECT MANAGER'),
    ('SUPERVISOR', 'SUPERVISOR'),
]

user = models.ForeignKey(User, on_delete=models.CASCADE)
profile_image = models.FileField(upload_to='img/', default='img/default.png')
role = models.CharField(max_length=20, choices=ROLE_CHOICES, blank=True)

def __str__(self):
    return str(self.user)

这是我登录正确凭据的views.py: '''

class SignView(View):

   def get(self, request):
       return render(request, 'login/login.html')

   def post(self, request):
       email = request.POST.get('email')
       password = request.POST.get('password')
       role = request.POST.get('role')

       # If user doesn't exist return None
       user = User.objects.filter(email=email).first()

       if user is not None:
           # Check password
           correct_password = check_password(password, user.password)

           if correct_password:
               pro = Profile.objects.get(user=user)
               print(pro.role)
               if pro.role == 'Sales':
                   login(request, user)
                   return HttpResponseRedirect(reverse('sales:sales-main-dashboard'))
               else:
                   login(request, user)
                   return HttpResponseRedirect(reverse('marketing:marketing-main-dashboard'))
            messages.error(request, 'Sorry something went wrong.')
            return render(request, 'login/login.html')

''' 现在它适用于 2 个角色,即如果营销人员登录然后营销/main-dashboard.html 页面呈现和销售销售/main-dashboard.html 呈现,但当我的角色增加时(至少 30角色将在那里)每次呈现不同的页面(对于那个特定的角色)我必须给出 if,elif 语句(参考我的观点)。请给我正确的方法。

用于营销应用程序的 urls.py。

'''

app_name = 'marketing'

urlpatterns = [

path('marketing-main-dashboard', login_required(MainDashboardView.as_view()), 
name='marketing-main-dashboard'),
]

'''

用于营销应用和销售应用的 urls.py。''' app_name = '销售'

网址模式 = [

path('sales-main-dashboard', login_required(MainDashboardView.as_view()), name='sales-main-dashboard'),]

'''

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-users

解决方案


您应该在应用程序中使用基于令牌的身份验证。身份验证是将传入请求与一组识别凭据相关联的机制,例如请求来自的用户或用于签名的令牌。

有许多开箱即用的身份验证方案。我发现最好的一个是JSON Web Token Authentication(您可以使用任何您希望为您的应用程序使用的任何方式)。

在 jwt(Json web token) 中,您需要在用户登录时生成并发送 jwt(token),特别是在登录 API 响应中,并且需要在请求的 Header 中从客户端发回相同的令牌,特别是它应该包含在密钥授权中。

Authorization : Bearer paste_token_received_in_login_api

所以最后验证这个令牌并让用户访问受尊重的资源。

如果您觉得这不能回答您的问题,请详细说明您的问题。以便有人可以回答。


推荐阅读