我想让我的User对象都具有相同的基本行为,为此我需要向匿名用户添加几个方法/属性。
我已经将User子类化为更丰富的用户对象,但我想知道是否有人对匿名用户做了同样的事情?如果有任何首选的方式!
答案 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
获得此用户类。