一、登录逻辑原理
1、HTTP 应用的信息是通过请求报文和响应报文传递的,其中请求报文由客户端发送,其中包含和许多的信息,而 django 将这些信息封装成了 HttpRequest 对象,该对象由 HttpRequest 类创建。每一个请求都会生成一个 HttpRequest 对象,django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
简单说:请求url时,前端生成的信息传给了views里的函数参数request,在表单提交中,点击提交,前端的信息是通过input里的name传递到后台,然后取出request中的数据在后端进行逻辑处理
2、配置url
传给的只是句柄,加上括号表示调用这个函数,现在只是指向这个函数
3、简单搭建views逻辑
根据view里面的逻辑,交互方法如果是GET方法,返回登录页面login.html
4、配置前端模板
防止CSRF禁止,在form表单中加入{% csrf_token %},并配置好提交表单的url和交互方法,action=”/login/” method=”post”
添加csrf验证后,前端生成了hidden input
5、简单调试
打断点,调试,重启项目,点击登录,进入断点处,查看参数,F8执行完整个程序,跳转到登录界request是一个WSGIRequest对象,点击登录交互方法是GET方法
二、添加数据登录
点击登录页面立即登录按钮,数据通过input里的name传递到后台,存储在POST中
1、编写views逻辑,后端数据通过模板传递到request的POST中,取出POST中的数据进行验证
2、填写用户名和密码,点击提交,查看参数request,交互方法是POST方法,可以看到POST中的参数是以键值对的形式存储的,是QueryDict
3、模板配置
表单提交成功后,跳转到首页,首页的登录部分会显示为个人中心,需要在首页模板进行判断
判断:没有用户登录时,显示登录、注册按钮,登录成功后显示个人中心
users views.py
# _*_ coding:utf-8 _*_
from django.shortcuts import render
from django.contrib.auth import authenticate, login
# Create your views here.
def login(request):
if request.method == "POST":
user_name = request.POST.get("username", "") # 取出前端传过来的username
pass_word = request.POST.get("password", "") # 取出前端传过来的password
user = authenticate(username=user_name, password=pass_word) # 验证username,password是否正确
if user is not None: # 如果验证不通过,返回None
login(request, user) # 登录
return render(request, "index.html") # 暂时返回首页,首页登录部分变成个人中心
else:
return render(request, 'login.html', {}) # 登录不成功还是返回登录页
elif request.method == "GET":
return render(request, 'login.html', {})