pythondjango工作机制(Python后台开发Django会话控制的实现)
pythondjango工作机制
Python后台开发Django会话控制的实现页面跳转
页面跳转的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
|
# 本地页面跳转 from django.shortcuts import redirect # 导入 retx = redirect( "dong/" ) # 返回文件,并匹配值 from django.shortcuts import render #导入 retx = render(requestx, "loginx.html" ,{ "dongkk1" : "替换值1" , "dongkk2" : "替换值2" }) #返回字符串 from django.shortcuts import httpresponse retx = httpresponse( "东小东【dongxiaodong】" ) #设置cookie retx.set_cookie( "dname" , "dongxiaodong" ) retx.set_cookie( "dname2" , "dongxiaodongxx" ,max_age = 100 ) #设置超时时间,单位为秒 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)
|
session_cookie_name = "sessionid" # session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) session_cookie_path = "/" # session的cookie保存的路径(默认) session_cookie_domain = none # session的cookie保存的域名(默认) session_cookie_secure = false # 是否https传输cookie(默认) session_cookie_httponly = true # 是否session的cookie只支持http传输(默认) session_cookie_age = 1209600 # session的cookie失效日期(2周)(默认) session_expire_at_browser_close = false # 是否关闭浏览器使得session过期(默认) # 是否每次请求都保存session,默认修改之后才保存(默认) #如果session_save_every_request = true时,可以配合requestx.session.set_expiry(60*60),实现无操作一分钟后页面session清除,页面失效 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请求:
|
<form action = " " method=" post"> { % csrf_token % } < input type = "text" name = "xx" > < input type = "submit" value = "提交了" > < / form> |
ajax里的post请求,需要获取cookie的csrf值,并以请求头的方式发送到服务器
|
headers:{ "x-csrftoken" :$.cookie( "csrftoken" )}, |
添加中间件
在工程下建立任意名字的文件夹,然后在文件夹中建立任意名字的python文件,如在工程同名目录下建立ruledong.py文件:
|
from django.utils.deprecation import middlewaremixin #自定义中间件1 class dong1(middlewaremixin): def process_request( self ,requestx): print ( "dong1111111" ) print ( "你的设备基本信息:" , requestx.environ.get( "http_user_agent" , "w" )) print ( "你的ip地址:" , requestx.environ.get( "remote_addr" , "w" )) #自定义中间件2 class dong2(middlewaremixin): def process_request( self ,requestx): print ( "dong22222222" ) if requestx.get.get( "idx" ) ! = "4" : # 返回字符串,以此为终点,中断所有 from django.shortcuts import httpresponse return httpresponse( "东小东【请求失败】" ) |
在setting的middleware = [ ]的最后添加,添加规则为前面的先被执行
|
'dongjg.ruledong.dong1' , 'dongjg.ruledong.dong2' , |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:http://www.cnblogs.com/dongxiaodong/p/10496876.html
- pythonselenium隐藏浏览器窗口(Python Selenium 之关闭窗口close与quit的方法)
- python中迭代器的作用(Python3.5迭代器与生成器用法实例分析)
- python中的isi(深入浅析Python 中 is 语法带来的误解)
- 如何查看python beautifulsoup(Python爬虫beautifulsoup4常用的解析方法总结)
- python怎么转换jar包(利用python脚本如何简化jar操作命令)
- python 二维数组怎么取第二列(python实现二维数组的对角线遍历)
- python装饰器语法与应用(python装饰器简介---这一篇也许就够了推荐)
- python实例之pyqt5多窗口实现(python+pyqt5编写md5生成器)
- 基于pythonopencv的图片识别(Python Opencv实现图像轮廓识别功能)
- python学生信息管理系统教程(学生信息管理系统Python面向对象版)
- nginxpython编写模块(Python开发之Nginx+uWSGI+virtualenv多项目部署教程)
- python 常用爬虫库(Python常用爬虫代码总结方便查询)
- pythonwhile语句的原理(谈谈Python中的while循环语句)
- python的os模块操作(Python OS模块实例详解)
- python3标准库资源(Python3标准库总结)
- python数据表教程(详解Python sys.argv使用方法)
- 提醒 2019年起河南驾考要开设科目五 官方回应来了(2019年起河南驾考要开设科目五)
- 省 市书法家协会 送万福进万家 活动走进禹州美丽乡村(省市书法家协会)
- 点赞 禹州苌庄正式撤乡建镇 未来发展不可估量(禹州苌庄正式撤乡建镇)
- 它荣获 中国生态魅力镇 称号 就在咱们禹州,一起来看看(中国生态魅力镇)
- 真牛 禹州将建成中等城市(禹州将建成中等城市)
- 被骂欺师灭祖,与郭德纲公开叫板,何云伟改名何沄伟,开始画画了(与郭德纲公开叫板)
热门推荐
- python用于机器人(python实现nao机器人身体躯干和腿部动作操作)
- mysql架构示意图(MySQL创建横向直方图的解决方案)
- mysql数据库简单操作(一篇文章教会你进行MySQL数据库和数据表的基本操作)
- docker打包镜像命令(docker 打包本地镜像,并到其他机器进行恢复操作)
- php如何发邮件(PHP示例演示发送邮件给某个邮箱)
- nginx跳转规则配置上下文(基于nginx实现上游服务器动态自动上下线无需reload的实现方法)
- Global.asax文件的介绍
- python自学编程笔记(Python 编程速成推荐)
- ftp软件filezilla安装不了(filezilla连不上FTP服务器的解决方法)
- mysql自增主键创建过程(深入谈谈MySQL中的自增主键)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9