状态保持
http 协议是无状态的:每次请求都是一次新的请求 ,不会记得之前通信的状态 客户端与服务器端的一次通信,就是一次会话
实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
存储方式包括 cookie、session ,会话一般指 session 对象
使用 cookie ,所有数据存储在客户端,注意不要存储敏感信息
推荐使用 sesison 方式,所有数据存储在服务器端,在客户端 cookie 中存储 session_id
状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
注意:不同的请求者之间不会共享这个数据,与请求者一一对应
view.py的设置
from django.shortcuts import render
from piankeapp.models import User
# Create your views here.
from django.shortcuts import render,redirect
from django.urls import reverse
# from pianke.models import User
from django.http import HttpResponse
# 负责主页跳转
def index(request):
# return HttpResponse("index")
username = request.session.get("username") # 从session中取数据并且返回给前台
return render(request, "pianke/index.html", {"username": username})
# 负责登陆页面跳转
def login(request):
return render(request, "pianke/login.html")
# 负责注册页面跳转
def register(request):
return render(request, "pianke/register.html")
# 实现注册表单的处理
def register_handle(request):
username = request.POST["username"]
password = request.POST["password"]
phone = request.POST["phone"]
gender = request.POST["gender"]
user = User()
user.username = username
user.password = password
user.phone = phone
user.gender = gender
user.save()
request.session["username"] = username
# context = {"username": username}
# return redirect("/pianke/") # render不会把session中的数据传回前台的但是redirect会
# return redirect(reverse("pianke:")) # 因为render不会改变路径所以不能够触发index函数进行session里面数据的获取
return render(request,"pianke/index.html")# 而redirect可以进行url的更新所以可以取到数据
# 实现登陆表单数据的处理
def login_handle(request):
username = request.POST["username"]
password = request.POST["password"]
try:
u = User.objects.get(username = username) # 第一个username时model中 的 第二个时上面获取到的 这句话是查询username=上面username的对象
if u.password == password: # 匹配上面的password是否与这个对象的password相等
request.session["username"]=username # 如果相等的话就存到数据库里
except Exception as e: # 因为可能username 不在数据库里查询不到所以可能会抛出异常
print(e)
finally:
# return render(request, "pianke/index.html")
return redirect("/pianke/")
表单提交
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
{% load static %}
<script type="text/javascript" src="{% static 'pianke/bootstrap-3.3.7-dist/js/bootstrap.js' %}" ></script>
<link rel="stylesheet" href="{% static 'pianke/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css' %}" />
<link rel="stylesheet" href="{% static 'pianke/bootstrap-3.3.7-dist/css/bootstrap.min.css' %}" />
<link type="text/css" href="{% static 'pianke/bootstrap-3.3.7-dist/css/bootstrap.css' %}"/>
<style type="text/css">
*{
padding: 0px;
margin: 0px;
}
.col-sm-10.aa{
width: 300px;
}
.form-horizontal.bb{
margin: auto;
width: 500px;
height: 650px;
/*background-color: darkcyan;*/
/*background-image: url(img/login-bg.png);*/
/*background-repeat:no-repeat ;*/
}
.login{
width: 500px;
height: 650px;
/*background-color: darkcyan;*/
margin: auto;
/*.zjhn-nav li.active a{ background-image:url(../image/Click_03_temp.png); */
background-repeat:no-repeat;
background-size:100% 100%;
background-image: url({% static 'pianke/img/login-bg.png' %});
}
.login_content{
padding-top: 250px;
padding-left: 80px;
}
.form-group.world{
margin-top: 100px;
margin-left: 100px;
color: gray;
}
</style>
</head>
<body>
<div class="login">
<div class="login_content">
<form class="form-horizontal bb" method="post" action="{% url 'pianke:login_handle'%}">
<br />{% csrf_token %}<br />
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Username</label>
<div class="col-sm-10 aa">
<input type="text" class="form-control" name="username" id="inputEmail3" placeholder="Username">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-10 aa">
<input type="password" class="form-control" name="password" id="inputPassword3" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Sign in</button>
</div>
<div class="form-group world">
世界很美, 而你正好有空
</div>
</div>
</form>
</div>
</div>
<!--<img src="img/login-bg.png"/> -->
</body>
</html>
网友评论