博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python后台开发Django(会话控制)
阅读量:4348 次
发布时间:2019-06-07

本文共 3604 字,大约阅读时间需要 12 分钟。

页面跳转

页面跳转的url中必须在最后会自动添加【\】,所以在urls.py的路由表中需要对应添加【\】

from django.shortcuts import redirect #导入return redirect("admin/") #本地页面跳转return redirect("https://www.cnblogs.com/dongxiaodong/") #其他网站跳转

本地跳转需要参考urls.py的路由表

urlpatterns = [    path('admin/', admin.site.urls),    path("dong/",views.homex),#添加URL对应关系]

Cookie

设置cookie

1 # 本地页面跳转 2 from django.shortcuts import redirect  # 导入 3 retx = redirect("dong/") 4 # 返回文件,并匹配值 5 from django.shortcuts import render #导入 6 retx= render(requestx, "loginx.html",{
"dongkk1":"替换值1","dongkk2":"替换值2"}) 7 #返回字符串 8 from django.shortcuts import HttpResponse 9 retx=HttpResponse("东小东【dongxiaodong】")10 #设置cookie11 retx.set_cookie("dname", "dongxiaodong")12 retx.set_cookie("dname2", "dongxiaodongxx",max_age=100)#设置超时时间,单位为秒13 14 return retx

获取cookie

dnamex=requestx.COOKIES.get("dname")

删除

设置cookie的超时时间为过去时间即可

Cookie加密

retx.set_signed_cookie("dong3","dongxiaodong33",salt="任意字符串(密文)") #cookie通过密文加密dnamex3 = requestx.get_signed_cookie("dong3", salt="对应设置cookie时的密文")  # 获取cookie

Session

依赖于cookie的sessionid的随机字符串,默认超时时间为浏览器不退出情况下的两周或者浏览器退出就立即失效

设置

requestx.session["dongss"]="dongxiaodongsss"requestx.session.set_expiry(60*60)#设置超时时间,单位为秒

获取

dnamex = requestx.session["dongss"]dnamex = requestx.session.get("dongss")#无该键时程序不会报错ssid = requestx.session.session_key #得到sessionid,值与cookie保存的相同

删除

del requestx.session["dongss"]requestx.session.clear() #清空所有session

相关配置(setting.py)

1 SESSION_COOKIE_NAME="sessionid"         # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) 2 SESSION_COOKIE_PATH="/"                  # Session的cookie保存的路径(默认) 3 SESSION_COOKIE_DOMAIN = None             # Session的cookie保存的域名(默认) 4 SESSION_COOKIE_SECURE = False            # 是否Https传输cookie(默认) 5 SESSION_COOKIE_HTTPONLY = True           # 是否Session的cookie只支持http传输(默认) 6 SESSION_COOKIE_AGE = 1209600              # Session的cookie失效日期(2周)(默认) 7 SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # 是否关闭浏览器使得Session过期(默认) 8 # 是否每次请求都保存Session,默认修改之后才保存(默认) 9 #如果SESSION_SAVE_EVERY_REQUEST = True时,可以配合requestx.session.set_expiry(60*60),实现无操作一分钟后页面session清除,页面失效10 SESSION_SAVE_EVERY_REQUEST = False

中间件

所有的请求都会先进入中间件处理,执行完所有中间件(MIDDLEWARE = [ ])才会进入urls.py进行路由,然后进入对应的APP的views.py中执行逻辑处理,中间件可以获取到请求的任意数据,可以做一些IP黑名单等处理

CSR保护

Post提交数据时,Django自动会进行CSR验证,在POST提交数据端需要提交一条随机字符串,服务器会匹配其的内容

设置是否需要全局csr保护

 

全局设置:

需要在setting.py设置MIDDLEWARE = [ ],

如果注释【'django.middleware.csrf.CsrfViewMiddleware',】则表示不用验证,反之

 

部分设置(优先级高):

在APP对应views.py下添加函数装饰器即可实现

from django.views.decorators.csrf import csrf_exempt,csrf_protect@csrf_protect  #强制添加保护def xx1(requestx):   pass@csrf_exempt   #强制取消保护def xx2(requestx):   pass

Form表单里的post请求:

{% csrf_token %}

Ajax里的post请求,需要获取cookie的csrf值,并以请求头的方式发送到服务器

headers:{
"X-CSRFtoken":$.cookie("csrftoken")},

添加中间件

在工程下建立任意名字的文件夹,然后在文件夹中建立任意名字的python文件,如在工程同名目录下建立ruledong.py文件:

1 from django.utils.deprecation import MiddlewareMixin 2 #自定义中间件1 3 class Dong1(MiddlewareMixin): 4     def process_request(self,requestx): 5         print("dong1111111") 6         print("你的设备基本信息:", requestx.environ.get("HTTP_USER_AGENT", "w")) 7         print("你的IP地址:", requestx.environ.get("REMOTE_ADDR", "w")) 8 #自定义中间件2 9 class Dong2(MiddlewareMixin):10     def process_request(self,requestx):11         print("dong22222222")12         if requestx.GET.get("idx") != "4":13             # 返回字符串,以此为终点,中断所有14             from django.shortcuts import HttpResponse15             return HttpResponse("东小东【请求失败】")

在setting的MIDDLEWARE = [ ]的最后添加,添加规则为前面的先被执行

'dongjg.ruledong.Dong1','dongjg.ruledong.Dong2',

转载于:https://www.cnblogs.com/dongxiaodong/p/10496876.html

你可能感兴趣的文章
hihocoder-1740-替换函数
查看>>
Codeforce Round #219 Div2
查看>>
option value的值可以有空格 再试试吧
查看>>
.htaccess to httpd.conf
查看>>
node.js 基础学习笔记2
查看>>
hadoop中常见元素的解释
查看>>
BZOJ-1497 最大获利
查看>>
4-4 修改文件
查看>>
并发编程(十):AQS
查看>>
条件注释判断浏览器版本<!--[if lt IE 9]>
查看>>
Comparison among several SGD derivation
查看>>
ModelAndView同时向页面传递多个参数
查看>>
samba 配置参数详解
查看>>
python基础09_文件操作
查看>>
mvn install selenium依赖包
查看>>
关于SQL的相关笔记【长期更新,只发一帖】
查看>>
linux awk命令详解
查看>>
android:id="@+id/button1" 与 android:id="@id/button1" 区别 @string
查看>>
手把手玩转win8开发系列课程(11)
查看>>
Linux Namespace : User
查看>>