python中间件与上下文处理

中间件

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容