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

时间:2010-05-11 07:15:38

标签: python django authentication

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

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

6 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

我开始认为中间件可能是检查request.user类的最简单的解决方案,然后AnonymousUser会将其替换为具有额外属性的子类AnonymousUser。

听起来合理吗?

答案 2 :(得分:2)

最好的方法是使用python包(或编写自己的包),它将Django默认的AnonymousUser类与您自己的类交换。你可以为此实现一个中间件(我认为它是最好的地方)。

例如,您可以使用django-custom-anonymous来提供AnonymousUser的自定义。您也可以在pypi上找到它。

答案 3 :(得分:1)

更简单,更通用(但不太安全)的解决方案是将function inputChange(event){ var filename = event.target.value; var btn = document.getElementById('button'); btn.setAttribute('download', filename); } 替换为您自己的类:

django.contrib.auth.models.AnonymousUser

从1.10.5开始,Django懒惰地导入了匿名用户类,因此你不会遇到核心Django的问题。您也很少直接与class YourAnonymousUser(...): ... import django.contrib.auth.models as django_auth_models django_auth_models.AnonymousUser = YourAnonymousUser 进行互动,因为您可以使用AnonymousUser,因此只要您知道依赖关系如何使用.is_anonymous(),就应该没问题。

答案 4 :(得分:0)

您应该子类化或创建与AnonymousUser class具有一对一关系的模型。

答案 5 :(得分:0)

您可能可以使用django-rest-framework,它允许您在类似这样的设置中通过UNAUTHENTICATED_USER自定义AnonymousUser

REST_FRAMEWORK = {
    'UNAUTHENTICATED_USER': 'application.AnonymousUser',
}

请记住,只能从DRF views

获得此用户类。