在Django的实际应用中,我们通常会限制某些页面在登录后方可访问(如个人中心页面),否则就跳转到登录页面先进行登录。
在网上搜索到的直接使用装饰器@login_required放在view上方的做法当前版本(1.9.*以上)并不可用,会报以下错误:
AttributeError: 'function' object has no attribute 'as_view'
那么该如何实现呢?以index页面为例,实现方法有以下几种:
1.url+view文件
#urls.py,以下xxx为书写view的app名称
from xxx.views import IndexView
url(r'^$', IndexView.as_view(), name="index"),
#views.py
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
@method_decorator(login_required, name='dispatch')
class IndexView(View):
def get(self, request):
return render(request, 'index.html', {})
2.仅url文件
from django.contrib.auth.decorators import login_required
url(r'^$', login_required(TemplateVi