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
- python中test函数用法(Python TestCase中的断言方法介绍)
- python直接查询mongodb(pymongo中聚合查询的使用方法)
- python 数据库实现学生管理系统(python+mysql实现教务管理系统)
- python 多进程读取文件(Python实现的多进程拷贝文件并显示百分比功能示例)
- python3.7不兼容pywinauto(浅谈python编译pyc工程--导包问题解决)
- python响应处理post请求(Python3模拟curl发送post请求操作示例)
- python读取文件的正确方法(强悍的Python读取大文件的解决方案)
- python爬虫并保存excel实例(Python实现爬取亚马逊数据并打印出Excel文件操作示例)
- python批量自动化访问网站(python 自动批量打开网页的示例)
- python代码计算一个月多少天(Python计算时间间隔精确到微妙的代码实例)
- python获取日期(Python根据当前日期取去年同星期日期)
- python中怎么连接mysql(python远程连接MySQL数据库)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- python做出来的游戏按什么键运行(python pygame实现方向键控制小球)
- python 字典按key值排序(Python 按字典dict的键排序,并取出相应的键值放于list中的实例)
- python数据类型基本知识入门(Python Pexpect库的简单使用方法)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
热门推荐
- asp.net中Session的操作
- 如何修改serv-u主页信息(Serv-U安装使用图文教程)
- divcss页面布局步骤(横向两列布局左列固定,右列自适应的4种CSS实现方式)
- python爬取在线评论(Python爬虫实现爬取百度百科词条功能实例)
- 云ip内网虚拟机使用(新网云主机如何使用密钥进行登陆)
- python scrapy 框架原理(一步步教你用python的scrapy编写一个爬虫)
- mysql根据子节点查询父节点(mysql 递归查找菜单节点的所有子节点的方法)
- 面试时如何谈自己的优点
- python中的类和对象的定义和使用(Python类的继承、多态及获取对象信息操作详解)
- laravel权限控制(laravel-admin 在列表页添加自定义按钮的例子)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9