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

使用@login_required时Django的getFields视图返回302状态码问题

问题原因及解决办法

核心问题:前端请求的关键参数拼写错误

你前端fetch代码里的credentails是拼写错误,正确写法是credentials。这个参数的作用是让浏览器在请求时携带登录状态对应的Session Cookie,拼写错误导致浏览器没把Sessionid传给后端,Django的@login_required装饰器自然检测不到用户已登录。

其他需要修正的问题

  1. GET请求解析request.body不合理:你的视图里写了POST = json.loads(request.body),但GET请求本身没有请求体,这行代码不仅没用,还可能抛出异常(比如当request.body为空时),建议直接删除。
  2. Content-Type头拼写错误:请求头里的application-json应该写成application/json,虽然这不会直接影响登录验证,但规范的写法能避免其他潜在问题。

修正后的代码示例

前端代码:

try{
    const response = await fetch(`http://127.0.0.1:8000/getFields`,{
        method:'GET',
        headers:{
            'Content-Type': 'application/json',
            'X-CSRFToken': Cookies.get('csrftoken'),
        },
        credentials: 'include' // 修正拼写错误
    })
    // 补充后续的响应处理逻辑
} catch(error) {
    console.error('请求失败:', error)
}

后端视图代码(优化冗余部分):

@login_required   
def getFields(request):
    try:
        fields = Field.objects.all()
        # 用列表推导式简化代码
        field_list = [field.to_dict() for field in fields]
        print(field_list)
        return JsonResponse({
            'status': 200,
            'fields': field_list
        })
    except ObjectDoesNotExist:
        return JsonResponse({
            'status': 404
        })     

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:35:03