Django中login_required装饰器的深入介绍
前言
Django提供了多种装饰器,其中login_required可能是经常会使用到的。这里介绍下四种使用此装饰器的办法。
当然,在使用前,记得在工程目录的settings.py中设置好LOGIN_URL
使用方法
1.URLconf中装饰
fromdjango.contrib.auth.decoratorsimportlogin_required,permission_required fromdjango.views.genericimportTemplateView from.viewsimportVoteView urlpatterns=[ url(r'^about/',login_required(TemplateView.as_view(template_name="secret.html"))), url(r'^vote/',permission_required('polls.can_vote')(VoteView.as_view())), ]
2.装饰基于函数的视图
fromdjango.contrib.auth.decoratorsimportlogin_required fromdjango.httpimportHttpResponse @login_required defmy_view(request): ifrequest.method=='GET': #returnHttpResponse('result')
3.装饰类的视图
fromdjango.contrib.auth.decoratorsimportlogin_required fromdjango.utils.decoratorsimportmethod_decorator fromdjango.views.genericimportTemplateView classProtectedView(TemplateView): template_name='secret.html' @method_decorator(login_required) defdispatch(self,*args,**kwargs): returnsuper(ProtectedView,self).dispatch(*args,**kwargs)
4.装饰通过Mixin类继承来实现
fromdjango.contrib.auth.decoratorsimportlogin_required fromdjango.httpimportHttpResponseRedirect fromdjango.shortcutsimportrender fromdjango.views.genericimportView from.formsimportMyForm classLoginRequiredMixin(object): @classmethod defas_view(cls,**initkwargs): view=super(LoginRequiredMixin,cls).as_view(**initkwargs) returnlogin_required(view) classMyFormView(LoginRequiredMixin,View): form_class=MyForm initial={'key':'value'} template_name='form_template.html' defget(self,request,*args,**kwargs): form=self.form_class(initial=self.initial) returnrender(request,self.template_name,{'form':form}) defpost(self,request,*args,**kwargs): #codehere
Django用户登陆访问限制@login_required
在网站开发过程中,经常会遇到这样的需求:用户登陆系统才可以访问某些页面,如果用户没有登陆而直接访问就会跳转到登陆界面。
要实现这样的需求其实很简单:
1、在相应的view方法的前面添加django自带的装饰器@login_required
2、在settings.py中配置LOGIN_URL参数
3、修改login.html表单中的action参数
#views.py fromdjanco.contrib.auth.decoratorsimportlogin_required fromdjango.shortcutsimportrender_to_response @login_required defindex(request): returnrender_to_response('index.html')
#settings.py .... LOGIN_URL='/accounts/login/'#根据你网站的实际登陆地址来设置 ....
如果要使用django默认登陆地址,则可以通过在urls.py中添加如此配置:
#urls.py .... url(r'^accounts/login/',views.login), ....
#login.html{%csrf_token%} 登录系统 username Password
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。