AJAXは非同期タスクを実行する最良の方法です。非同期呼び出しを行うことは、どのWebサイト構築でも一般的に使用されています。DjangoにAJAXを実装する方法を学ぶために短い例をとります。JavaScriptを少なくするために、jQueryを使用する必要があります。
これは最も簡単な例であるContactの例です。AJAXの基本とDjangoでの実装の説明に使用しています。この例ではPOSTリクエストを作成します。私はこの投稿の例の1つに従っています:https : //djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
models.py
まず、基本的な詳細を備えた連絡先のモデルを作成しましょう。
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
上記のモデルのフォームを作成します。
from django import forms
from .models import Contact
class ContactForm(forms.ModelForm):
class Meta:
model = Contact
exclude = ["timestamp", ]
views.py
ビューは基本的な関数ベースの作成ビューに似ていますが、レンダリングで戻る代わりに、JsonResponse応答を使用しています。
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
上のビューのルートを作成してみましょう。
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'),
]
テンプレート
フロントエンドセクションに移動して、csrf_tokenおよび送信ボタンとともに、囲みフォームタグの上に作成されたフォームをレンダリングします。jqueryライブラリーが含まれていることに注意してください。
<form id = "contactForm" method= "POST">{% csrf_token %}
{{ contactForm.as_p }}
<input type="submit" name="contact-submit" class="btn btn-primary" />
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
JavaScript
次に、JavaScriptパーツについて説明します。フォーム送信では、タイプPOSTのajaxリクエストを作成し、フォームデータを取得してサーバー側に送信します。
$("#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)
}
});
});
これは、djangoを使用してAJAXを開始するための基本的な例にすぎません。さらにいくつかの例を使ってダイビングをしたい場合は、この記事にアクセスしてください:https : //djangopy.org/learn/step-up-guide-to- implement-ajax-in-django