zoukankan      html  css  js  c++  java
  • 中间件和上下文处理器、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)

     如图所示:

  • 相关阅读:
    Js--Array类型1
    利用js生成一个在线考试系统
    在Asp.net core 项目中操作Mysql数据库
    Unity游戏接入TypeSDK集成笔记
    第一篇博客
    两次面试
    [OC笔记] static 关键字
    cellForRowAtIndexPath方法不执行的那些坑
    一行代码设置UITableView分割线的长度
    [转载]iOS开发:获取设备信息
  • 原文地址:https://www.cnblogs.com/taoge188/p/10562043.html
Copyright © 2011-2022 走看看