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类方法与对象方法
Mar 15 Python
Python3 加密(hashlib和hmac)模块的实现
Nov 23 Python
python模拟表单提交登录图书馆
Apr 27 Python
python验证码识别教程之滑动验证码
Jun 04 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
python中的colorlog库使用详解
Jul 05 Python
python实现文件的分割与合并
Aug 29 Python
python应用文件读取与登录注册功能
Sep 23 Python
python hashlib加密实现代码
Oct 17 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
Python是怎样处理json模块的
Jul 16 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
实现“上一页”和“下一页按钮
2006/10/09 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
不错的JS中变量相关的细节分析
2007/08/13 Javascript
js GridView 实现自动计算操作代码
2009/03/25 Javascript
web页面数据展示新想法(json)
2010/06/08 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
[05:26]2014DOTA2西雅图国际邀请赛 iG战队巡礼
2014/07/07 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
Django实现分页显示效果
2019/10/31 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
python实现马丁策略的实例详解
2021/01/15 Python
德国网上宠物店:Zoobio
2018/05/23 全球购物
给儿子的表扬信
2014/01/15 职场文书
春节活动策划方案
2014/01/24 职场文书
高二生物教学反思
2014/01/27 职场文书
2014教师研修学习体会
2014/07/08 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
Python何绘制带有背景色块的折线图
2022/04/23 Python