AJAX (Asynchronous JavaScript and XML) は、Web ページの一部を更新する機能を提供する技術です。これは、Web ページ全体を再読み込みせずに、Web ページの一部を更新できることを意味します。これは、Webアプリケーションをより速く、よりダイナミックにすることができる優れたリソースです。別のフレームワークを選択することもできますし、JavaScriptだけを使用して実装することもできます。
このチュートリアルでは、ユーザ名検証ツールを作成するために、Django でどのように AJAX リクエストとレスポンスを処理できるかを探ります。シンプルにするために、関数ベースのビューと jQuery を使用する予定です。
$ django-admin startproject exampleajax
After creating a project you need to create a app:
$cd exampleajax
$python manage.py start ajaxpost
Class Account (models.Model):
username=models.Charfield (max_length=100)
email=models.EmailField (max_length=100)
password=models.Charfield (max_length≒100)
Def __str__(self):
Return str(self.username)
モデル作成後、マイグレーションを行うadmin.pyでモデルの登録と使用
$python manage.py makemigrations
$python manage.py migrate
from django.contrib import admin
from .models import *
admin.site.register(Account)
@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
list_display = ('username', 'email')
from django.urls import path
from .import views
urlspatterns=[
path('',views.index,name="index"),
]
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
Return render(request,’index.html’)
<form id=”ajax-form” method=”POST”>
{%csrf_token%}
<input type="text" class="form-control" name="username" id="username" placeholder="username"/>
<input type="email" class="form-control" name="email" id="email" placeholder="email"/>
<input type="password" class="form-control" name="password" id="password" placeholder="password"/>
<button type="submit" id="saveBtn" class="btn btn-primary">save</button>
</form>
6.AJAXリクエストの作成:
ユーザー名がすでに使われているかどうかをチェックするためのAJAXリクエスト . usernameフィールドのidを使用し、そのchangeイベントに対するリスナーを追加します。
イベントが正しく発生すること、そしてリスナーを正しく設定したことを確認してください。ここでは、AJAX POST メソッドを使用して、ビューにリクエストを送信します。
POST リクエストの作成
//get the user input id
$("#username").change(function () {
var username = $(this).val();
});
$.ajax({
url: 'validate',
method: 'POST',
data: {
'username': username
},
headers: {"XCSRFToken":document.querySelector('[name=csrfmiddlewaretoken]').value,
}
dataType: 'json',
success: function (data) {
if (data.taken) {
alert("Username has already taken");
}
}
});
});
では、urls.pyとviews.pyにそれぞれのURLとメソッドを追加してみましょう。
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.index,name="index"),
path('example',views.example,name="example"),
]
views.py
from django.contrib.auth.models import User
def example(request):
username = request.POST['username']
data = {
'taken': User.objects.filter(username__iexact=username).exists()
}
return JsonResponse(data)
関連記事