为啥“发布”方法在我的 django 应用程序中不起作用?

Posted

技术标签:

【中文标题】为啥“发布”方法在我的 django 应用程序中不起作用?【英文标题】:Why the 'post' method is not working in my django app?为什么“发布”方法在我的 django 应用程序中不起作用? 【发布时间】:2021-04-03 01:48:38 【问题描述】:

我正在使用 Django 开发博客,当我想获取联系信息时,发布请求似乎根本不起作用。在联系人视图中,我并没有做太多事情,我只是想确保发布请求正常工作,但它返回一个 Get 请求,并且 get 方法工作得非常好javascript 文件

  //CONTACT FORM
$('#contactform').submit(function()
  var action = $(this).attr('action');
  $("#message").slideUp(750,function() 
  $('#message').hide();
  $('#submit').attr('disabled','disabled');
  $.post(action, 
    name: $('#name').val(),
    email: $('#email').val(),
    comments: $('#comments').val()
  ,
    function(data)
      document.getElementById('message').innerhtml = data;
      $('#message').slideDown('slow');
      $('#submit').removeAttr('disabled');
      if(data.match('success') != null) $('#contactform').slideUp('slow');
      $(window).trigger('resize');
    
  );
  );
  return false;
);

view.py

from django.http.response import HttpResponse
from contact.forms import ContactForm
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
# Create your views here.
def contacts(request):
if request.method == "POST" and request.is_ajax:
    print('hello!!')
    
    return render(request, 'contact/contact.html')

forms.py

from django import forms
from .models import Contact
class ContactForm(forms.Form):
     class Meta:
         model = Contact
         fields = ['cont_name', 'cont_email', 'cont_message', 'cont_date']

models.py

from django.db import models
from datetime import datetime

class Contact(models.Model):
    cont_name = models.CharField( max_length = 10)
    cont_email = models.EmailField()
    cont_message = models.TextField(blank=False)
    cont_date = models.DateTimeField(default=datetime.now, blank=True)

    def __str__(self):
        return self.cont_name

contact.html

 <div class="container">
      <div class="row">
          <div class="col-md-6">
              <p class="lead">Sold old ten are quit lose deal his sent. You correct how sex several far distant believe journey parties. We shyness enquire uncivil affixed it carried to. </p>
              <p>End sitting shewing who saw besides son musical adapted. Contrasted interested eat alteration pianoforte sympathize was. He families believed if no elegance interest surprise an. It abode wrong miles an so delay plate.</p>
              
          </div>

          <div class="col-md-6">
              <div id="message"></div>
              <form method="post" action="% url 'contacts' %" id="ContactForm" class="main-contact-form wow">
                  % csrf_token %
                  <input type="text" class="form-control col-md-4" name="name" placeholder="Your Name *" id="name" required data-validation-required-message="Please enter your name." />
                  <input type="text" class="form-control col-md-4" name="email" placeholder="Your Email *" id="email" required data-validation-required-message="Please enter your email address." />
                  <textarea name="comments" class="form-control" id="comments" placeholder="Your Message *" required data-validation-required-message="Please enter a message."></textarea>
                  <input class="btn btn-primary btn-theme" type="button" name="submit" value="Submit" />
              </form>
          </div>
      </div>
  </div>

urls.py

from django.urls import path, reverse
from . import views

urlpatterns = [
     path('', views.contacts, name= 'contacts'),

]

【问题讨论】:

欢迎来到 Stack Overflow。具体来说,“似乎根本不起作用”是什么意思?你得到什么 HTTP 代码?它是否带有错误消息?您在日志中看到了什么?请阅读How to Ask。 【参考方案1】:

您的问题含糊不清,但您似乎想在 django 中使用 ajax 发布请求。 你可以试试这个:

$('#contactform').submit(function()
  var action = $(this).attr('action');
  
  var name = $("#name").val()
  var email = $("email").val()
  var formData = 
    name: name,
    email: email
  
  $.ajax(
    type: "POST",
    data: formData,
    url:action,
    beforeSend: function (data) 

    ,
    success: function (data) 
        if (data)
            console.log("Working")
        
    ,
    error: function (data) 
     console.log("Not working")
   

  )
  )

看看这是否有效。

【讨论】:

谢谢!我使用了您给我的代码,但发布请求仍然不起作用,而是提供了一个获取请求:[25/Dec/2020 12:26:33] "GET /contact/ HTTP/1.1" 200 9322 [25/ Dec/2020 12:29:10] "GET /contact/ HTTP/1.1" 200 9322 通常在这种情况下,根据我的观点,它应该写 hello 和 post 请求而不是 Get 我仍然无法弄清楚跨度> 我看到了您的 url 模式...从我得到的信息中,每当您访问主页时说 localhost:8000 这个联系人 URL 与您正确处理的 get 请求一起命中...我的意思是只有当它是一个发布请求时,然后在提交函数内的 js 文件中记录一些内容,然后查看在提交表单时是否在控制台上打印了任何内容。 如果所有这些都检查正确然后尝试切换发布请求以获取请求,然后在视图中查看 request.method == POST 和 request.is_ajax。这件事将确保 Ajax 请求是否有效,仅用于发布请求,我从您的问题中很清楚。您可以做的最后一件事是 Django 提供了一个 sn-p,您在使用 Ajax 发出卡请求时必须插入它。如果您还没有这样做,请尝试插入 sn-p 并运行代码。 我不确定我是否明白你所说的,因为老实说,我使用了一个 Bootstrap 模板,我对 javascript 方面一无所知。原始模板有 php 文件来处理模板中的研究和联系部分,首先当我没有接触 JS 代码时,运行代码会发布一个不存在的 PHP 文件,然后当我运行你建议的代码时它会返回只是一个获取而不是一个帖子

以上是关于为啥“发布”方法在我的 django 应用程序中不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 logcat 在我的 Android 中不显示任何内容?

为啥 jQuery 在我的 rails 5 应用程序中不起作用?

为啥我的 favicon 在我的下一个 js 应用程序中不起作用?

为啥“禁用:”顺风前缀在我的反应应用程序中不起作用?

为啥 FileSearch 元素的 MinVersion 属性在我的 WiX 安装程序中不起作用?

为啥 JL 命令在我的汇编代码中不起作用?