中间件
1、定义中间件
中间件可以放在项目路径下的任何位置,类似于视图函数,接收request,返回response;
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 16:08
# @Author : Star
# @Email : fu410388645@163.com
# @File : middleware.py
# @Software : PyCharm
#在APP中创建middleware.py文件,编写下面代码
from django.http import HttpResponseForbidden
def simple_middleware(get_response):
print("初始化设置")
def mddleware(request):
"""
案列:只有谷歌浏览器才可以访问
如果不是谷歌,就返回一个HttpResponseForbidden
:param request:
:return:
"""
user_agent = request.META['HTTP_USER_AGENT']
if not 'chrome' in user_agent.lower():
return HttpResponseForbidden()
print("处理请求前执行的代码")
respose = get_response(request)
print("处理请求后执行的代码")
return respose
return mddleware
2、激活中间件
#在settings.py目录下
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'teacher.middleware.simple_middleware' #中间件
]
3、测试(在其他浏览器中访问)
image.png
上下文处理
1、定义
context传递变量到模板,如果所有页面都需要某些特定模板,那么就需要上下文处理;
上下文处理=python函数
2、案例
假如所有页面都需要一个name的变量
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 17:39
# @Author : Star
# @Email : fu410388645@163.com
# @File : customer_context_processor.py
# @Software : PyCharm
#在任意APP下创建customer_context_processor.py文件
def my_name(request):
return {'name' : '小明'}
配置
#在settings.py文件下配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'teacher.customer_context_processor.my_name', #自定义上下文处理器
],
},
},
]
测试
使用上下文处理时要在模板中加入字段名
#视图函数,
def test(request):
return render(request,'teacher/test.html')
在test.html中加入{{name}}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个模板页面</title>
</head>
<body>
{{ name }}
<h1 style="color:red">第一个页面</h1>
欢迎大家访问
</body>
</html>
访问页面查看是否出现定义好的name字段名
image.png













网友评论