• 中美研究人员发现新型狗流感病毒 2019-05-29
  • 豫园商城升级改造:这些楼顶可见最好的风景--旅游频道 2019-05-14
  • 头条 —频道 春城壹网 七彩云南 一网天下 2019-05-14
  • 人为某种意识而奋斗是幸福的,获得成绩或成就更幸福。 2019-05-10
  • 【专题】省违反中央八项规定精神和“四风”问题线索举报平台 2019-05-09
  • 确定这是热身赛?吴前拼到大腿抽筋 拆绷带继续干 2019-05-09
  • 应对排放新规 大众德国工厂计划短暂停产 2019-04-26
  • 一师一团土地确权登记颁证工作全面展开 2019-04-26
  • 一语惊坛(5月31日):“我们不一样”,中国向世界许下一个承诺。 2019-04-22
  • 俄罗斯世界杯F组:球迷风采 2019-04-10
  • 5月份国民经济数据发布:中国经济持续稳中向好 2019-04-10
  • 贵州宣讲十九大:干部争当宣讲员 群众心窝暖洋洋 2019-03-25
  • 别空谈,说说看,这个“简单的逻辑关系”是什么关系? 2019-03-25
  • 快过闪电,MIUI 10与MIUI 9速度对比 2019-03-21
  • 泽州去年“免费教育”资金达5211万元 2019-03-19
  • 宁夏11选五走势图: Django 学习第十一天——中间键和上下文处理器

    快乐彩开奖号码 www.752o.com  

    一、中间键的引入:

      Django中间件(Middleware)是一个轻量级、底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.

     

      django中的中间键:

        django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

        在django项目的settings??橹?,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件.

     

        自定义中间键文件可以放在改项目的任意可以导入的地方(一般放在app根目录里面)

        一个中间键就是一个可调用的对象,他会接收一个request并返回一个请求

     

        自定义一个中间键可以是一个函数:

    def xxx(get_response):   # (中间键工厂)函数名自定义,传的这个参数必须是这个名字
        # 这里写一次性的设置和初始化:在 start project 的时候执行的,只执行一次
        def xx(request):  # (中间键)函数名自定义,传的这个参数必须是这个名字
            # 这里写处理请求之前的代码
            # 视图将会被调用,或者后面的中间键会执行
            response = get_response(request)
            # 处理请求响应之后的代码(视图已经被调用了)
            return response
        return xx   # 返回自定义的中间键

        激活(注册)中间键:在 setttings.py 文件里的 MIDDLEWARE 列表里添加自定义的中间键工厂全路径(到中间键工厂;添加到最后)

     

      例子:定义一个只能让谷歌浏览器访问的网站

    from django.http import HttpResponseForbidden
    
    def xxx(get_response):   # (中间键工厂)函数名自定义,传的这个参数必须是这个名字
    
        def xx(request):  # (中间键)函数名自定义,传的这个参数必须是这个名字
            user_angent = reqeust.META['HTTP_USER_AGENT']  # 获取请求的源信息中的 USER_AGENT
            if not 'chrome' in user_agent.lower():   # 判断 chrome(谷歌浏览器) 在不在里面;忽略大小写(都用小写的)
                return HttpRespinseForbidden()
            response = get_response(request)
    
            return response
        return xx   # 返回自定义的中间键

     

     

        自定义一个中间键也可以是一个类:(这个的实例可以被调用)

    class Xxx:   (中间键工厂)类名自定义
        def __init__(self,get_response):   # 传的这个参数必须是这个名字
            self.get_response = get_response
             # 这里写一次性的设置和初始化:在 start project 的时候执行的,只执行一次
        def __call__(self.request):
            # 这里写处理请求之前的代码
            # 视图将会被调用,或者后面的中间键会执行
            response = self.get_response(request)
            # 处理请求响应之后的代码(视图已经被调用了)
            return response

        激活(注册)中间键:在 setttings.py 文件里的 MIDDLEWARE 列表里添加自定义的中间键工厂全路径(到中间键工厂;添加到最后)

     

      请求和响应顺序:

        按照 settings.py 文件 中的 MIDDLEWARE 列表顺序来的;请求的时候从前往后(从第一个到最后一个);响应的时候从后往前(从最后一个到第一个)

     

     

     

    二、上下文处理器:

      所有页面都需要特定变量

      自定义上下文处理器也可以放在该项目的任意可以导入的地方(一般放在app根目录里面)

     

      自定义上下文处理器也可以是一个函数:

    def xxx(request):  # 传入必须是 request 这个名字当参数
        return {'key':'value'}   # 必须返回一个字典类型的对象;获取用 key 就可以了

        激活(注册):在 settings.py 文件里的 TEMPLATES 中的 OPTIONS 中的 'context_processors' 里面添加自定义的上下文处理器的全路径(添加到最后)

     

     

      注意:如果在视图(views)中有相同的 key 被传入,那么将会使用 该 views 中的key

     

      中间键和上下文总结:

        中间件是在用户请求到响应的过程中去加入一些额外的逻辑功能

        上下文是给所有的模板增加变量

     

    三、django admin后台:

      配置 admin.py 文件:

    from django.contrib import admin
    
    from .models import 自定义表1,自定义表2
    admin.site.register(自定义表1)
    admin.site.register(自定义表2)

     

      创建超级管理员:(命令行在项目根目录输入)

    python manage.py createsuperuser

        需要:用户名;邮箱;密码

    配置url:(默认是配置好的)

     

     

      进入django后台:

        浏览器输入:ip:端口/admin

        输入刚刚新建的用户名,密码

     

      设置中文和中国时间:

        在 settings.py 文件里设置: 

     

     

      自定义管理页面:

        Django提供了admin.ModelAdmin类

        通过定义ModelAdmin的子类,来定义模型在Admin界面的显示方式

     

        列表页属性:

          list_display:显示字段,可以点击列头进行排序;等于一个列表;

          list_display_links:点击该字段可以进入编辑页,可以写多个;等于一个列表

          list_filter:过滤字段,过滤框会出现在右侧;等于一个列表;

          search_fields:搜索字段,搜索框会出现在上侧;等于一个列表;

          list_per_page:分页,分页框会出现在下侧;等于一个整数(页数)

        添加、修改页属性:

          fields:属性的先后顺序;等于一个列表

          fieldsets:属性分组;等于一个列表

          注意:上面两个属性,二者选一。

     

    注册的时候需要把它的管理类一起注册进去

     

     

    posted @ 2019-03-16 19:55 碔趺 阅读(...) 评论(...) 编辑 收藏
  • 中美研究人员发现新型狗流感病毒 2019-05-29
  • 豫园商城升级改造:这些楼顶可见最好的风景--旅游频道 2019-05-14
  • 头条 —频道 春城壹网 七彩云南 一网天下 2019-05-14
  • 人为某种意识而奋斗是幸福的,获得成绩或成就更幸福。 2019-05-10
  • 【专题】省违反中央八项规定精神和“四风”问题线索举报平台 2019-05-09
  • 确定这是热身赛?吴前拼到大腿抽筋 拆绷带继续干 2019-05-09
  • 应对排放新规 大众德国工厂计划短暂停产 2019-04-26
  • 一师一团土地确权登记颁证工作全面展开 2019-04-26
  • 一语惊坛(5月31日):“我们不一样”,中国向世界许下一个承诺。 2019-04-22
  • 俄罗斯世界杯F组:球迷风采 2019-04-10
  • 5月份国民经济数据发布:中国经济持续稳中向好 2019-04-10
  • 贵州宣讲十九大:干部争当宣讲员 群众心窝暖洋洋 2019-03-25
  • 别空谈,说说看,这个“简单的逻辑关系”是什么关系? 2019-03-25
  • 快过闪电,MIUI 10与MIUI 9速度对比 2019-03-21
  • 泽州去年“免费教育”资金达5211万元 2019-03-19
  • 亚洲风情系列 2019年甘肃快三开奖结果 网易排列三和值走势图 王者荣耀李白出装 新浪北京单场比分直播百度 幸运双星客服 高级二肖中特 任你博娱乐城怎么样 专业影评海底总动员 堡垒之夜苹果咋下载 魂斗罗归来人物 福建体育彩票31选7中奖规则 宝石女王电子游艺 福彩开奖双色球走势图 贵州快三最大遗漏 江苏时时彩开奖号96期