首页 > 解决方案 > 如何在 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

我的预期输出应该是“当我输入错误的电子邮件和密码时,它会显示错误”但是如果我输入错误的电子邮件或密码,它会自动重定向到我的主页。

标签: djangoauthenticationlogin

解决方案


您可以通过 AbstractUser 更好地扩展标准用户模型

https://docs.djangoproject.com/en/2.2/topics/auth/customizing/#using-a-custom-user-model-when-starting-a-project

如果您想在您的用户模型中有更具体的字段,例如 hospital_name 等


推荐阅读