How do I integrate Ajax with Django applications?

前端 未结 8 524
忘了有多久
忘了有多久 2020-11-22 06:16

I am new to Django and pretty new to Ajax. I am working on a project where I need to integrate the two. I believe that I understand the principles behind them both, but have

8条回答
  •  攒了一身酷
    2020-11-22 06:40

    AJAX is the best way to do asynchronous tasks. Making asynchronous calls is something common in use in any website building. We will take a short example to learn how we can implement AJAX in Django. We need to use jQuery so as to write less javascript.

    This is Contact example, which is the simplest example, I am using to explain the basics of AJAX and its implementation in Django. We will be making POST request in this example. I am following one of the example of this post: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django

    models.py

    Let's first create the model of Contact, having basic details.

    from django.db import models
    
    class Contact(models.Model):
        name = models.CharField(max_length = 100)
        email = models.EmailField()
        message = models.TextField()
        timestamp = models.DateTimeField(auto_now_add = True)
    
        def __str__(self):
            return self.name
    

    forms.py

    Create the form for the above model.

    from django import forms
    from .models import Contact
    
    class ContactForm(forms.ModelForm):
        class Meta:
            model = Contact
            exclude = ["timestamp", ]
    

    views.py

    The views look similar to the basic function-based create view, but instead of returning with render, we are using JsonResponse response.

    from django.http import JsonResponse
    from .forms import ContactForm
    
    def postContact(request):
        if request.method == "POST" and request.is_ajax():
            form = ContactForm(request.POST)
            form.save()
            return JsonResponse({"success":True}, status=200)
        return JsonResponse({"success":False}, status=400)
    

    urls.py

    Let's create the route of the above view.

    from django.contrib import admin
    from django.urls import path
    from app_1 import views as app1
    
    urlpatterns = [
        path('ajax/contact', app1.postContact, name ='contact_submit'),
    ]
    

    template

    Moving to frontend section, render the form which was created above enclosing form tag along with csrf_token and submit button. Note that we have included the jquery library.

    {% csrf_token %} {{ contactForm.as_p }}

    Javascript

    Let's now talk about javascript part, on the form submit we are making ajax request of type POST, taking the form data and sending to the server side.

    $("#contactForm").submit(function(e){
        // prevent from normal form behaviour
            e.preventDefault();
            // serialize the form data  
            var serializedData = $(this).serialize();
            $.ajax({
                type : 'POST',
                url :  "{% url 'contact_submit' %}",
                data : serializedData,
                success : function(response){
                //reset the form after successful submit
                    $("#contactForm")[0].reset(); 
                },
                error : function(response){
                    console.log(response)
                }
            });
       });
    
    

    This is just a basic example to get started with AJAX with django, if you want to get dive with several more examples, you can go through this article: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django

提交回复
热议问题