如何将这些视图更改为基于类的视图,我一直想知道如何执行此操作:c
我知道基于类的视图比功能视图更好,但我不知道如何将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('/')
如果有人能帮助我,我将不胜感激:)
修改
现在有一些内置的基于类的视图用于这两个方面,比如LoginView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LoginView所以使用CBV和LogoutView https://docs.djangoproject.com/en/1.11/topics/auth/default/#django.contrib.auth.views.LogoutView
更容易做到这一点如果你想实现或改变它,你应该看看文档对此非常有帮助。
答案 0 :(得分:1)
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中的所有方法以及请求/响应的流程。 https://ccbv.co.uk/projects/Django/1.8/django.views.generic.base/TemplateView/