正如Django文档中提到的,另一种方法是使用基于类的视图。
基于类的视图提供了一种将视图实现为Python对象而不是函数的替代方式。它们并不取代基于函数的视图,但与基于函数的视图相比具有某些差异和优势:
- 针对特定HTTP方法(GET、POST等)的代码组织可以通过单独的方法进行处理,而不是条件分支。
- 可以使用面向对象技术,例如mixin(多重继承),将代码因子化为可重用的组件。
因此,可以使用基于类的视图来代替使用基于函数的视图(正如其他答案中所提到的)。
from django.shortcuts import render
def login(request):
if request.method == 'POST':
else:
return render(request, 'login.html')
您可以使用类视图,就像这样:
from django.shortcuts import render
from django.views.generic import View
class LoginView(View):
def post(self, request):
return render(request, 'login.html')
def get(self, request):
return render(request, 'template-path.html')
当使用基于类的视图时,您的urls.py文件将如下所示:
from django.conf.urls import url
from myapp.views import LoginView
urlpatterns = [
url(r'^login/', LoginView.as_view()),
]