django - 如何在 django 中为用户登录实现自定义身份验证
问题描述
我想在 Django 中实现自定义登录身份验证。我不想使用 Django 的内置身份验证系统,因为它不起作用。我有一个名为 Doctor 的模型,我想从 Doctor 模型中获取数据以进行登录身份验证。我已将默认数据库设置为 MySQl 数据库。
我尝试了一些代码,但它对我不起作用。
视图.py
def login(request):
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request,user)
return render(request,'welcome1.html') #success
else: #Invalid login
return render(request, 'login.html',{
'error_message':'Invalid Credential'
})
return render(request, 'login.html')
模型.py
class Doctor(models.Model):
initial_name = models.CharField(max_length=8)
first_name = models.CharField(max_length=20, unique=True)
last_name = models.CharField(max_length=20, unique=True)
hospital_name = models.CharField(max_length=20)
username = models.EmailField(max_length=50)
password = models.CharField(max_length=50)
address = models.CharField(max_length=1024)
zip_code = models.CharField(max_length=12)
dob = models.DateField(max_length=8)
gender = models.CharField(max_length=10)
phone_number = models.TextField(max_length=10)
def __str__(self):
return self.initial_name
我的预期输出应该是“当我输入错误的电子邮件和密码时,它会显示错误”但是如果我输入错误的电子邮件或密码,它会自动重定向到我的主页。
解决方案
您可以通过 AbstractUser 更好地扩展标准用户模型
如果您想在您的用户模型中有更具体的字段,例如 hospital_name 等
推荐阅读
- php - 从 php 中的站点中删除 index.php
- javascript - Meteor + LitElement (Polymer 3) 导入问题
- azure - Azure Key Vault 中的最大机密数?
- android - 为什么使用“--prod --release android”构建的 Ionic 3 apk 会给 Google Playstore 错误,即 apk 在调试模式下签名?
- javascript - 使用 javascript 的删除数据功能只能工作一次
- tfs - 从 TFS 2017 中的 AreaID 获取区域详细信息
- javascript - 使用 JavaScript 拦截网页中接收到的数据
- django - 使用 Django ManyToManyField 检查实例是否存在
- machine-learning - 管道中 CountVectorizer 的 Sklearn NotFittedError
- python - 栅格化几何示例不起作用