You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:05:22