一 流程图
二 编辑mysite/account/views.py
from django.shortcuts import render
from django.http import HttpResponse
# Django默认的用户认证和管理中的两个方法
from django.contrib.auth import authenticate, login
from .forms import LoginForm
# 用户登录视图函数
def user_login(request):
# POST请求处理,里面绑定了数据
if request.method == "POST":
# 通过request.POST得到提交的表单数据,也是一个字典对象
login_form = LoginForm(request.POST)
# 验证传入的数据是否合法
if login_form.is_valid():
# 以健值对的形式记录了用户名和密码
cd = login_form.cleaned_data
# 验证用户名和密码
user = authenticate(username=cd['username'], password=cd['password'])
# 用户名和密码正确得到一个实例对象
if user:
# 用户登录操作,用户登录之后,Django会自动调用默认的session应用,将用户ID保存在session中,
# 完成用户登录操作
login(request,user)
# 当网页返回字符串,用HttpResponse方法
return HttpResponse("欢迎你,你已授权登录!")
# 用户名和密码不对,得到空实例
else:
return HttpResponse("对不起,用户名和密码错误!")
else:
return HttpResponse("Invalid login")
# GET请求处理,里面没有绑定数据
if request.method == "GET":
login_form = LoginForm()
return render(request, "account/login.html", {"form":login_form})
三 登录模板设计
{% extends "base.html" %}
{% block title %}登录{% endblock %}
{% block content %}
<div class="row text-center vertical-middle-sm">
<h1>登录</h1>
<p>请输入用户名和密码</p>
<!--其中的action用于显示当前表单的提交地址,这里表示当前地址,即调用此模板的视图函数所对应的URL-->
<form class="form-horizontal" action="." method="post">
{% csrf_token %}
<!--每个表单元素在一对P标签内-->
<!--{{ form.as_p }}-->
<!--使用Bootstrap样式使得表单更美丽-->
<div class="form-group">
<label for="{{ form.username.id_for_label }}" class="col-md-5 control-label" style="color:red"><span class="glyphicon glyphicon-user"></span>Username</label>
<div class="col-md-6 text-left">{{ form.username }}</div>
</div>
<div class="form-group">
<label for="{{ form.password.id_for_label }}" class="col-md-5 control-label" style="color:blue"><span class="glyphicon glyphicon-floppy-open"></span>Password</label>
<div class="col-md-6 text-left">{{ form.password }}</div>
</div>
<input type="submit" value="Login">
</form>
</div>
{% endblock %}
四 测试
1 浏览器输入:http://localhost:8000/account/login/
2 输入正确用户名和密码
欢迎你,你已授权登录!
3 输入错误用户名和密码
对不起,用户名和密码错误!