什么是在Django中扩展匿名用户的最佳方式?

Ros*_*oss 12 python authentication django

我想让我的User对象都具有相同的基本行为,为此我需要向Anonymous User添加几个方法/属性.

我已经将User子类化为更丰富的用户对象,但我想知道是否有人对匿名用户做了同样的事情?如果有任何首选方式!

Dan*_*man 10

你的中间件建议让我思考,我现在认为最好的想法是覆盖标准AuthenticationMiddleware.该类为LazyUser请求分配一个对象,该对象在被访问时通过调用解析给正确的用户contrib.auth.get_user.这可能是覆盖事物的正确位置,因此它会调用get_user返回子类的自定义函数AnonymousUser.

  • 为丹尼尔的工作加油!这是繁荣的副本:[custom auth backend](http://gist.github.com/397817) (2认同)

Ble*_*der 5

一个更简单、更通用(但不太安全)的解决方案是django.contrib.auth.models.AnonymousUser用你自己的类替换:

class YourAnonymousUser(...):
    ...


import django.contrib.auth.models as django_auth_models
django_auth_models.AnonymousUser = YourAnonymousUser
Run Code Online (Sandbox Code Playgroud)

从 1.10.5 开始,Django 延迟导入匿名用户类,因此您不会遇到核心 Django 的问题。您也很少AnonymousUser直接与之交互,因为您可以直接使用.is_anonymous(),所以只要您知道您的依赖项如何使用AnonymousUser.