我一直在查看Django管理员应用程序的代码,以确定他们如何对用户的所有视图执行全面认证检查,而不知道它是如何完成的(Django初学者)。
例如,在管理员sites.py
中,如果未对用户进行身份验证,则会显示index
视图。我知道有一些预处理会导致login
被调用,但我无法确定调用login
的方法。
有人对管理员应用的请求流程有任何想法吗?
答案 0 :(得分:4)
以下是相关文件 - django/contrib/admin/sites.py。特别是,请查看第170行的admin_view
装饰器(这是调用login
的位置)和第211行的wrap
装饰器,后者应用于每个视图第217行urlpatterns
。(与login_required
的{{1}}装饰者的工作原理类似)。
基本上,每个视图都包含在一个装饰器中,用于检查用户是否可以访问管理站点(第147行,django.contrib.auth
- 请注意,如果用户未登录,则request.user.is_active and request.user.is_staff
为request.user
的实例,AnonymousUser
和is_active
始终为is_staff
),如果没有,则显示False
视图。