我正在尝试使用 django.contrib.auth authenticate()
方法中的默认 Django
来验证用户是否存在。我在用户注册后立即执行此操作。用户注册并且他们的username
、email
和password
被输入到database
然后他们被带到login page
但是它不起作用。
这是我的 views.py
from django.shortcuts import render,redirect
from .models import Student
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
# Create your views here.
def index(request):
if request.method == "POST":
fname = request.POST.get('fname')
lname = request.POST.get('lname')
pnumber = request.POST.get('pnumber')
email = request.POST.get('email')
password = request.POST.get('password')
student = Student(fname = fname, lname = lname, pnumber = pnumber, email = email,
password = password)
student.save()
user = User.objects.create_user(fname, email, password)
user.save()
return render(request, ('SignUpPage.html'))
def loginUser(request):
if request.method == "POST":
email = request.POST.get('email')
password = request.POST.get('password')
user = authenticate(email=email, password=password)
if user is not None:
login(request, user)
return redirect('mainPage')
else:
return render(request, ('LoginPage.html'))
return render(request, ('LoginPage.html'))
def mainPage(request):
return render(request, ('MainPage.html'))
这是我的 urls.py
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('login', views.loginUser, name="login"),
path('mainPage',views.mainPage, name='mainPage')
]
这是我的 html
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Login</title>
<link
href="https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,300;1,300&display=swap"
rel="stylesheet"
/>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
list-style: none;
font-family: "Raleway", sans-serif;
font-weight: bolder;
}
body {
background-image: url(clean-medical-background_53876-97927.webp);
background-repeat: no-repeat;
background-size: 1920px 975px;
}
.wrapper {
min-height: 90vh;
display: flex;
justify-content: right;
align-items: center;
margin-right: 500px;
}
.login_form {
background: white;
padding: 25px;
border-radius: 50px;
width: 400px;
}
.login_form .title {
text-align: center;
font-size: 30px;
text-transform: uppercase;
color: #77d5cc;
letter-spacing: 4px;
font-weight: 900;
}
.form_wrap {
margin-top: 35px;
}
.form_wrap .input_wrap {
margin-bottom: 20px;
}
.form_wrap .input_wrap:last-child {
margin-bottom: 10;
}
.form_wrap .input_wrap label {
display: block;
margin-bottom: 3px;
}
.form_wrap input[type="text"] {
width: 100%;
border-radius: 3px;
border: 1.3px solid #9597a6;
padding: 10px;
outline: none;
}
.form_wrap input[type="password"] {
width: 100%;
border-radius: 3px;
border: 1.3px solid #9597a6;
padding: 10px;
outline: none;
}
.form_wrap input[type="text"]:focus {
border-color: #77d5cc;
}
.form_wrap input[type="password"]:focus {
border-color: #77d5cc;
}
.form_wrap .login_btn {
text-align: center;
width: 100%;
background: #77d5cc;
padding: 10px;
border: 0;
color: white;
font-size: 17px;
border-radius: 3px;
text-transform: uppercase;
letter-spacing: 2px;
cursor: pointer;
}
.form_wrap .login_btn:hover {
background: #bde9e3;
}
.form_wrap p {
font-family: "Raleway", sans-serif;
text-align: center;
}
.form_wrap a {
display: block;
text-align: center;
width: 30%;
margin-left: 122px;
background: #77d5cc;
padding: 10px;
border: 0;
color: white;
font-size: 15px;
border-radius: 3px;
text-transform: uppercase;
letter-spacing: 2px;
cursor: pointer;
}
.form_wrap a:hover{
background-color: #bde9e3;
}
</style>
</head>
<body>
<div class="wrapper">
<div class="login_form">
<div class="title">
<label>Login</label>
</div>
<form action="/login" method="POST">
{% csrf_token %}
<div class="form_wrap">
<div class="input_wrap">
<label for="email">Email Address</label>
<input type="text" name = "email" id="email" />
</div>
<div class="input_wrap">
<label for="password">Password</label>
<input type="password" name = "password" id="password" />
</div>
<div class="input_wrap">
<input type="submit" value="Login" class="login_btn" />
</div>
<div class="input_wrap">
<p>Don't Have Account! Sign Up Here</p>
</div>
<div class="input_wrap">
<a href="/" target="_blank">Sign Up</a>
</div>
</div>
</form>
</div>
</div>
回答1
您正在尝试使用电子邮件进行身份验证,基本 Django 的身份验证是使用用户名。如果你想使用电子邮件,你必须告诉 Django。将此添加到您的 User
模型中:
class User(...):
...
USERNAME_FIELD = "email"
...
您还说用户注册了 username
,但您只使用了 fname
和 lname
。请具体并阅读您所写的内容,否则我们无法为您提供帮助。