调用Questions应用API时Django返回302重定向至登录页问题
解决API重定向至登录页面的问题
问题原因分析
- 权限配置缺失:
TagsView继承自APIView但未显式设置权限类,REST Framework默认权限为IsAuthenticated,未认证请求会被拦截,触发Django的登录重定向逻辑。 - 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
相关产品推荐
相关产品推荐

