您的位置:首页 > 编程语言 > Go语言

Django身份认证--禁止匿名登录

2017-08-25 16:03 351 查看
项目已经实现了登录和注销功能,但还是没起作用,因为注销后还是可以直接通过url:http://127.0.0.1:8000/manage/main/ 访问到管理界面。所以还是需要进行访问控制。

查了下资料,在Django里面,最简单的作法只需要在相应的视图函数前面增加@login_required修饰符即可:

from django.contrib.auth.decorators import login_required #导入包


然后在视图函数前增加修饰符:

@login_required  #表示需要登录才能访问本页面,禁止匿名登录
def gotomanage(request):
return render(request, 'schemes/tradescheme.html')


说明:如果用户还没有登录,默认会跳转到‘/accounts/login/’。这个值可以在settings文件中通过LOGIN_URL参数来设定。

因此在urls.py中设置:

from django.contrib.auth.views import login #先导入此包

url(r'^accounts/login/$', login, {'template_name': 'login.html'}), # 用自己的登录界面来代替原来的默认值


说明:

之前查到的资料是用这种形式:

url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),


但报错:TypeError: view must be a callable or a list/tuple in the case of include().

原因是:django1.10 后url中的第二个参数不再支持使用字符串的方式,而是要用真正的视图函数名称来代替。

Stack Overflow上的原话:

String reference is deprecated in Django 1.10. So, Django 1.10 no longer allows you to specify views as a string in your URL patterns. You can no longer pass import paths to url(), you need to pass the actual view function. The solution is to update your urls.py to include the view callable. This means that you have to import the view in your urls.py.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  django