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

来源:互联网 发布:迷雾 电视剧 知乎 编辑:程序博客网 时间:2024/05/29 02:24

项目已经实现了登录和注销功能,但还是没起作用,因为注销后还是可以直接通过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.
原创粉丝点击