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绘制数据的瀑布图的教程
Apr 07 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
python使用json序列化datetime类型实例解析
Feb 11 Python
使用Flask集成bootstrap的方法
Jul 24 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Python lxml模块的基本使用方法分析
Dec 21 Python
Django之form组件自动校验数据实现
Jan 14 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
浅谈python出错时traceback的解读
Jul 15 Python
pytorch中index_select()的用法详解
Jan 06 Python
python Polars库的使用简介
Apr 21 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
10个php函数实用却不常见
2015/10/13 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
2013/08/13 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
pytorch下使用LSTM神经网络写诗实例
2020/01/14 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
档案管理员岗位职责
2013/12/01 职场文书
仓库理货员岗位职责
2013/12/18 职场文书
清扬洗发水广告词
2014/03/14 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
环保证明
2015/06/23 职场文书
军训结束新闻稿
2015/07/17 职场文书