django:request.POST.get() 返回 NoneType

Posted

技术标签:

【中文标题】django:request.POST.get() 返回 NoneType【英文标题】:django: request.POST.get() returns NoneType 【发布时间】:2021-12-08 15:20:03 【问题描述】:

我是根据从 html 表单获取的数据工作的。

我目前无法在服务器端捕获数据。每个输入都在服务器上返回“NoneType”。

我觉得我尝试了所有可以在这里找到的东西,特别是在 html 表单中将 id 更改为 name,没有任何效果。

这是我目前得到的:

views.py:

def quadriatransport_simulationView(request):
  return render(request, "simulation.html")


@csrf_exempt
def compute(request):
  destination = request.POST.get("destination")
  nombre_de_palettes = request.POST.get("nombre_de_palettes")
  poids_par_palette = request.POST.get("poids_par_palette")
  Optimisation_prix = request.POST.get("Optimisation_prix")
  Optimisation_delai = request.POST.get("Optimisation_delai")
  result = "destination":destination
  print(result)
    
  return JsonResponse("operation_result": result)

results 返回一个字典,其中destinationNone

现在这是我在网页上能够做的事情

    <form method="POST">
    % csrf_token %

    <label><h3>Input variables to calculate EOQ:</h3></label>
    <br>
    <br>


    <span>Destination (departement) <input type="text" id="destination">
    <br>
    <br>
    <span>Nombre de palettes <input type="text" id="nombre_de_palettes">
    <br>
    <br>
    <span>Poids par palette <input type="text" id="poids_par_palette">
    <br>
    <br>
    <span>Optimiser prix <input type="checkbox" id="Optimisation_prix">
     <br>
     <br>
     <span>Optimiser délai de livraion <input type="checkbox" id="Optimisation_delai">
      <br>
     
    

    <input id="ajax-call" type="submit" value="Simuler">

</form>
            <p id="ajax"></p>

这是我在网页中的 js 脚本

       <script>
document.querySelector("#ajax-call").addEventListener("click", event => 
    event.preventDefault();
    let formData = new FormData();
    formData.append('destination', document.querySelector("#destination").value);
    formData.append('nombre_de_palettes', document.querySelector("#nombre_de_palettes").value);
    formData.append('poids_par_palette', document.querySelector("#poids_par_palette").value);
    formData.append('Optimisation_prix', document.querySelector("#Optimisation_prix").value);
    formData.append('Optimisation_delai', document.querySelector("#Optimisation_delai").value);
 
    let csrfTokenValue = document.querySelector('[name=csrfmiddlewaretoken]').value;
    const request = new Request('% url "compute" %', 
        method: 'POST',
        body: formData,
        headers: 'X-CSRFToken': csrfTokenValue
    );
    fetch(request)
        .then(response => response.json())
        .then(result => 
            const resultElement = document.querySelector("#ajax");
            resultElement.innerHTML = result["operation_result"];
        )
)
</script>

不确定这有什么问题,我已经成功地将相同的结构用于其他项目并且它有效。我已经为此苦苦挣扎了好几个小时,我看不清楚。希望有人能看到我在哪里搞砸了!

【问题讨论】:

【参考方案1】:

您在 formData 中拼错了目的地

formData.append('destination', document.querySelector("#destination").value);

【讨论】:

感谢您的评论,不幸的是,这不是它无法正常工作的原因 我将上面的代码复制/粘贴到一个干净的 django 项目中,它正在工作。我相信您的问题发生在您项目的其他地方。您是否有任何可能影响您的请求/响应的中间件? 我不确定,我有很多自定义中间件。我采用了一个旧脚本,将其复制粘贴并更改了设计和变量名称,并且它起作用了。好奇怪哈哈

以上是关于django:request.POST.get() 返回 NoneType的主要内容,如果未能解决你的问题,请参考以下文章

Django 无法通过request.POST.get()获取数据的问题

Django之前端基础cookie使用

django分面获取请求参数

django-视图

网页编程-Django

Django中decorators装饰器的使用