在 Django 中对用户进行身份验证

时间:2021-03-13 16:06:56

标签: django django-models django-views

如何在 Django 中验证用户(模型)? 根据 django 文档,我们可以使用以下方法对用户进行身份验证,

        user=auth.authenticate(username=username,password=password)
        if user is not None:
            auth.login(request,user)
            return redirect('/profile')

我在上面尝试过,它成功了,但它仅适用于管理面板附带的内置用户模型。 我的问题是:

我在models.py中创建了一个带有自定义字段的模型(客户),例如电话号码

from django.db import models


class Customers(models.Model):
    first_name=models.CharField(max_length=100)
    last_name=models.CharField(max_length=100)
    phone=models.CharField(max_length=15)
    email=models.EmailField()
    password=models.CharField(max_length=500)

登录.html

<form action="/login/" method="POST">
    {% csrf_token %}
  
    
    <input type="email" name="email" placeholder="Enter email">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" value="submit">
</form>

在views.py中

def login(request):
    if request.method=='POST':
        email= request.POST.get('email')
        password= request.POST.get('password')
        user = Customers.authenticae(email=email, password=password)
        if user is not None:
            user.login(request, user)
            return redirect('/profile')

    return render(request,'login.html')

当我尝试这个时,它说:

type object 'Customers' has no attribute 'authenticae'

我是否需要在models.py 中创建authenticate() 函数,或者有一种方法可以做到这一点?如何验证我的客户,我刚开始学习 django 框架,任何人都可以帮助我实现这一点。

2 个答案:

答案 0 :(得分:0)

内置用户类具有身份验证方法。要使用身份验证方法,您必须将客户模型链接到内置用户模型。

可以通过三种方式将您的模型链接到内置用户模型:

  1. 您可以从内置用户模型extend 客户。

  2. 您可以override内置用户模型。

  3. 最简单的方法是从 AbstractBaseUser inherit

这是一个完整的example

答案 1 :(得分:0)

最好的办法是扩展用户模型或完全创建一个新模型。

另外,如果您必须使用电子邮件进行身份验证,那么您必须编写自己的身份验证后端。