我正在尝试制作中间件,根据子域等改变用户的某些字段......
唯一的问题是request.user总是在中间件中作为AnonymousUser提供,但是在视图中是正确的用户.我已经离开了django在设置中使用的默认身份验证和会话中间件.
这里有一个类似的问题:Django,request.user总是匿名用户 但是没有过度回答整个问题,因为我没有使用不同的身份验证方法,并且在调用我自己的中间件之前djangos身份验证正在运行.
有没有办法在使用DRF时获取中间件中的request.user?我将在这里展示一些示例代码:
class SampleMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
#This will be AnonymousUser. I need it to be the actual user making the request.
print (request.user)
def process_response(self, request, response):
return response
Run Code Online (Sandbox Code Playgroud)
使用process_request:
class SampleMiddleware(object):
def process_request(self, request):
#This will be AnonymousUser. I need it to be the actual user making the request.
print (request.user)
def process_response(self, request, response):
return response
Run Code Online (Sandbox Code Playgroud) 我在转义字符和 json.dumps 方面遇到了一些问题。
每当调用 json.dumps 时,似乎都会添加额外的转义字符。例子:
not_encoded = {'data': '''!"#$%'()*+,-/:;=?@[\]^_`{|}~0000&<>'''}
print(not_encoded)
{'data': '!"#$%\'()*+,-/:;=?@[\\]^_`{|}~0000&<>'}
Run Code Online (Sandbox Code Playgroud)
这很好,但是当我进行 json 转储时,它会添加很多额外的值。
json.dumps(not_encoded)
'{"data": "!\\"#$%\'()*+,-/:;=?@[\\\\]^_`{|}~0000&<>"}'
Run Code Online (Sandbox Code Playgroud)
转储不应该是这个样子。它是双重转义 \ 和 "。任何人都知道这是为什么以及如何修复它?我希望 json.dumps 输出
'{"data": "!\"#$%'()*+,-/:;=?@[\\]^_`{|}~0000&<>"}'
Run Code Online (Sandbox Code Playgroud)
编辑
加载回转储中:
the_dump = json.dumps(not_encoded)
json.loads(the_dump)
{u'data': u'!"#$%\'()*+,-/:;=?@[\\]^_`{|}~0000&<>'}
Run Code Online (Sandbox Code Playgroud)
问题是我正在访问一个需要这些特殊字符的 API 端点,但当 json.dumps 添加额外的转义字符 (\\\\
和\\"
) 时,它会超出字符限制。