基于 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拒绝不活动的用户。
相关文章推荐
- 基于 Django1.10 文档的深入学习(18)—— Using the Django authentication system 之 LoginRequiredMixin
- 基于 Django1.10 文档的深入学习(20)—— Using the Django authentication system 之 login()
- 基于 Django1.10 文档的深入学习(34)—— Customizing authentication in Django 之 基础
- 基于 Django1.10 文档的深入学习(32)—— The Django admin site 之 基础
- 基于 Django1.10 文档的深入学习(16)——Authentication backends 之 class ModelBackend
- 基于 Django1.10 文档的深入学习(21)——The Forms API 之 Form.errors
- 基于 Django1.10 文档的深入学习(7)—— Configuring applications
- 基于 Django1.10 文档的深入学习(19)——Working with forms
- 基于 Django1.10 文档的深入学习(14)—— Request and response objects 之 HttpResponse objects
- 基于 Django1.10 文档的深入学习(15)——django.contrib.auth.hashers
- 基于 Django1.10 文档的深入学习(12)—— django.shortcuts 之 redirect()
- 基于 Django1.10 文档的深入学习(2)—— Settings.py 之 STATIC_*
- 基于 Django1.10 文档的深入学习(6)—— Translation 之 short_description
- 基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
- 基于 Django1.10 文档的深入学习(9)—— Extra instance methods 之 get_FOO_display()
- 基于 Django1.10 文档的深入学习(13)—— django.core.urlresolvers 之 reverse()
- 基于 Django1.10 文档的深入学习(5)—— Making queries 之 FOO_set
- 基于 Django1.10 文档的深入学习(24)—— Form and field validation 之 cleaned_data
- 基于 Django1.10 文档的深入学习(17)——Customizing authentication 之 Custom users and permissions
- 基于 Django1.10 文档的深入学习(23)—— QuerySet API reference 之 icontains