我正在尝试使用Django建立一个网站,我有几个需要登录的视图。但是,我无法弄清楚如何验证用户。我对网络开发非常陌生(这是我的第一个项目),所以如果我不清楚,请询问后续问题。以下是一些可能提供上下文的代码:
摘自rushsite / rush / views.py:
from django.http import HttpResponseRedirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
def login_user(request):
if request.method == "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 HttpResponseRedirect('list')
else:
return render(request, "registration/login.html")
else:
return render(request, "registration/login.html")
我的login.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container">
<div class="top">
<h1 id="title" class="hidden"><span id="logo">Delta Sig<span> Recruitment</span></span></h1>
</div>
<div class="login-box animated fadeInUp">
<div class="box-header">
<h2>Log In</h2>
</div>
<form method="post">
{% csrf_token %}
<label for="username">Username</label>
<br/>
<input type="text" id="username">
<br/>
<label for="password">Password</label>
<br/>
<input type="password" id="password">
<br/>
<button type="submit">Sign In</button>
<br/>
<br/>
{% if request.META.HTTP_REFERER == "http://127.0.0.1:8000/login/" %} Incorrect username or password. {% endif %}
</form>
</div>
</div>
</body>
来自rushsite / rush / models.py的摘录:
from django.db import models
from django.contrib.auth.models import User
from django.core.validators import MaxValueValidator, MinValueValidator
class Brother(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=64)
last_name = models.CharField(max_length=64)
当我使用我知道有效的凭据点击我的表单上的提交时,用户=无,所以它只是将我重新定向回登录页面。我做错了什么?
答案 0 :(得分:0)
由于您的登录视图没有做任何奇怪的事情,您应该使用django's pre-made authentication views。这可以避免在重新发明轮子时可能出现的正常问题。
它还包括一些额外的功能,例如使用django的表单,以及基于?next=
GET arg成功登录时的重定向。
在这种情况下,您需要LoginView
。
我还建议查看[django的内置表单(https://docs.djangoproject.com/en/2.0/topics/forms/)。如果您 需要为此编写自己的视图,那么表单将有助于验证。他们可以simplify your template code,并会适当地显示验证错误。
使用LoginView
自动生成的表单,模板中的<form>
可以缩减为:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
</form>