基于 Class 的视图的函数视图
Function views to Class based-views
如何将这些视图更改为 Class 基于视图,我一直想知道如何执行此操作:c
我知道 Class 基于视图比功能视图更好,但我不知道有什么区别,我怎样才能将 FW 更改为 CBV 并执行相同的操作。
def login(request):
context = RequestContext(request, {
'request': request, 'user': request.user
})
return render(request, 'login.html')
@login_required(login_url='/')
def home(request):
return render_to_response('home.html')
def logout(request):
auth_logout(request)
return redirect('/')
如果有人能帮助我,我将不胜感激:)
编辑
现在有针对这两件事的内置 class 视图,例如 LoginView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LoginView so is much more easy to do this with CBV and LogoutView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LogoutView
如果您想实施或更改它,您应该查看文档对此非常有帮助。
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic.base import TemplateView, View
class LoginTemplateView(TemplateView):
template_name = 'login.html'
class HomeTemplateView(TemplateView):
template_name = 'home.html'
@method_decorator(login_required(login_url='/'))
def dispatch(self, request, *args, **kwargs):
return super(HomeTemplateView, self).dispatch(request, *args, **kwargs)
class LogoutView(View):
def get(self, request, *args, **kwargs):
auth_logout(request)
return redirect('/')
我没有测试过,但我认为是这样。 TemplateView 将请求数据传递给模板,因此我们不必再次声明。如果您需要传递更多数据,您可以覆盖 get_context_data 方法。在此页面中向您展示 CBV 中的所有方法和 request/response 的流程。 https://ccbv.co.uk/projects/Django/1.8/django.views.generic.base/TemplateView/
如何将这些视图更改为 Class 基于视图,我一直想知道如何执行此操作:c
我知道 Class 基于视图比功能视图更好,但我不知道有什么区别,我怎样才能将 FW 更改为 CBV 并执行相同的操作。
def login(request):
context = RequestContext(request, {
'request': request, 'user': request.user
})
return render(request, 'login.html')
@login_required(login_url='/')
def home(request):
return render_to_response('home.html')
def logout(request):
auth_logout(request)
return redirect('/')
如果有人能帮助我,我将不胜感激:)
编辑
现在有针对这两件事的内置 class 视图,例如 LoginView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LoginView so is much more easy to do this with CBV and LogoutView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LogoutView
如果您想实施或更改它,您应该查看文档对此非常有帮助。
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
from django.views.generic.base import TemplateView, View
class LoginTemplateView(TemplateView):
template_name = 'login.html'
class HomeTemplateView(TemplateView):
template_name = 'home.html'
@method_decorator(login_required(login_url='/'))
def dispatch(self, request, *args, **kwargs):
return super(HomeTemplateView, self).dispatch(request, *args, **kwargs)
class LogoutView(View):
def get(self, request, *args, **kwargs):
auth_logout(request)
return redirect('/')
我没有测试过,但我认为是这样。 TemplateView 将请求数据传递给模板,因此我们不必再次声明。如果您需要传递更多数据,您可以覆盖 get_context_data 方法。在此页面中向您展示 CBV 中的所有方法和 request/response 的流程。 https://ccbv.co.uk/projects/Django/1.8/django.views.generic.base/TemplateView/