中间件和上下文处理器djangoAdmin

Posted taoge188

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中间件和上下文处理器djangoAdmin相关的知识,希望对你有一定的参考价值。

中间件

技术图片

技术图片

中间件代码放到python任意的地方,能找到导入就行,这里放到app里

创建middleware.py文件,中间件的两种方法

#一个中间件是一个可调用的对象,接受一个request,返回一个请求
#第一种一个中间件可以是一个函数
#实现功能:利用中间件实现:只有谷歌浏览器才让访问 通过user_agent区分
from django.http import HttpResponseForbidden

def simple_middleware(get_response):#参数必须是get_response
    #一次性的设置和初始化 start project
    print(我是一次性设置000000)
    def middleware(request):
        #在每一个请求上都会调用
        #处理请求之前被执行的代码
        #视图将会被调用,或者后后面的中间件会执行
        print(我在视图调用前调用了11111)
        user_agent = request.META[HTTP_USER_AGENT]  #源信息
        if not chrome in user_agent.lower():
            return HttpResponseForbidden()
        response =get_response(request)
        #处理请求响应之后的代码
        #视图已经被调用
        print(视图已经被调用22222 )
        return response
    return middleware

# 第二种方式实现中间件,还可以使用一个类,并且它的实例可以被调用

class SimpleMiddleWare:
    def __init__(self,get_response):#必须有一个__init__初始化方法,必须有一个get_reponse方法
        self.get_response = get_response
    #一次性的设置和初始化 start project
    print(我是一次性设置0000001)
    def __call__(self, request):
        #在每一个请求上都会调用
        #处理请求之前被执行的代码
        #视图将会被调用,或者后后面的中间件会执行
        print(我在视图调用前调用了333333333333)
        response = self.get_response(request)
        #处理请求响应之后的代码
        #视图已经被调用
        print(视图已经被调用44444444444444 )

        return response

激活中间件,设置到middleware的列表中

在settings.py中添加

MIDDLEWARE = [teacher.middleware.simple_middleware,
    teacher.middleware.SimpleMiddleWare
]

请求结果:

技术图片

中间件还可以调用的方法:

技术图片

 

上下文处理器

技术图片

#上下文处理器就是一个python函数
#必须接受一个request参数,必须返回一个字典

技术图片

技术图片

技术图片

如果context中定义了与上下文中相同名字变量,会覆盖上下文中定义的变量。


 djangoAdmin

 步骤:

1.在install_app中注册,默认都有

INSTALLED_APPS = [django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
]

设置template 中的,默认都有

            context_processors: [django.contrib.auth.context_processors.auth,
                django.contrib.messages.context_processors.messages,
        ]

3.中间件配置,默认都有

MIDDLEWARE = [django.contrib.auth.middleware.AuthenticationMiddleware,
    django.contrib.messages.middleware.MessageMiddleware,
]

4.配置根url中配置admin.默认有

path(admin/, admin.site.urls),

如果没有这些,先把这些补全,然后做数据库迁移,在进行访问

技术图片

第一个用户需要使用命令行创建:

技术图片

然后从页面进行登录:

技术图片

修改成中文,修改settings.py 中的语言配置

LANGUAGE_CODE = zh-Hans#en-us

技术图片

将创建的模型通过管理站点进行显示:

在admin.py文件中进行注册。文件中还进行了显示,索引,分组,分页过滤,查询等的功能展示。

from django.contrib import admin
from teacher.models import StudentDetail,Student

class StudentAdmin(admin.ModelAdmin):
    #显示列表的设置
    list_display = [id,name,sex,qq,phone,c_time] #显示
    list_display_links = [id,name]  #索引
    search_fields = [name,sex,c_time]  #查询
    list_filter = [sex,name] #过滤
    list_per_page = 3   #分页
    #详情页,添加页的设置   fields与fieldsets只能有一个存在
    # fields = [‘name‘,‘qq‘]
    #分组
    fieldsets = [
        (None,{fields:[name,sex]}),
        (详细信息,{fields:[qq,phone,grade]}),
        (设置,{fields:[is_deleted]}),
    ]
# Register your models here.
admin.site.register(StudentDetail)
admin.site.register(Student,StudentAdmin)

 如图所示:

技术图片

技术图片

 

以上是关于中间件和上下文处理器djangoAdmin的主要内容,如果未能解决你的问题,请参考以下文章

python使用上下文对代码片段进行计时,非装饰器

django 中的上下文处理器与中间件

AsyncTask 和 FragmentManager 的问题

Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段

如何在多片段活动中处理 onContextItemSelected?

AOP框架Dora.Interception 3.0 [3]: 拦截器设计