django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

时间:2023-03-09 09:45:25
django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。

一 视图的实现可以基于两种方法:

1 基于函数的形式 FBV

django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

使用装饰器装饰FBV 

直接在上面添加

@wrapper
def display(request):

2 基于类的方式实现CBV

django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

使用 装饰器装饰CBV

django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

二 dispatch()

# 使用CBV时要注意,请求过来后会先执行dispatch()这个方法,如果需要批量对具体的请求处理方法,如get,post等做一些操作的时候,
这里我们可以手动改写dispatch方法,这个dispatch方法就和在FBV上加装饰器的效果一样。

例如;

class Login(View):

    def dispatch(self, request, *args, **kwargs):
print('before')
obj = super(Login,self).dispatch(request, *args, **kwargs)
print('after')
return obj def get(self,request):
return render(request,'login.html') def post(self,request):
print(request.POST.get('user'))
return HttpResponse('Login.post')

 三 request对象

当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

请求相关的常用值

  • path_info     返回用户访问url,不包括域名
  • method        请求中使用的HTTP方法的字符串表示,全大写表示。
  • GET              包含所有HTTP  GET参数的类字典对象
  • POST           包含所有HTTP POST参数的类字典对象
  • body            请求体,byte类型 request.POST的数据就是从body里面提取到的

下面让我们来看看 path_info 和body

django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

当输入的是中文的时候

django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

下面看一个上传文件的例子 Request.FILES

django之视图系统 views.py-->主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)

四Response对象

JsonResponse对象

前后端传递的一般是json文件

import json
from django.http import JsonResponse
def data_json(request):
data={'name':"xinxin",'age':30}
return HttpResponse(json.dumps(data)) #Content-Type: text/html; charset=utf-8
# return JsonResponse(data) #Content-Type: application/json

如果使用非字典的形式会报错,如何解决,加上safe=False

In order to allow non-dict objects to be serialized set the safe parameter to False.
def data_json(request):
data_list=[1,2,3]
# return JsonResponse(data_list)
return JsonResponse(data_list,safe=False)