Django——视图
Django的视图(View)
- 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
- 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片。
- 将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中
FBV与CBV
FBV(Funciton Based View)基于函数的view
CBV(Class Based Vies)基于类的view
# FBV版添加班级
def add_class(request):
if request.method == "POST":
class_name = request.POST.get("class_name")
models.Classes.objects.create(name=class_name)
return redirect("/class_list/")
return render(request, "add_class.html")
# CBV版添加班级
from django.views import View
class AddClass(View):
def get(self, request,*args,**kwargs): #如果请求为GET那么就会执行该方法,而不用去判断
return render(request, "add_class.html")
def post(self, request,*args,**kwargs): #如果请求为POST那么就会执行该方法,而不用去判断
class_name = request.POST.get("class_name")
models.Classes.objects.create(name=class_name)
return redirect("/class_list/")
使用CBV的好处与注意事项:
- CBV需要在urls中需要修改一下。url(r'add_class/', views.AddClass.as_view()),
- 不需要进行发送请求的判断,有get就会运行class里的get请求。是post就会运行post
装饰器使用:
#在FBV上正常加入即可。下面是在CBV上加入装饰器
from django.utils.decorators import method_decorator
#使用method_decorator和直接使用timer的区别在于装饰器内传入参数的第一位是request对象,而timer的第一位是函数对象
#1. 加到方法上,针对自己写的请求方式
@method_decorator(timer) #timer是写好的装饰器
def get(self,request,*args,**kwargs):
pass
#2. 加到dispatch方法上,该方法是将post、get等所有请求全部涵盖在内。
@method_decorator(timer)
def dispatch(self,request,*args,**kwargs): #dispatch函数是内置的,需要更改就将其单独写在自己的函数中。
print(111)
ret = super().dispatch(request,*range,**kwargs)
print(222)
return ret
#3. 加到类上,可以将name换成单独的请求方式,get或post,如果想全部应用就写dispatch上即可。
@method_decorator(timer,name='dispatch')
class A(View):
pass