我新注册的用户可以登录到我的 django 网络应用程序

My newly registered user can login to my django web app

我是社区新手。我通常只能找到我的答案,但我一直在搜索和搜索,似乎找不到任何与我正在做的事情相似的东西。我设置了一个 ModelForm 来注册新用户。我让它工作,并将信息发送到 sqlite 数据库。但是,当我尝试在其中记录新注册的用户时,它说:

"Please enter a correct username and password. Note that both fields may be case-sensitive."

login.html:

{% extends 'app/register.html' %}

{% block content %}
<h2>Login</h2>

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Login">
</form>

<a href="{% url 'index' %}">Back to Homepage</a>
<br>
<a href="{% url 'password_reset' %}">Reset password</a>
<br>
<a href="{% url 'register' %}">Register</a>
{% endblock %}

views.py

from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.decorators import login_required
from datetime import datetime
from django.http import HttpRequest
from django.shortcuts import render, redirect
from django.urls import reverse
from . import forms
from django.contrib import auth

def index(request):
    """Renders the home page."""
    assert isinstance(request, HttpRequest)
    return render(
        request,
        'app/index.html',
        {
            'title':'Home Page',
            'year':datetime.now().year,
        }
    )
    
def register(request):
    
    if request.method == "GET":
        form = forms.Registration(request.GET)
        return render(
        request, "app/register.html",
        {"form": form}
        )
    elif request.method == "POST":
        form = forms.Registration(request.POST)
        if form.is_valid():
            user = form.save()
            login(request, user)
            return redirect(reverse("index"))

models.py

from django.contrib.auth.models import User
from django.db import models

# Create your models here.
class Patient(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    #birthdate = models.DateField(auto_now=False, null=True, blank=True)
    gender = models.CharField(max_length=100, blank=True)
    allergies = models.TextField(blank=True)
    email = models.CharField(max_length=200)
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=100)
    last_login = models.CharField(max_length=100)

和forms.py:

from django import forms
from . import models
from django.contrib.auth.forms import AuthenticationForm
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User

class Registration(forms.ModelForm):
    class Meta:
        model = models.Patient
        fields = ('first_name','last_name', 'gender', 'email', 'username', 'password', 'allergies',)

如有任何帮助,我们将不胜感激。如果我遗漏了什么,请原谅我,请告诉我。谢谢!

在视图文件的第 33 行中,您使用了 auth_login() 函数,但我找不到您导入它的位置 您是指 authentication() 还是 login() 函数?

因此,经过大量的反复试验和摆弄,我最终以这种方式修复了它,这要感谢上面 Abdul Aziz Barkat 的建议。

我将 Patient(models.Model) 更改为 Patient(AbstractUser)

然后我还必须将 Registration(forms.ModelForm) 更改为 Registration(UserCreationForm)。现在所有用户都在进行身份验证,谢谢!