zoukankan      html  css  js  c++  java
  • 模板、中间件以及MVC与MTV

    模板

    基本数据类型的渲染

    {#基础数据类型的渲染#}
    {#1. 变量#}
    {{ name }}
    {#2. 列表#}
        {#通过点索引可以取值#}
        {{ list.0 }}
        {#for循环取值#}
        {% for l in list %}
            {{ l }}
        {% endfor %}
    {#3. 字典#}
        {#通过点key取值#}
        {{ dict.name }}
    {#for 循环取值,可以.items  .values  .keys#}
        {% for foo in dict.items %}
            {{ foo }}
        {% endfor %}
    {#4. 列表套字典#}
        {% for d in lists %}
            {{ d.name }}
        {% endfor %}

    母版与子板

    母版写好的页面,子板可以直接通过继承获得并使用

    一般会在母版中占三个位置,留给子板的内容来添加

    {% block mycss %}
    {#子板的css会添加到这#}
    {% endblock %}
    
    {% block mycontent %}
    {#子板的html代码会添加到这#}
    {% endblock %}
    
    {% block myjs %}
    {#子板的js代码会添加到这#}
    {% endblock %}

    而我们的子板想要使用母版的内容,必须要继承,并且写与母版一直的占位符

    {% extends "layout.html" %}
    {#这样就会继承layout.html文件#}

    include导入

    在项目开发中,如果我们写了一个样式或者js代码会被很多的页面引用,我们一般的做法

    是把这写代码单独放到一个文件中,css代码通过link引入使用,js通过script的src引入使用

    那当我们写了一个html的小组件用的非常多,我们也可以把他写到一个单独的文件中

    在需要用的地方导入一下

    {% include "small.html" %}

    这样那个文件中的代码就会被全部导入过来,并且我们多次导入,他就会出现多次

    内置函数与自定义函数

    内置函数:模板语言提供给我们的函数

    {#函数写在管道符后面#}
    {{ name | upper }}

    自定义函数:需要我们在app中手动创建templatetags模块,然后里面文件名可以随意

    自定义函数的两种方式

    from django import template
    register = template.Library()
    # 第一种方式
    @register.filter()
    def func():
        pass
    
    # 第二种方式
    @register.simple_tag()
    def fnn():
        pass

    自定义函数的使用方式

    {#首先都需要把文件模块加载进来#}
    {% load aaa %}
    {#第一种定义方式的使用#}
    {{ name | func }}
    {#如果需要传参    函数名:参数   冒号前后不能由空格#}
    {{ name | func:"xxx" }}
    {#第二种方式的使用 通过{%  %}使用#}
    {% fnn name "xxx" "qqq" %}

    注:第一种方式filter 冒号前后不能有空格,并且传参只能传一个 ,第二种simple_tags可以传多个参数,通过空格隔开

    中间件

    django的请求生命周期

    中间件基本组成与执行顺序

    中间件说白了就是一个一个的类,他们都具备的两个方法是如下两个:

    from django.utils.deprecation import MiddlewareMixin
    class MyMiddleWare(MiddlewareMixin):
        
        def process_request(self,request):
            pass
        
        def process_response(self,response):
            pass
    #     上面两个方法就是中间件类中必备的两个方法
        def process_views(self, request, callback, callback_args, callback_kwargs):
        
    pass
    # 这个方法也是很常见的,但不是必须的

    中间件必须添加到settings.py中MIDDLEWARE列表中才生效

    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',
    ]

    执行的顺序:

    当中间件中都没有process_views函数时

      当有request请求时,先从上到下执行中间件中的process_request函数,执行完接着执行

      视图函数,视图函数执行完就从下到上执行中间件中的process_response函数

      当process_request函数返回None时,中间件往下执行,当返回HttpResponse时,

      这个中间件往下的中间件都不会执行,直接从这个中间件的process_response函数往回执行

    当中间件中有process_view函数时

    中间件的作用以及自定义中间件

    中间件的主要作用时对request请求以及response响应做一些预处理,以及判断IP是否为白名单之类的应用

    自定义中间件

    1. 生成一个文件,在文件中生成类

    from django.utils.deprecation import MiddlewareMixin
    class M1(MiddlewareMixin):
    
        def process_request(self,request):
            print("this is m1 request")
    
        def process_response(self,request,response):
            print("this is m1 response")
            return response

    2. 放入到settings文件中的MIDDLEWARE列表中

    import m1
    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',
        'm1.M1',
    ]

    MVC与MTV

    MVC与MTV本质都是一样的,都是项目目录结构的设计模式

    MVC

    m:models 存放表模型

    v:views 存放html页面

    c:controller 存放逻辑处理函数

    MTV

    m:models 存放表模型

    t:templates 存放html页面

    v:views 存放视图函数

  • 相关阅读:
    第五届河南省大学生程序设计竞赛 :最强DE战斗力(大数乘法)
    zzuli2455: 最大增区间(一)
    zzuli2455: 最大增区间(一)
    zzuli2424: 越靠近,越幸运(dfs)
    菜根谭#31
    菜根谭#30
    菜根谭#29
    菜根谭#28
    菜根谭#27
    菜根谭#26
  • 原文地址:https://www.cnblogs.com/hesujian/p/11221933.html
Copyright © 2011-2022 走看看