session的使用

状态保持

 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/")

表单提交


    
        
        

        
        {% load static %}
        
        
        
        
        
    
    

        
        
    


你可能感兴趣的:(session的使用)