Django REST Framework日期时间参数'+'符号丢失问题解决
解决Django REST Framework中GET参数+号被替换为空格的问题
问题原因
HTTP协议规范中,Query参数里的+会被默认解析为空格,Django的request.GET遵循这一规范,自动将+解码为空格,导致时区偏移符号丢失。
解决方案
直接读取并解析原始的查询字符串,绕过Django默认的解码逻辑:
import urllib.parse from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated @api_view(["GET"]) @permission_classes([IsAuthenticated]) def test_endpoint(request): # 获取未经过Django解码的原始查询字符串 raw_query = request.META['QUERY_STRING'] # 解析时保留+号,不替换为空格 parsed_params = urllib.parse.parse_qs(raw_query) # 此时参数会保留原始的+号格式 print(parsed_params.get('start')) # 输出: ['1969-12-31T19:00:00+05:00'] print(parsed_params.get('end')) # 输出: ['2023-01-16T21:22:52-05:00']
说明
urllib.parse.parse_qs默认使用unquote函数解码参数值,不会将+替换为空格,正好匹配需求。如果需要单个值而非列表,可直接取列表第一个元素,比如parsed_params.get('start', [''])[0]。
内容的提问来源于stack exchange,提问作者user3533755
相关产品推荐
相关产品推荐

