2011-06-12 151 views
0

我一直在寻找Django的Admin应用程序的代码,以确定他们如何在用户的所有视图上执行全面的身份验证检查,而不知道它是如何完成的(Django初学者在这里)。Django管理员身份验证如何工作?

例如,在Admin的sites.py中有index视图,如果用户未通过身份验证,则该视图根本不会被调用。我知道有一些预处理发生,导致login被调用,但我无法识别调用login的方法。

有没有人对Admin应用程序的请求流程有任何想法?

回答

3

以下是相关文件 - django/contrib/admin/sites.py。具体来说,查看线路170上的admin_view修饰符(这是调用login的位置)和wrap修饰符,其中后者应用于线路217上的urlpatterns的每个视图。(它类似于login_required来自django.contrib.auth作品的装饰者)。

基本上,每个视图被包裹在检查用户是否可以访问管理站点(管线147,request.user.is_active and request.user.is_staff一个装饰 - 注意,如果用户没有登录,那么request.userAnonymousUser一个实例,为此is_activeis_staff始终为False),如果不是,则显示login视图。

+0

正确 - 所以当URL被检索到时,它们会自动用'admin_view'包装,它会在实际视图被调用之前自动执行检查。谢谢! – 2011-06-12 03:32:24