小编Jor*_*dan的帖子

使用request.user的Django和Middleware总是匿名的

我正在尝试制作中间件,根据子域等改变用户的某些字段......

唯一的问题是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)

python django django-rest-framework

29
推荐指数
5
解决办法
2万
查看次数

json 转储转义字符

我在转义字符和 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 添加额外的转义字符 (\\\\\\") 时,它会超出字符限制。

python json python-2.7

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

django ×1

django-rest-framework ×1

json ×1

python-2.7 ×1