Python后台开发Django会话控制的实现


Posted in Python onApril 15, 2019

页面跳转

页面跳转的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',

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
解决Python传递中文参数的问题
Aug 04 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
Python+django实现文件上传
Jan 17 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
代码分析Python地图坐标转换
Feb 08 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
python命令行参数用法实例分析
Jun 25 Python
python线程的几种创建方式详解
Aug 29 Python
python tkinter图形界面代码统计工具(更新)
Sep 18 Python
构建高效的python requests长连接池详解
May 02 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 #Python
提升Python程序性能的7个习惯
Apr 14 #Python
Python根据当前日期取去年同星期日期
Apr 14 #Python
Python实现的微信支付方式总结【三种方式】
Apr 13 #Python
Python实现合并excel表格的方法分析
Apr 13 #Python
Python Image模块基本图像处理操作小结
Apr 13 #Python
python使用pymongo操作mongo的完整步骤
Apr 13 #Python
You might like
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
PHP实现百度人脸识别
2019/05/06 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
深入理解js A*寻路算法原理与具体实现过程
2018/12/13 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
用python实现面向对像的ASP程序实例
2014/11/10 Python
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
梅尔频率倒谱系数(mfcc)及Python实现
2019/06/18 Python
python 搜索大文件的实例代码
2019/07/08 Python
Python 的AES加密与解密实现
2019/07/09 Python
实现Python与STM32通信方式
2019/12/18 Python
用Python进行websocket接口测试
2020/10/16 Python
Python排序函数的使用方法详解
2020/12/11 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
高三自我鉴定范文
2013/10/19 职场文书
煤矿班组长的职责
2013/12/25 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
2016教师学习教育法心得体会
2016/01/19 职场文书