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

调用Questions应用API时Django返回302重定向至登录页问题

解决API重定向至登录页面的问题

问题原因分析

  1. 权限配置缺失:TagsView继承自APIView但未显式设置权限类,REST Framework默认权限为IsAuthenticated,未认证请求会被拦截,触发Django的登录重定向逻辑。
  2. URL路径配置错误:Django的path()函数参数不应以斜杠开头,当前基础应用和questions应用的URL配置存在开头斜杠,导致URL解析异常,无法正确匹配API视图。

解决方案

1. 为API视图添加匿名访问权限

修改TagsView代码,添加允许未认证用户访问的权限类:

from rest_framework.permissions import AllowAny

class TagsView(APIView):
    permission_classes = [AllowAny]  # 新增权限配置
    
    def get(self,request):
        print("HI", flush=True)
        tags = Tag.objects.all()[:10]  # 获取前10个标签
        serializer = TagSerializer(tags, many=True)
        return Response(serializer.data)

2. 修复URL路径配置

基础应用urls.py:

移除路径开头的斜杠,修正后代码:

urlpatterns = [
    path('jet/', include('jet.urls', 'jet')), 
    path('', admin.site.urls),
    path('api/questions/', include('question.urls')),  # 移除开头斜杠
    path('user_auth/', include('user_auth.urls'))
]

questions应用urls.py:

移除tags-list路径开头的斜杠,修正后代码:

urlpatterns = [
    path('tags-list/', TagsView.as_view(), name='tags-list' ),  # 移除开头斜杠
    path('match-tags/', MatchTags.as_view(), name='matching-tags'),
    path('presigned-urls/', PresignedURL.as_view(), name='presigned_url'),
    path('question-submission/', QuestionSubmission.as_view(), name='question-submission')
]

3. 可选:完善CORS配置(若存在跨域问题)

如果React应用和Django服务不在同一域名下,需在settings.py中配置允许的访问源:

# 开发环境可临时允许所有源(生产环境建议指定具体域名)
CORS_ALLOW_ALL_ORIGINS = True

# 生产环境示例:指定允许的React域名
# CORS_ALLOWED_ORIGINS = [
#     "http://localhost:3000",
#     "http://your-react-app-domain.com",
# ]

验证修改

重启Django服务后,从React应用重新调用/api/questions/tags-list/,应能正常返回标签数据,不再触发登录重定向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 00:20:34