class based views,使用面向对象的方法来写视图函数,最大程度的达到了代码的复用。
一般情况下http请求方法我们只用到get和post。所以视图函数可以写成下面这样,就可以自动请求get或者post方法了。
写法
from django.views.generic import View
from django.http import HttpResponse, HttpResponseRedirect
class LoginView(View):
redirect_url = "/index/"
def get(self, request):
return HttpResponse("login")
def post(self, request):
print "login success"
return HttpResponseRedirect(self.redirect_url)
url中写法如下:
urlpatterns = [
url('login/$', LoginView.as_view(), name="login"),
]
也可以传入redirect_url参数,修改它的默认参数。
就这样写 url('login/$', LoginView.as_view(redirect_url=“login_url”), name="login"),
类的属性可以通过两种方法设置,
第一种是常见的Python的方法,可以被子类覆盖。
from django.http import HttpResponse
from django.views import View
class GreetingView(View):
greeting ="Good Day"
def get(self, request):
returnHttpResponse(self.greeting)
# 通过子类来覆盖
class MorningGreetingView(GreetingView):
greeting ="Morning to ya"
第二种方法,你也可以在url中指定类的属性:
在url中设置类的属性Python
urlpatterns =[
url(r'^about/$', GreetingView.as_view(greeting="G'day")),
]