您的位置:首页 > 产品设计 > UI/UE

基于 Django1.10 文档的深入学习(33)—— Using the Django authentication system 之login_required和LogiRequiredMixin

2017-05-02 11:14 549 查看

Using the Django authentication system使用Django认证系统

本文档介绍了Django身份验证系统的默认配置。 这种配置已经演变为满足最常见的项目需求,处理相当广泛的任务,并且仔细地实现了密码和权限。 对于认证需求与默认值不同的项目,Django支持大量扩展和定制认证。

Django认证一起提供认证和授权,通常被称为认证系统,因为这些功能有些耦合。

The login_required decorator
login_required
装饰器

login_required(redirect_field_name='next', login_url=None)[source]


作为一个捷径,你可以使用方便的
login_required()
装饰器:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
...


login_required()
执行以下操作:

如果用户没有登录,重定向到
settings.LOGIN_URL
,传递查询字符串中的当前绝对路径。 示例:
/ accounts /login /?next = / polls / 3 /


如果用户登录,则正常执行该视图。 视图代码可以自由地假定用户登录。

默认情况下,成功认证时用户应重定向到的路径存储在名为
“next”
的查询字符串参数中。 如果您希望为此参数使用不同的名称,
login_required()
将使用一个可选的
redirect_field_name
参数:

from django.contrib.auth.decorators import login_required

@login_required(redirect_field_name='my_redirect_field')
def my_view(request):
...


请注意,如果为
redirect_field_name
提供值,则很可能需要自定义登录模板,因为存储重定向路径的模板上下文变量将使用
redirect_field_name
的值作为其键而不是
“next”
(默认值) )。

login_required()
也使用一个可选的
login_url
参数。 例:

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def my_view(request):
...


请注意,如果您没有指定
login_url
参数,则需要确保
settings.LOGIN_URL
和您的登录视图正确关联。 例如,使用默认值,将以下行添加到
URLconf
中:

from django.contrib.auth import views as auth_views

url(r'^accounts/login/$', auth_views.login),


settings.LOGIN_URL
还接受视图函数名称和命名URL模式。 这允许您自由地重新映射您的
URLconf
中的登录视图,而无需更新设置。

注意

login_required
装饰器不会检查用户的
is_active
标志,但默认的
AUTHENTICATION_BACKENDS
会拒绝不活动的用户。

也可以看看

如果您正在为Django的管理员编写自定义视图(或需要相同的权限检查内置视图使用),您可能会发现
django.contrib.admin.views.decorators.staff_member_required()
装饰器是
login_required()
的有用替代方法。

The LoginRequired mixin

使用基于类的视图时,可以通过使用LoginRequiredMixin来实现与login_required相同的行为。 这个mixin应该在继承列表的最左边的位置。

class LoginRequiredMixin

如果视图正在使用此
mixin
,则所有未经身份验证的用户的请求将被重定向到登录页面,或者显示一个
HTTP 403 Forbidden
错误,具体取决于
raise_exception
参数。

您可以设置
AccessMixin
的任何参数来自定义未授权用户的处理:

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
login_url = '/login/'
redirect_field_name = 'redirect_to'


注意

就像
login_required
装饰器一样,此
mixin
不会检查用户的
is_active
标志,但默认的
AUTHENTICATION_BACKENDS
拒绝不活动的用户。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐