3 视图层
一、MTV 与 MVC 模型
1 MTV 模型:Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:
- M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
- T 代表模板 (Template):负责如何把页面展示给用户(html)。
- V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
2 MVC 模型:
MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。
二、HTTPRequest 对象
1 request 参数
(1)request.GET.get('属性'):GET是 Django 在源码中进行了处理,伪装成了一个属性。
(2)request.method:请求的类型
(3)request.path:表示没有 ? 后边数据的路径,这是一个属性
(4)request.get_full_path():表示带有 ? 后面数据的路径,这是一个方法
(5)request.body:表示 form 表单中提交之后的 b'data'
三、HttpRequest.META
标准的 python 字典,包含所有的 HTTP 首部。具体的头部信息取决于客户端和服务器:
CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。 CONTENT_TYPE —— 请求的正文的MIME 类型。 HTTP_ACCEPT —— 响应可接收的Content-Type。 HTTP_ACCEPT_ENCODING —— 响应可接收的编码。 HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。 HTTP_HOST —— 客服端发送的HTTP Host 头部。 HTTP_REFERER —— Referring 页面。 HTTP_USER_AGENT —— 客户端的user-agent 字符串。 QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。 REMOTE_ADDR —— 客户端的IP 地址。 REMOTE_HOST —— 客户端的主机名。 REMOTE_USER —— 服务器认证后的用户。 REQUEST_METHOD —— 一个字符串,例如"GET" 或"POST"。 SERVER_NAME —— 服务器的主机名。 SERVER_PORT —— 服务器的端口(是一个字符串)。
四、JsonResponse
from django.http import JsonResponse JsonResponse 是向前端页面发送 Json 格式的字符串 在用 JsonResponse 时,若传给前端的数据并非 Json 格式,需要在参数中设置 safe=False
五、CBV 和 FBV
1 CBV(class base view)基于类的视图函数
from django.views import View class Test(): def dispatch(): 最先执行,判断是 get 还是 post 方法,然后分配给 get 或者 post code... 可进行逻辑处理 return obj 这个返回值是 get 传过来的 def get(self,request): obj=render(request,'index.html') return obj def post(self,request): return HttpResponse('post') 使用的时候: re_path(r'pattern',views.Test.as_view()) 相当于执行了一个方法
2 FBV(function base view)基于方法的视图函数
pass
六、简单的文件上传
1 HTML 页面
<form action="" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit"> </form> 注意:enctype 必须指定,这个是文件的编码格式
2 视图函数中
file=requet.FILES.get("myfile") file_name=file.name with open(file_name,"wb") as f: for line in file.chunks(): f.write(line) 说明: file 是 Django 封装过的文件对象 chunks() 是 Django 中的一个内置方法