发布于2019-08-05 18:42 阅读(1375) 评论(0) 点赞(3) 收藏(0)
django中的数据流就是请求和响应, 如果将django比作一个工厂, 数据请求代表进货, 将数据进行加工然后再出货也就是响应, 中间的加工过程就可以用中间件来完成
含义: 处理接收的请求和发出的响应的组件, 都是由中间件来完成
本质: 是一个具有指定方法的类
文件名命名不受限, 放置的路径也不受拘束, 可以放在django项目下的任意位置, 必须是可导入的路径
文件中定义方法, 方法名随意 , 传入参数get_response
, 参数名不能改
首先我们先来写一个简单的中间件
def simple_middleware(get_response):
print('进入中间件')
def middleware(request):
print('处理请求前')
response = get_response(request)
print('处理请求后')
return response
return middleware
使用之前, 要去激活中间件
MIDDLEWARE = [
...
# 中间件函数的完整python路径
'teacher.middleware.simple_middleware',
]
有了上面的基础我们可以实现一个简单的反爬措施, 将上面的代码改写:
from django.http import HttpResponseForbidden
def simple_middleware(get_response):
print("进入中间件")
def middleware(request):
# 获取UA
user_agent = request.META['HTTP_USER_AGENT']
# 判断UA中是否包含chrome浏览器
if not 'chrome' in user_agent.lower():
return HttpResponseForbidden()
...
使用类定义效果和函数定义相同, 但是类可以使用更好的方式
class SimpleMiddleWare():
def __init__(self, get_response):
self.get_response = get_response
print('==进入中间件==')
def __call__(self, request):
print('==处理请求前==')
response = self.get_response(request)
print('==处理请求后==')
return response
同样也需要注册
MIDDLEWARE = [
...
'firstapp.middleware.SimpleMiddleWare'
]
如果过设置了多个中间件, 执行时就会按settings中的导入顺序执行, 第一个中间件执行到response = get_response(request)
时, 就会去调用下一个中间件 , 依次类推 , 从里往外执行
例如上面两种写法如果在一起运行的话, 运行结果就会是:
==进入中间件==
进入中间件
处理请求前
==处理请求前==
==处理请求后==
处理请求后
django提取context中的数据去供模板调用
需求: 所有的页面都需要一个特定的变量
本质: python函数 , 接收一个HttpRequest对象的参数 , 且返回的必须是一个字典
文件名命名不受限, 放置的路径也不受拘束, 可以放在django项目下的任意位置
定义
def my_name(request):
return {'name': 'Jack'}
写好之后去settings.py中去注册
TEMPLATES = [
...
'context_processors': [
...
'firstapp.customer_context.my_name'
...
注册好后可以在所有的配置文件使用, 将{{ name }}
加到模型中就可以显示
...
<body>
{{ name }}
<form action="" method="post">
...
如果同时有上下文管理器, 和上下文数据(context), 他们是按照顺序执行的, 如果这两者都有相同的变量名时 , context生效
可以用在想要使用重复变量的时候
作者:大侠
链接:https://www.pythonheidong.com/blog/article/6389/124c41a31353a358ee4d/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!