9.Django组件-cookie和session

HTTP协议、无保存状态

1、cookie简介

cookie具体一个浏览器,针对一个服务器存储key-value({})

 浏览器发送请求的时候带着cookie,会存在http请求头里

 models

from django.db import models

# Create your models here.
class UserInfo(models.Model):

    user = models.CharField(max_length=32)
    pwd = models.CharField(max_length=32)

views

from django.shortcuts import render, HttpResponse,redirect

# Create your views here.

from app01.models import UserInfo
def login(request):
    if request.method == "POST":
        user=request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(user=user,pwd=pwd).first()
        if user:
            #登录成功
            '''
            相应体:
            return HttpResponse
            return render
            return redirest
            '''
            response = HttpResponse("登录成功")    #设置cookie
            response.set_cookie("username",user.user)
            return response
    return render(request,"login.html")

def index(request):
    print(request.COOKIES)  #{'__guid': '96992031.3530530351233503700.1511858780574.1208', 'csrftoken': 'mw0zfwWPTBh7c9cRTRNep8aKvEPBa2azgwEC9xchBFfb3bGaayK1ICVXR2DgrpSl'}
    is_login = request.COOKIES.get("is_login")  #取的时候 COOKIES其实是一个字典,封装了所有的cookie键值;HttpResponse、render、redirest都可以调用;它们三个最终都是HttpResponse的实例对象
    if is_login:
        username = request.COOKIES.get("username")
        return render(request,"index.html",{"username":username})
    else:
        return redirect("/login/")

login

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    {% csrf_token %}
    用户名<input type="text" name="user">
    密码<input type="text" name="pwd">
    <input type="submit" value="submit">
</form>
</body>
</html>

index

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>Hi,{{ username }}</h3>
</body>
</html>

一次登录成功了设置好了cookie,以后什么时候都带着cookie;当你换一个浏览器访问的时候又是新的了;浏览器和服务器请求要是一对一的;

HttpResponseBase是HttpResponse的父类,它们三个都是HttpResponse,所有都有set_cookie的方法

 超长时间参数

views

def login(request):
    if request.method == "POST":
        user=request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(user=user,pwd=pwd).first()
        if user:
            #登录成功
            '''
            相应体:
            return HttpResponse
            return render
            return redirest
            '''
            response = HttpResponse("登录成功")    #设置cookie
            #response.set_cookie("is_login",True,max_age=15) #设置超时时间为max_age=15,过了15s就获取不了cookie了
            response.set_cookie("is_login",True)
            import datetime
            date = datetime.datetime(year=2018,month=6,day=3,hour=16,minute=28,second=9) #固定在哪一时刻失效

            response.set_cookie("username",user.user,expires=date)
            return response
    return render(request,"login.html")

有效路径

views

from django.shortcuts import render, HttpResponse,redirect

# Create your views here.

from app01.models import UserInfo
def login(request):
    if request.method == "POST":
        user=request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(user=user,pwd=pwd).first()
        if user:
            #登录成功
            '''
            相应体:
            return HttpResponse
            return render
            return redirest
            '''
            response = HttpResponse("登录成功")    #设置cookie
            #response.set_cookie("is_login",True,max_age=15) #设置超时时间为max_age=15,过了15s就获取不了cookie了
            response.set_cookie("is_login",True)
            import datetime
            #date = datetime.datetime(year=2018,month=6,day=3,hour=16,minute=28,second=9) #固定在哪一时刻失效

            #response.set_cookie("username",user.user,expires=date)
            response.set_cookie("username",user.user,path="/index/")  #只是指定的路径,哪些视图函数能取到
            return response
    return render(request,"login.html")

def index(request):
    print(request.COOKIES)  #{'__guid': '96992031.3530530351233503700.1511858780574.1208', 'csrftoken': 'mw0zfwWPTBh7c9cRTRNep8aKvEPBa2azgwEC9xchBFfb3bGaayK1ICVXR2DgrpSl'}
    is_login = request.COOKIES.get("is_login")  #取的时候
    if is_login:
        username = request.COOKIES.get("username")
        return render(request,"index.html",{"username":username})
    else:
        return redirect("/login/")

def test(request):
    print("test",request.COOKIES)

    return HttpResponse("test")

保存上次访问时间

views

from django.shortcuts import render, HttpResponse,redirect

# Create your views here.

from app01.models import UserInfo
def login(request):
    if request.method == "POST":
        user=request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(user=user,pwd=pwd).first()
        if user:
            #登录成功
            '''
            相应体:
            return HttpResponse
            return render
            return redirest
            '''
            response = HttpResponse("登录成功")    #设置cookie
            #response.set_cookie("is_login",True,max_age=15) #设置超时时间为max_age=15,过了15s就获取不了cookie了
            response.set_cookie("is_login",True)
            import datetime
            #date = datetime.datetime(year=2018,month=6,day=3,hour=16,minute=28,second=9) #固定在哪一时刻失效

            #response.set_cookie("username",user.user,expires=date)
            response.set_cookie("username",user.user,path="/index/")  #只是指定的路径,哪些视图函数能取到
            return response
    return render(request,"login.html")

def index(request):
    print("index:",request.COOKIES)  #{'__guid': '96992031.3530530351233503700.1511858780574.1208', 'csrftoken': 'mw0zfwWPTBh7c9cRTRNep8aKvEPBa2azgwEC9xchBFfb3bGaayK1ICVXR2DgrpSl'}
    is_login = request.COOKIES.get("is_login")  #取的时候
    if is_login:
        username = request.COOKIES.get("username")
        import datetime
        now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        last_time = request.COOKIES.get("last_visit_time","")
        response = render(request,"index.html",{"username":username,"last_time":last_time})
        response.set_cookie("last_visit_time",now)
        return response
    else:
        return redirect("/login/")

def test(request):
    print("test",request.COOKIES)

    return HttpResponse("test")

2、session

保存登录状态信息

views.py

def login_session(request):
    if request.method == "POST":
        user=request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(user=user,pwd=pwd).first()

        if user: #登录成功了
            request.session['is_login']=True
            request.session['username']=user.user

            '''
            1.生成随机字符串 km6d8dwp98z70n62vls0jylngi1ztnlj
            2.response.set_cookie("session",km6d8dwp98z70n62vls0jylngi1ztnlj)
            3.在django-session表中创建一条记录:
                session-key                                 session-data
                km6d8dwp98z70n62vls0jylngi1ztnlj       {"is_login":True,"username":"kris"}
            '''
            return HttpResponse("登录成功")
    return render(request, "login.html")

def index_session(request):

    print("is_login:",request.session.get("is_login"))

    '''
    1.request.COOKIE.get("session") #km6d8dwp98z70n62vls0jylngi1ztnlj
    2.django_cookie表中过滤记录:
        在django-session表中创建一条记录:
        session-key                             session-data
        km6d8dwp98z70n62vls0jylngi1ztnlj       {"is_login":True,"username":"kris"}
    obj=django-session.objects filter(session-key=km6d8dwp98z70n62vls0jylngi1ztnlj).first()
    3.obj.session-data.get("is_login")
    '''
    is_login=request.session.get("is_login")
    if not is_login:
        return redirect("/login_session/")

    username = request.session.get("username")
    return render(request,"index.html",{"username":username})

注销功能与参数配置

views.py

def login_session(request):
    if request.method == "POST":
        user=request.POST.get("user")
        pwd = request.POST.get("pwd")
        user = UserInfo.objects.filter(user=user,pwd=pwd).first()

        if user: #登录成功了
            import datetime
            now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            request.session['is_login']=True
            request.session['username']=user.user
            request.session["last_visit_time"]=now
            '''
            if request.COOKIE.get("sessionid"):
                更新
                response.set_cookie("session",km6d8dwp98z70n62vls0jylngi1ztnlj)
                在django-session表中创建一条记录:
                session-key                                 session-data
                km6d8dwp98z70n62vls0jylngi1ztnlj           更新的数据
            else:
                1.生成随机字符串 km6d8dwp98z70n62vls0jylngi1ztnlj
                2.response.set_cookie("session",km6d8dwp98z70n62vls0jylngi1ztnlj)
                3.在django-session表中创建一条记录:
                    session-key                                 session-data
                    km6d8dwp98z70n62vls0jylngi1ztnlj       {"is_login":True,"username":"kris"}
            '''
            return HttpResponse("登录成功")
    return render(request, "login.html")

def index_session(request):

    print("is_login:",request.session.get("is_login"))

    '''
    1.request.COOKIE.get("session") #km6d8dwp98z70n62vls0jylngi1ztnlj
    2.django_cookie表中过滤记录:
        在django-session表中创建一条记录:
        session-key                             session-data
        km6d8dwp98z70n62vls0jylngi1ztnlj       {"is_login":True,"username":"kris"}
    obj=django-session.objects filter(session-key=km6d8dwp98z70n62vls0jylngi1ztnlj).first()
    3.obj.session-data.get("is_login")
    '''
    is_login=request.session.get("is_login")
    if not is_login:
        return redirect("/login_session/")

    username = request.session.get("username")
    last_visit_time = request.session.get("last_visit_time")
    return render(request,"index.html",{"username":username,"last_visit_time":last_visit_time})

def logout(request):
    #del request.session["is_login"]

    request.session.flush()

    '''
    1.randon_str=request.COOKIE.get("sessioned")
    2.django-session.objects.filter(session-key=randon_str).delete()
    3.response.delete_cookie("sessionid",randon_str)
    '''

    return redirect("/login/")

settings.py

#SESSION_COOKIE_NAME='kris'
SESSION_COOKIE_NAME ="sessionid"       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/"               # Session的cookie保存的路径(默认)
SESSION_COOKIE_AGE = 10             # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False    # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False        # 是否每次请求都保存Session,默认修改之后才保存(默认);如果改成True时,你一直刷新页面,10s之后也不会失效,但一停止点击刷新过10s就会失效。

总结

1 response.set_cookie(key,value)
2 request.COOKIE.get(key)
3 request.session[key]=value

            if request.COOKIE.get("sessionid"):
                更新
                response.set_cookie("session",km6d8dwp98z70n62vls0jylngi1ztnlj)
                在django-session表中创建一条记录:
                session-key                                 session-data
                km6d8dwp98z70n62vls0jylngi1ztnlj           更新的数据
            else:
                1.生成随机字符串 km6d8dwp98z70n62vls0jylngi1ztnlj
                2.response.set_cookie("session",km6d8dwp98z70n62vls0jylngi1ztnlj)
                3.在django-session表中创建一条记录:
                    session-key                                 session-data
                    km6d8dwp98z70n62vls0jylngi1ztnlj       {"is_login":True,"username":"kris"}
4 request.session[key]           
    1.request.COOKIE.get("session") #km6d8dwp98z70n62vls0jylngi1ztnlj
    2.django_cookie表中过滤记录:
        在django-session表中创建一条记录:
        session-key                             session-data
        km6d8dwp98z70n62vls0jylngi1ztnlj       {"is_login":True,"username":"kris"}
    obj=django-session.objects filter(session-key=km6d8dwp98z70n62vls0jylngi1ztnlj).first()
    3.obj.session-data.get("is_login")

5 request.session.flush()

    1.randon_str=request.COOKIE.get("sessioned")
    2.django-session.objects.filter(session-key=randon_str).delete()
    3.response.delete_cookie("sessionid",randon_str)
        

猜你喜欢

转载自www.cnblogs.com/shengyang17/p/9128553.html