这节主要介绍视图的请求和响应对象相关概念或简单示例、基于类的视图以及动态路由。
视图的请求与响应对象
1.HttpRequest
HttpRequest对象定义于django/http/request.py文件中,每当请求到来时,Django就会创建一个携带请求元数据的HttpRequest对象,传递给视图函数的第一个参数。
视图函数中的处理逻辑就是根据元数据做出相应的动作。HttpRequest定义了很多属性和方法。
- method
method是一个字符串类型的值,标识请求所使用的HTTP方法,例如GET,POST,PUT,在视图函数中用这个属性判断请求的类型,在给出对应得处理逻辑 。
例如:
if request.method == ' GET ':
get_something()
elif request.method == ' POST ':
post_something_()
elif request.method == ' PUT ':
put_something_()
- HttpResponse
HttpResponse对象定义django/http/response.py文件中,在视图中主动创建并返回。
status_code状态码是重要属性,用来标识一次请求的状态,常见状态码有200表示请求成功,404标识请求的资源不存在,500标识服务器内部错误
content表示存储响应内容的二进制码
write将HttpResponse视为类文件对象,可以向其中添加响应数据,例如
response=HttpResponse('<h1>hello Django BBS</h1>')
response.write('<h2>hello Django BBS</h2>')
return response
基于类的视图
视图可以是函数,也可以是类,类视图同样能够实现视图的功能。
它的最大特点是利用不同的实例方法响应不同的HTTP。
例如:
from django.views import views
from django.views.decorators.csrf import crsf_exempt
from django.utils.decorators.csrf import method_decorator
class FirstView(View):
html='(%s)Hello Django BBS'
def get(self,request):
return HttpResponse(self.html % ' GET ')
def post(self,request):
return HttpResponse(self.html % ' POST ')
@method_decorator(crsf_exempt)
def dispath(self,request,*args,**kwargs):
return super(FirstView,self).dispath(request,*args,**kwargs)
....
FirstView继承自View,是所有基于类的视图的基类 。其中定义了get和post方法。FirstView重写了父类的dispatch方法,dispatch根据HTTP类型实现请求分发。
动态路由
1.使用path配置动态路由
def dynamic_hello(request,year,month,day):
html="<h1>(%s)hello django BBS</h1>"
return HttpResponse(html%('%s-%s-%s'%(year,month,day))
在应用中urlpatterns中加入路由定义
path('dynamic/<int:year>/<int:month>/<int:day>/',views.dynamic_hello)
在浏览器中输入http://127.0.0.1:8000/应用名/dynamic/2020/1/20,即可看见打印日期的欢迎语。