本文档介绍了Django身份验证系统的默认配置。 这种配置已经演变为满足最常见的项目需求,处理相当广泛的任务,并且仔细地实现了密码和权限。 对于认证需求与默认值不同的项目,Django支持大量扩展和定制认证。
Django认证一起提供认证和授权,通常被称为认证系统,因为这些功能有些耦合。
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()
的有用替代方法。
使用基于类的视图时,可以通过使用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
拒绝不活动的用户。