gpt4 book ai didi

python - 使用 View 装饰器更新 request.POST 或 request.GET

转载 作者:太空狗 更新时间:2023-10-29 21:32:21 24 4
gpt4 key购买 nike

我尝试将我在模板和 js 中使用的代码转换为包装函数正在使用的 content_type 和 object_id:

def translate_modelcode(function=None,redirect_field_name=None):
"""
translate an item-code specified in settings to a content_type
and the item-id to the object_id
"""

def _decorator(function):
def _wrapped_view(request, *args, **kwargs):

item_code=request.REQUEST.get('item-code',None)
if item_code:
object_id = request.REQUEST.get('item-id',None)
# resolve_modelcode get's the models name from settings
content_type = resolve_modelcode(item_code)
ud_dict = {'content_type':content_type,
'object_id':object_id}
if request.method == 'GET':
request.GET.update(ud_dict)
else:
request.POST.update(ud_dict)


return function(request, *args, **kwargs)
return _wrapped_view

if function is None:
return _decorator
else:
return _decorator(function)

我卡住的地方是 request.POST/request.GET QueryDict 的更新。 Django 将这些指令报告为不可变的。我该如何更新它们?

来自djangodocs我认为 .update 会使用那里描述的“最后值逻辑”,我会非常满意。但这并没有发生。创建副本并将其重新分配给 request.GET 似乎也不起作用:

request.GET = request.GET.copy().update(ud_dict)

a somewhat similar question关于这个话题,但是从来没有得到令人满意的答案。使用与该问题相同的代码,我在更新后得到 request.POST 或 request.GET 的空返回值:

request._get = request.GET.copy()
import ipdb;ipdb.set_trace()

ipdb> request.GET
ipdb>

那我该怎么办呢?

最佳答案

update(...) 方法没有返回值,它就地更新它的实例。所以你应该写 request.GET = request.GET.copy().update(ud_dict)

request.GET = request.GET.copy()
request.GET.update(ud_dict)

关于python - 使用 View 装饰器更新 request.POST 或 request.GET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com