from django.views.generic import View class RegisterView(View): """类视图:处理注册""" def get(self, request): """处理GET请求,返回注册页面""" return render(request, ‘register.html‘) def post(self, request): """处理POST请求,实现注册逻辑""" return HttpResponse(‘这里实现注册逻辑‘)
说明:
from django.views.generic import View
或者from django.views.generic.base import View
导入,定义方式如上所示定义类视图的路由
as_view()
方法来添加。urlpatterns = [ # 视图函数:注册 # url(r‘^register/$‘, views.register, name=‘register‘), # 类视图:注册 url(r‘^register/$‘, views.RegisterView.as_view(), name=‘register‘), ]
@classonlymethod def as_view(cls, **initkwargs): """ Main entry point for a request-response process. """ ...省略代码... def view(request, *args, **kwargs): self = cls(**initkwargs) if hasattr(self, ‘get‘) and not hasattr(self, ‘head‘): self.head = self.get self.request = request self.args = args self.kwargs = kwargs # 调用dispatch方法,按照不同请求方式调用不同请求方法 return self.dispatch(request, *args, **kwargs) ...省略代码... # 返回真正的函数视图 return view def dispatch(self, request, *args, **kwargs): # Try to dispatch to the right method; if a method doesn‘t exist, # defer to the error handler. Also defer to the error handler if the # request method isn‘t on the approved list. if request.method.lower() in self.http_method_names: handler = getattr(self, request.method.lower(), self.http_method_not_allowed) else: handler = self.http_method_not_allowed return handler(request, *args, **kwargs)
说明:as_view方法返回一个方法,这个方法执行时,最终会根据请求方式,调用我们在视图类中定义的方法
原文:https://www.cnblogs.com/liuxuelin/p/14295589.html