如Django documentation所述,另一种方法是使用基于类的视图。
基于类的视图提供了将视图实现为Python对象而不是函数的替代方法。相比基于函数的意见时,他们不取代基于函数的观点,但有一定的差异和优势:
- 涉及到特定的HTTP方法(GET,POST等)的代码组织可以通过不同的方法来解决而不是条件分支。
- 诸如mixins(多继承)的面向对象技术可用于将代码分解为可重用组件。的
因此,而不是使用基于函数的观点(在其他的答案中提到):
from django.shortcuts import render
def login(request):
if request.method == 'POST':
# handle the post request
else:
# handle the get request
return render(request, 'login.html')
你可以使用基于类的视图,像这样:
from django.shortcuts import render
from django.views.generic import View
class LoginView(View):
def post(self, request):
# handle the post request
return render(request, 'login.html')
def get(self, request):
# handle the get request
return render(request, 'template-path.html')
当使用基于类的视图,您的urls.py将如下所示:
# urls.py
from django.conf.urls import url
from myapp.views import LoginView
urlpatterns = [
url(r'^login/', LoginView.as_view()),
]