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

如何通过Django URL配置获取浏览器重定向URI中的OAuth授权码

问题原因

Django的路由匹配逻辑只会匹配URL的路径部分,不会匹配?后面的查询字符串参数,你当前配置的/sales/oauth/callback路由本身是完全可以匹配/sales/oauth/callback?code=xxx这类请求的,出现匹配不到的问题优先排查以下几个常见原因:

  • 重定向URI端口和Django服务启动端口不一致:你示例中填写的重定向地址是http://localhost:3000/sales/oauth/callback,Django默认启动端口为8000,若没有特意修改端口配置,会出现端口不匹配导致404
  • 路由层级配置错误:检查当前回调路由是否放在了根路由文件,还是被嵌套在带前缀的子路由中,路径要和重定向URI的路径完全对应
  • 末尾斜杠问题:Django默认开启APPEND_SLASH配置,如果你的重定向URI路径末尾带斜杠(/sales/oauth/callback/)但路由配置没加,也会触发302跳转导致匹配异常,建议路由配置和重定向URI的路径格式保持完全一致

正确获取授权码的实现

路由配置(不需要额外修改,保持现有配置即可)

urlpatterns = [
    path(
        "sales/oauth/callback",
        OAuthCallbackView.as_view(),
        name="OAuthCallbackView",
    ),
]

视图层优化实现

不要直接用request.GET["code"]的方式取值,OAuth授权失败时平台只会返回error参数不会返回code,直接索引会抛出KeyError异常,建议做容错处理:

class OAuthCallbackView(APIView):
    def get(self, request):
        # 安全获取授权码
        access_code = request.GET.get("code")
        if not access_code:
            # 处理授权失败的逻辑,比如获取错误信息返回提示
            error_msg = request.GET.get("error", "授权过程异常")
            return Response({"error": error_msg}, status=400)
        # 后续拿code换access_token的逻辑
        # ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:15:01