模板中间件以及MVC与MTV

Posted hesujian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板中间件以及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 存放视图函数

以上是关于模板中间件以及MVC与MTV的主要内容,如果未能解决你的问题,请参考以下文章

[Django之框架设计模型(MTV与MVC)Ajax]

Django大纲

区别MVC和mtv

千锋Django学习笔记

千锋Django学习笔记

Django 路由层,视图层,模板层