Werkzeug 3.0中如何对MultiDict进行URL编码?
在Werkzeug 3.0中对MultiDict进行URL编码的正确方式
Werkzeug 3.0移除了原有的url_encode方法,直接使用urllib.parse.urlencode处理MultiDict时,会丢失多值键的后续值(比如示例中本该生成a=1&a=2,结果只输出a=1)。这里提供两种可行的解决方法:
方法一:利用MultiDict的lists()方法配合doseq=True
MultiDict.lists()会将每个键对应的所有值整理为列表,再通过urlencode的doseq=True参数,把列表中的每个值生成为独立的键值对:
from werkzeug.datastructures import MultiDict from urllib.parse import urlencode d = MultiDict([('a', '1'), ('a', '2')]) encoded_str = urlencode(d.lists(), doseq=True) print(encoded_str) # 输出: a=1&a=2
方法二:直接遍历MultiDict的所有键值对
MultiDict.items()会返回包含所有重复键的键值对迭代器,将其转换为列表后传给urlencode即可:
from werkzeug.datastructures import MultiDict from urllib.parse import urlencode d = MultiDict([('a', '1'), ('a', '2')]) encoded_str = urlencode(list(d.items())) print(encoded_str) # 输出: a=1&a=2
两种方法都能生成符合x-www-form-urlencoded格式的字符串,与原Werkzeug url_encode的行为一致。
内容的提问来源于stack exchange,提问作者neurino
相关产品推荐
相关产品推荐

