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 中的一个内置方法

猜你喜欢

转载自www.cnblogs.com/Smart1san/p/9629164.html
今日推荐