我看了一个晚上,才看明白login这个页面的逻辑。
我真是笨!
- views.py
class LoginForm(Form):
name = fields.CharField(
required=True,
error_messages={
'required': '用户名不能为空'},
widget=widgets.TextInput(attrs={
'class': 'form-control', 'placeholder': '用户名', 'id': 'name'})
)
password = fields.CharField(
required=True,
error_messages={
'required': '密码不能为空'},
widget=widgets.PasswordInput(attrs={
'class': 'form-control', 'placeholder': '密码', 'id': 'password'})
)
rmb = fields.BooleanField(required=False, widget=widgets.CheckboxInput(attrs={
'value': 1}))
def login(request):
"""
用户登录
"""
if request.method == "GET":
form = LoginForm()
return render(request, 'login.html', {
'form': form})
else:
form = LoginForm(request.POST)
if form.is_valid():
rmb = form.cleaned_data.pop('rmb')
#form.cleaned_data['password'] = md5(form.cleaned_data['password'])
#user = models.UserInfo.objects.filter(**{'name': '张凯程', 'password': 'zhangkaicheng'}).first()
user = models.UserInfo.objects.filter(**form.cleaned_data).first()
if user:
request.session['user_info'] = {
'id': user.id, 'name': user.name}
if rmb:
request.session.set_expiry(60 * 60 * 24)
return redirect('/index/')
#return render(request, 'cleaned_data.html', {'form': form, 'user':user,'session':request.POST}) # 查看cleaned_data信息
else:
form.add_error('password', '密码错误')
return render(request, 'login.html', {
'form': form})
else:
return render(request, 'login.html', {
'form': form})
- models.py
class UserInfo(models.Model):
name = models.CharField(verbose_name='用户姓名', max_length=32)
password = models.CharField(verbose_name='密码', max_length=32)
def __str__(self):
return self.name
- login.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'plugins/bootstrap/css/bootstrap.min.css' %}">
</head>
<body>
<div style="width: 500px;margin: 50px auto;">
<form class="form-horizontal" method="post" novalidate>
{% csrf_token %}
<div class="form-group">
<label for="name" class="col-sm-2 control-label">用户名:</label>
<div class="col-sm-10">
{
{ form.name }}
{
{ form.errors.name.0 }}
</div>
</div>
<div class="form-group">
<label for="password" class="col-sm-2 control-label">密码:</label>
<div class="col-sm-10">
{
{ form.password }}
{
{ form.errors.password.0 }}
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
{
{ form.rmb }} 一天免登录
</label>
</div>
</div>
</div-->
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary">登录</button>
</div>
</div>
</form>
</div>
</body>
</html>