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

扩展Django User模型引发HTTP 400错误,求排查方案

排查HTTP 400错误的原因

先看你视图里的这段核心代码:

u_id = request.user.authenticationkey
url = "http://example.com/api/past24hrdialoguebyid/" + str(u_id) + "/?format=json"

这里的问题非常明显:request.user.authenticationkey获取到的是整个AuthenticationKey模型实例,而不是你需要的authentication_key字段值。当你用str(u_id)把它转成字符串时,得到的会是类似<AuthenticationKey object (1)>这样的内容——把这种格式的字符串拼到URL里,会导致请求的URL完全不符合后端API的预期,服务器自然会返回HTTP 400(Bad Request)错误。

修复方案

把获取字段的代码改成直接取authentication_key属性,同时建议用f-string拼接URL(比字符串相加更清晰易读):

# 直接提取具体的authentication_key字段值
u_key = request.user.authenticationkey.authentication_key
# 用f-string拼接URL,避免格式错误
url = f"http://example.com/api/past24hrdialoguebyid/{u_key}/?format=json"

其他需要排查的补充点

  1. AuthenticationKey实例是否存在:
    因为你用的是OneToOneField,如果某个登录用户没有对应的AuthenticationKey记录,访问request.user.authenticationkey会抛出AuthenticationKey.DoesNotExist异常。如果你的项目有全局异常捕获把这类错误转成了400,也需要注意。可以加个判断确保实例存在:

    from django.shortcuts import get_object_or_404
    
    @login_required(login_url='/login/')
    def home_page(request):
        # 若没有对应记录,直接返回404,更符合语义
        auth_key_obj = get_object_or_404(AuthenticationKey, user=request.user)
        u_key = auth_key_obj.authentication_key
        # 后续代码...
    
  2. 验证拼接后的URL格式:
    修复后可以临时打印一下最终生成的URL,确认它是符合API要求的格式(比如http://example.com/api/past24hrdialoguebyid/abc123/?format=json),而不是带对象字符串的错误格式。

  3. 检查API请求的其他细节:
    虽然目前看核心问题是URL里的参数错误,但也可以快速确认下请求是否有其他不符合要求的参数或请求头——不过从你的代码来看,这个可能性比较低。

内容的提问来源于stack exchange,提问作者hackerman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:46:28