中间件和上下文处理器、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)

 如图所示:

猜你喜欢

转载自www.cnblogs.com/taoge188/p/10562043.html
今日推荐