首页 > 解决方案 > 为什么“发布”方法在我的 django 应用程序中不起作用?

问题描述

我正在使用 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;
});

视图.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')

表格.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']

模型.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

联系人.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>

网址.py

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

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

]

标签: javascriptpythonhtmldjangoajax

解决方案


您的问题含糊不清,但似乎您想在 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")
   }

  })
  })

看看这是否有效。


推荐阅读