Django学习手册

cookie

"""
cookie属性:
obj.set_cookie(key,value,....)
obj.set_signed_cookie(key,value,salt="加密盐",....)
    参数:
        key                 键
        value=“”           值
        max_age=None        超时时间
        expires=None        超时日期
        path="/"            cookit生效的路径,/表示根路径,特殊的,跟路径的cookie可以被任何url被任何url的页面访问
        domain=None         cookie生效的域名
        secure=False        https传输
        httponly=False      只能http协议传输,无法javascript获取(不是绝对,底层抓包可以获取到)
        
获取cookie
request.COOKIES
request.COOKIES['username']
request.COOKIES.get("username")

设置cookie
response = render(request,'index.html')
response = redirect("/index/")
response = set_cookie("key","value")
return response

加盐配置:
obj = HttpResponse("S")
获取加盐cookie
obj.set_signed_cookie("username","passwd",salt="jiayan")
设置加盐cookie
obj.get_signed_cookie("username",salt="jiayan")
获取与设置的加盐 一定要是相同的加盐字符

"""

前端:(login 页面)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <form action="/login/" method="post">
        <p>
           <span>用户名:</span> <input type="text" name="user">
            <span>密码:</span><input type="password" name="pwd">
            <input type="submit" value="提交">
        </p>
        </form>
    </div>
</body>
</html>

前端:(index页面)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>
        欢迎登录.........

    </h1>
</body>
</html>

URL:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    url('^login/', views.login),
    url('^index/', views.index),
]

后端:

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.

def login(request):
    print(request.COOKIES)
    print(request.session)
    if request.method == "POST":
        u = request.POST.get("user",None)
        p= request.POST.get("pwd",None)
        if u == "root" and p == "123":
            # cookie的方式:
            # ret = redirect("/index/")
            # #设置cookie数值
            # ret.set_cookie("name","123",10)
            # return ret

            #session方式
            request.session["info_login"]=True
            request.session["user"] = u
            return redirect("/index/")

        else:
            redirect("/login/")
    return render(request,"login.html")

def index(request):
    #cookie
    # if request.COOKIES.get("name",None):
    #     print("index")
    #     return render(request,"index.html")

    #session
    if request.session.get("info_login",None):
        name = request.session.get("user")
        return render(request,"index.html")
    #session 默认存放在数据库中。

    else:
        return redirect("/login/")

 --------------------------------------------------------------------------------------------------------------------------------------------------------

装饰器的方式:

from django.shortcuts import render,redirect,HttpResponse

# Create your views here.

def aut(fum):
    def log(request,*args,**kwargs):
        if request.COOKIES.get("user",None):
            return fum(request,*args,**kwargs)
        else:
            return redirect("/login/")
    return log


def login(request):
    if request.method == "POST":
        u = request.POST.get("user", None)
        p = request.POST.get("pwd", None)
        if u == "root" and p == "123":
            ret = redirect("/index/")
            # ret.set_cookie("user", u)
            ret.set_signed_cookie("user",u,salt="abcd")

            return ret
        else:
            return redirect("/login/")
    return render(request,"login.html")

@aut
def index(request):
    return HttpResponse("OK")

核心 session 
1.session 依赖cookie
2.Session流程
3.Session操作
4.Session配置
5.Session存储

注意!!!
django 默认数据存储在数据表格中的,所以在配置好之前一定要创建数据表格!!!
python manage.py makemigrations
python manage.py migrate
#生成随机字符串 #写到用户浏览器cookie #保存到session中 #在随机字符串对应的字典中设置相关内容 Request.session[‘user’] = user Request.session[‘is_login’] = True Return redirect(“/index/”) #Session 获取数据 Request.session[‘k1’] Request.session.get(“k1”,None) #设置数据 Request.session[‘k1’] = 123 Request.session.setdefault(“k1”,123) #存在则不设置 #删除数据 Del request.session[‘k1’] Request.session.clear() Request.session.delete(‘session_key’ ) #所有键值,键值对 Request.session.keys() Request.session.values() Request.session.items() Request.session.iterkeys() Request.session.itervalues() Request.session.iteritems() #用户session的随机字符串 Request.session.session_key #将所有session失效时间小于当前日期的数据删除 Request.session.clear_expired() #检查用户session的随机字符串在数据中是否 Request.session.exists(“session_key”) #删除当前用户的所有session数据 Request.session.delete(“session_key”) Request.session.set_expiry(value) *如果value是个整数,session会在些秒数后失效。 *如果是value是个datatime或timedelta,session就会在这个时间后失效 *如果value是0,用户关闭浏览器session就会失效。 *如果value是None,session会依赖全局session失效策略 #在setting里面设置 SESSION_COOKIE_NAME = “sessionid” #session 的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) SESSION_COOKIE_PATH = ‘/#session 的cookie 保存的路径(默认) SESSION_COOKIE_DOMAIN=None #session 的cookie 保存的域名(默认) SESSION_COOKIE_SECURE=False #是否HTTP传输cookie SESSION_COOKIE_HTTPONLY=True #是否session的cookie只支持http传输 SESSION_COOKIE_AGE = 1209600 #失效日期2周默认 SESSION_COOKIE_AT_BROWSER_CLOSE=False #是否关闭浏览器使得session过期 SESSION_SAVE_EVERY_REQUEST=False #是否每次请求都保存session,默认修改之后才保存

session数据可以在request中提取到,所以后端不必传值。

#用session 传递数据至前端(session数据封装在request里)
#前端:
<span>
<h3>{{request.session.user}}</h3>
</span>

#后端
def index(request):
if request.session.get(“is_log,None)
  return render(request,”index.html”)
else:
  return redirect(“/login/”)

Django 中默认支持session,其内部提供了5中类型的session公开发者使用:

  • 数据库(默认)
  • 缓存
  • 文件
  • 缓存+数据库
  • 加密+cookie
原文地址:https://www.cnblogs.com/Anec/p/9586015.html