MTV和MVC、contentType、批量插入数据

发布时间 2023-08-08 23:58:16作者: 凡人半睁眼

一、MTV和MVC的概念

1、 MVC(Model-View-Controller)模式:(传统的模式,比如java、php中)

1 Model(模型): 数据层,负责处理应用程序的数据逻辑,包括数据库操作、数据验证、业务规则等。模型通常封装了与数据相关的操作,如增删改查。

2 View(视图): 用户界面层,负责显示数据并与用户进行交互。视图从模型中获取数据并呈现给用户,同时也接收用户输入,将其传递给控制器进行处理。

3 Controller(控制器): 控制层,负责协调模型和视图之间的交互,处理用户输入并作出响应。控制器接收用户的请求,根据请求调用相应的模型逻辑和视图进行响应。

2、MTV(Model-Template-View)模式:

1 Model(模型): 类似于 MVC 中的模型,处理数据逻辑,包括数据库操作和业务规则。

2 Template(模板): 类似于 MVC 中的视图,负责呈现数据给用户。模板是 HTML 文件,其中包含用于展示数据的标记和模板语法。

3 View(视图): 类似于 MVC 中的控制器,处理用户请求并与模型和模板进行交互。视图负责业务逻辑,将模型的数据传递给模板进行渲染,然后将渲染后的页面返回给用户。

主要区别在于 MTV 中的视图(View)不同于传统 MVC 中的控制器(Controller)。

在 Django 中,视图更专注于处理业务逻辑,从模型中获取数据并将其传递给模板进行渲染,然后返回渲染后的页面给用户。控制器的部分职责在 Django 的视图和模板中共同完成。

在 Django 的 MTV 架构中,模型(Model)处理数据逻辑,模板(Template)负责界面呈现,视图(View)则处理业务逻辑和请求响应。这种分层结构使代码更加清晰、模块化,有助于快速开发和维护高质量的 Web 应用程序。

二、前后端数据传输的编码格式(contentType)

1、在Django项目中,前后端数据传输的编码格式(Content-Type)取决于HTTP请求头中的Content-Type字段,它指定了请求或响应中的数据的编码方式。

以下是一些常见的前后端数据传输编码格式:

application/json: 这是传输JSON(JavaScript Object Notation)数据的常用编码格式。JSON是一种轻量级的数据交换格式,通常用于在前后端之间传递结构化数据。Django的Rest Framework等库广泛支持处理JSON数据。

application/x-www-form-urlencoded: 这是用于传输URL编码表单数据的默认编码格式。当通过HTML表单提交数据时,数据会被编码为URL查询字符串的形式,然后发送给服务器。

multipart/form-data: 这是用于上传文件和表单数据的编码格式。当通过HTML表单上传文件时,数据会被分解成多个部分,并使用multipart/form-data进行编码。

text/plain: 这是纯文本数据的编码格式,通常不常用于传输结构化数据,而是用于传输纯文本内容。

application/xml: 这是传输XML(Extensible Markup Language)数据的编码格式。虽然在某些情况下仍然使用,但相对于JSON来说已经较少使用。

2、针对ajax提交的json格式的数据,django后端不在把数据封装到request.POST中了

提交json格式的数据必须满足两个条件:
1. 你的编码格式必须是json格式的:contentType参数
2. 你的数据必须是json {"a":1}

# 针对json格式的数据,Django后端又是如何处理的?
针对ajax提交的json格式的数据,django后端不在把数据封装到request.POST中了

# 对于json格式的数据,django后端不在做任何的封装,数据是纯原生的,发送过来的数据是二进制形式的
# 我们自己来处理这些二进制数据

# js中序列化
JSON.stringify({'a': 1, b: 2})  ----------》{'a': 1, b: 2} 对象
contentType:'application/json',
    
# django后端接收json格式的数据
json_str = request.body.decode('utf-8')
print(json_str)  # {"a":1,"b":2}

json_data = json.loads(json_str)
print(json_data)  # {'a': 1, 'b': 2}
print(json_data.get('a'))

三、批量插入数据

1、代码

 user_obj_list = []
    for i in range(100000):
        user_obj = models.UserInfo(username='jerry_%s' % i)
        user_obj_list.append(user_obj)
        print('jerry_%s' % i)

    '''开始操作数据库'''
    models.UserInfo.objects.bulk_create(user_obj_list)

user_obj = models.UserInfo(username='jerry_%s' % i) 是在一个循环中创建 models.UserInfo 类的实例,并将其添加到名为 user_obj_list 的列表中

如在数据库批量插入时,以减少与数据库的交互次数,从而提高性能。

在代码的最后,通过 models.UserInfo.objects.bulk_create(user_obj_list)user_obj_list 中的所有实例一次性批量插入到数据库中。这样可以减少每次插入操作的开销,从而更高效地存储大量数据。