接着我们来做一下登陆功能
我们首先在templates创建一个login.html,用来显示登陆的页面
-
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="/static/js/jquery-3.3.1.js"></script> <script> $(function (){ $("input[name='username']").blur(function () { //alert("") uname=$("input [name='username']").val() CSRF=$("input[name='csrfmiddlewaretoken']").val() $.ajax({ url:'/BlogUser/getUser', data:{'uname':uname,'csrfmiddlewaretoken':CSRF}, type:'POST', }); }); }); </script> </head> <body> <h1>欢迎登录</h1> <form action="/BlogUser/login" method="post"> {% csrf_token %} 用户名:<input type="text" name="username" value="{{ username }}"> <br> 密 码:<input type="password" name="pwd"> <label style="color: red">{{ error1 }}</label><br> <input type="submit" value="登录"> </form> </body> </html>
接着在views.py中创建登录的函数login()
-
def login(request): if request.method=='GET': return render(request,'login.html') else: username=request.POST.get('username') pwd=request.POST.get('pwd') blogUserSet=BlogUser.objects.filter(username=username,password=pwd) if len(blogUserSet)==1: return redirect(reverse('user:welcome',args=[blogUserSet.first().id])) else: return render(request,'login.html',{'error1':'密码错误'})
在blog\urls.py中导入welcome,在BlogUser.vews.py中配置一下路径
登录成功将用户信息放入session
- 在我们登录成功之后,我们需要把用户信息显示在页面上,并且在跳转到别的页面的时候,这个用户依然是已经登录的状态浏览器可以识别,这就需要session 会话作用域
- installed_apps
2.中间件(帮我们启用session)
3.设置存储形式(储存在设置数据库中)
session只能储存json也就是字典类型的数据
django session的设计原理:
a、如果用户是第一次请求(就看客户端ie是否保存了sessionId的cookie)
创建session model
生成一个key sessionId 随机的一个字符串(uuid使id永远也不会重复)
保存到你session_engine指定位置
保存到cookie中,在客户的浏览器中
b、如果第二次以上的请求,客户端ie都会自动提交cookie到django中,django中利用你配置 的SessionMiddleware中间件激活session利用cookie中的sessionID到session_engine指 定位置读取session model,并设置到request的session属性上
正是用为这样才能在view里面通过request.session使用session能力
session本身就是一个dict字段
session在存数据时数据必须支持序列化json)
我们首先需要把app的session在数据库中创建一个表
-
使用shell命令 migrate sessions
1、再次启动manage.py
2、输入 migrate sessions 命令
这时我们会发现数据中创建了一个session的表用来储存session 的创建时间和到期时间(默认时间为两周)
接着我们修改views.py中的代码让用户登录成攻之后把它保存在session中以便于以后任何函数都可以在session中获取到信息
登录成功后,我们关闭浏览器 ,再次打开浏览器,在地址栏输入http://127.0.0.1:8000/welcome会发现内容不变
未完待续。。。