django - 不同用户登录上的 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'),]
'''
解决方案
您应该在应用程序中使用基于令牌的身份验证。身份验证是将传入请求与一组识别凭据相关联的机制,例如请求来自的用户或用于签名的令牌。
有许多开箱即用的身份验证方案。我发现最好的一个是JSON Web Token Authentication
(您可以使用任何您希望为您的应用程序使用的任何方式)。
在 jwt(Json web token) 中,您需要在用户登录时生成并发送 jwt(token),特别是在登录 API 响应中,并且需要在请求的 Header 中从客户端发回相同的令牌,特别是它应该包含在密钥授权中。
Authorization : Bearer paste_token_received_in_login_api
所以最后验证这个令牌并让用户访问受尊重的资源。
如果您觉得这不能回答您的问题,请详细说明您的问题。以便有人可以回答。
推荐阅读
- asp.net-web-api - Web API 查询字符串和问号?
- excel - ActiveX ComboBox 驱动工作簿格式化
- java - WireMock 中的查询参数
- jenkins - Jenkins 多分支流水线脚本
- angular - angular 5重置嵌套形式
- sql - SQL 更新两个具有相同随机值的表
- c# - .net core default value when saving but identity info is different dbcontext
- json - Mongo DB中的数据库结构
- web-services - 如何在谷歌应用脚本上调用网络服务
- excel - 我收到运行时错误“91”:对象变量或未在工作表上设置块变量。可能没有选择工作表?