今日内容总结
django中间件三个了解的方法(较冷门)
路由匹配成功之后执行视图函数/类之前自动触发(顺序同proess_request)
视图函数/类执行报错自动触发(顺序同process_reponse)
视图函数/类返回的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.无连接
'''
保存再客户端于用户数据
保存再服务端于用户状态相关的信息
ps:session的工作必须依赖于cookie
django操作cookie
from django.shortcuts import render,HttpResponse,redirect
return render()
return HttpResponse()
return redirect()
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会自动创建很多需要的表
request.session['key'] = value
1.生成一个随机字符串
2.对value数据做加密处理 并在django_session表中存储
随机字符串>>>加密数据
3.将随机字符串也发送一份客户端保存(cookie)
sessionid:随机字符串
request.session.get('key')
1.自动获取随机字符串
2.去django_session表中根据随机字符串获取加密的数据
3.自动解密数据并处理到request.sesion.get()中
1.可以设计过期时间
2.存储session数据的位置可以修改
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)