首页 > 其他分享 >cookie与session django中间件 插拔式设计

cookie与session django中间件 插拔式设计

时间:2022-12-26 22:44:46浏览次数:34  
标签:插拔 return get 中间件 request django session 字符串

今日内容总结

django中间件三个了解的方法(较冷门)

# 1.process_view
	路由匹配成功之后执行视图函数/类之前自动触发(顺序同proess_request)

# 2.process_exception
	视图函数/类执行报错自动触发(顺序同process_reponse)
    
# 3.process_template_response
	视图函数/类返回的HttpResponse对象含有render并且对应一个方法的时候自动触发(顺序同process_response)

基于django中间件的功能设计

将各个功能制作成配置文件的字符串形式
	如果想要用拥有该功能就编写对应的字符串
	如果不想有该功能则注释掉对应的字符串
  
#补充知识:怎么利用字符串来导入模块
import importlib
s1 = 'aaa.bbb.ccc.ddd'
'''该字符串代表的是路径'''
res = importlib.import_module(s1)
'''同于 from aaa.bbb.ccc import ddd'''

#底层原理
'''
底层原理:
	1.对字符串做一个右切割处理操作切割成导入模块的句式
	2.利用反射操作字符串 看是否有与字符串所对应的文件
	3.底层还是利用模块形式导入
'''

#注意事项
	注意字符串的结尾最小的单位只能是py文件 不能是py文件李米娜的变量名
	

cookie与session简介

'''
http协议四大特性
	1.基于请求响应
	2.基于TCP、IP作用于应用层之上的协议
	3.无状态
		不保存客户端的状态
	4.无连接
'''

#cookie
	保存再客户端于用户数据
#session
	保存再服务端于用户状态相关的信息

ps:session的工作必须依赖于cookie

django操作cookie

from django.shortcuts import render,HttpResponse,redirect

# 正常我们是直接返回HttpResponse对象
return render()
return HttpResponse()
return redirect()

# 但是要想操作cookie就不能直接返回HttpResponse对象
obj1 = render()
return obj1
obj2 = WHttpResponse()
return obj2
obj3 = redirect()
return obj3

代码实操

'''编写一个真正的用户登入功能'''
def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'xiaochen' and password == '123':
            obj = redirect('/home/')
            obj.set_cookie('name',username)
            return obj
        return render(request,'login.html')
  
def login_auth(func_name):
    def inner(request,*args,**kwargs):
        if request.COOKIES.get('name'):
            res = func_name(request,*args,**kwargs)
            return res
        return redirect('/login/')
    
    return inner

@login_auth
def home_func(request):
    return HttpResponse('home页面限制只有登入的用户才访问')

进阶操作

'''用户登入之前想访问某个网站登入之后就可以返回之前的页面'''
def login_func(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'xiaochen' and password == '123':
            # 登入成功之后获取到用户想要访问的网站
            target_path = request.GET.get('next')
            if target_path:
                # 判断用户是想先访问其他网站还是直接登入
                obj = redirect(target_path)
            else:
                obj = redirect('/home/')
            obj.set_cookie('name',username)
            return obj
	return render(request,'loginPage.html')

def login_auth(func_name):
    def inner(request,*args,**kwargs):
        print(request.path)
        # 只获取用户输入的路由信息
        print(request.path_info)
        # 只获取用户输入的路由信息
        target_path = request.path_info
        print(request.get_full_path())
        # 获取用户输入的路由信息+问号后面携带的数据
        if request.COOKIES.get('name'):
            res = func_name(request,*args,**kwargs)
            return res
        return redirect('/login/?next=%s' % target_path)
    return inner

django操作session

由于session是保存在服务端上面的数据 就应该有个地方能够存储
我们只需要执行数据库的迁移命令即可 django会自动创建很多需要的表

# django默认的session失效时间是14天

# 设置session
	request.session['key'] = value
		1.生成一个随机字符串
  		2.对value数据做加密处理 并在django_session表中存储
        	随机字符串>>>加密数据
		3.将随机字符串也发送一份客户端保存(cookie)
        	sessionid:随机字符串
                
# 获取session
	request.session.get('key')
    	1.自动获取随机字符串
        2.去django_session表中根据随机字符串获取加密的数据
        3.自动解密数据并处理到request.sesion.get()中
        
# 补充说明
	1.可以设计过期时间
	2.存储session数据的位置可以修改

标签:插拔,return,get,中间件,request,django,session,字符串
From: https://www.cnblogs.com/xiaochenxiangchangpang/p/17007078.html

相关文章

  • Django中间件三个了解方法,基于Django中间件的功能设计,Django操作cookie与session
    目录Django中间件三个了解方法,基于Django中间件的功能设计,Django操作cookie与session今日内容概要今日内容详细Django中间件三个了解的方法基于Django中间件的功能设计cook......
  • django Cookie与Session
    djangoCookie与SessionCookie与Session简介回忆:HTTP协议四大特征1.基于请求响应2.基于TCP的应用层协议3.无状态:不保存客户端状态4.无连接最开始的网站都不需要用户......
  • django中间件
    django中间件内容概要django中间件简介django中间件两个重要方法django自定义中间件django中间件三个了解方法基于django中间件实现功能的插拔式设计内容详细djang......
  • 基于DJango和Pybind11,实现网络后端调用OpenCV算法
    本Blog来源于实际项目,所采用框架组合中,OpenCV实现算法主体、pybind11完成OpenCV的Python封装、django提供Web应用服务,三者协同配合,共同实现“网络后端调用OpenCV算法,解决特......
  • Django:auth认证模块
    目录一、django的auth认证模块1.什么是auth模块2.生成auth物理表二、创建django-admin账户1.创建超级管理员2.注册超级管理员账户3.登录admin账户三、auth模块中的方法1.导......
  • django中间件
    django中间件django默认有七个中间件并且还支持用户自定义中间件中间件主要可以用于:网站访问频率的校验用户权限的校验等全局类型的功能需求MIDDLEWARE=['......
  • Django之forms组件内容,Django中间件
    目录Django之forms组件内容,Django中间件今日内容概要今日内容详细forms组件渲染标签forms组件展示信息forms组件校验补充forms组件参数补充forms组件源码剖析modelform组件......
  • django forms组件,model from组件
    djangoforms组件,modelfrom组件内容概要forms组件简单使用form组件渲染标签forms组件校验补充forms组件参数补充forms组件源码剖析modelfrom组件forms组件小需求......
  • django,多对多,序列化组件,ORM批量操作数据,自定义分页器
    django,多对多,序列化组件,ORM批量操作数据,自定义分页器多对多三种创建方式1.全自动classBook(models.Model):title=models.CharField(max_length=32)authors......
  • Django之SQL注入漏洞复现(CVE-2021-35042)
    前言SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露漏洞原理Django组件存在SQL注入漏......