如何解决不同用户登录的 Django 呈现不同的 html 页面
我正在使用 Django。 我正在使用 django 的内置 auth .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 页面呈现,销售 sales/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 = '销售'
urlpatterns = [
path('sales-main-dashboard',name='sales-main-dashboard'),]
'''
解决方法
您应该在您的应用程序中使用基于令牌的身份验证。 身份验证是将传入请求与一组识别凭据(例如请求来自的用户或用于签名的令牌)相关联的机制。
有多种现成的身份验证方案。
我发现的最好的一个是 JSON Web Token Authentication
(您可以通过任何方式为您的应用程序使用任何您想要的东西)。
在jwt(Json web token)中你需要在用户登录时生成并发送jwt(token),特别是在登录API响应中,并且需要在请求的Header中从客户端发回相同的令牌,特别是应该包裹在密钥 Authorization 中。
Authorization : Bearer paste_token_received_in_login_api
所以最后验证这个令牌并让用户访问受尊重的资源。
如果您觉得这不能回答您的问题,请详细说明您的问题。以便有人可以回答。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。