با عرض سلام و وقت بخیر خدمت کاربران محترم سایت ویرگول، در این مقاله آموزشی که چکیده آموزش جنگو از سایت Django documentation بهمراه مطالب تکمیلی تر , سعی شده یک آموزش کاربردی و پروژه محور از جنگو ارایه گردد.ایده این سری مقاله های آموزشی از این موضوع سرچشمه می گیرد که بخشی از خوانندگان وجود دارد که به محتوای نوشتاری آنلاین بهتر پاسخ می دهند و ترجیج می دهند مهارت های جدید را به سرعت از طریق خواندن افزایش دهند.این سری آموزش ها با ارایه اولین پکیج آموزشی در خصوص جنگو آغاز می شود که انتظار می رود با واکنش مثبت کاربران همراه شود.
توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل میشود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا میکنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم. با کمال تشکر جواد جهانگیری
شماره تلفن همراه: 09149431772
نشانی پست الکترونیکی: javad.jahangiri.niopdc@gmail.com
فیلمهای آموزشی در آپارات:جواد جهانگیری (CTO) - آپارات
فیلم آموزشی در یوتویب: javad jahangiri - YouTube
نسخه مقاله: ۱.۱ - تاریخ بروزرسانی: 1401/02/01
برای دیدن فیلم اموزشی مربوطه به کانال آپاراتی بنده به ادرس جواد جهانگیری (CTO) - آپارات مراجعه نمایید
سورس این پروژه بر روی github بنده در ادرس زیر موجود می باشد
https://github.com/javadjahangiriniopdc/SimpleDjangoCrudAjax
Basic Configuration
در این آموزش قصد داریم از JQuery برای پیاده سازی درخواست های Ajax استفاده کنیم. JQuery ساده و آسان برای یادگیری است.
base.html
{% load static %} <!doctype html> <html> <head> <meta charset="utf-8"> <title>{% block title %}Title{% endblock title %}</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> {% block stylesheet %}{% endblock stylesheet %} </head> <body> <main> {% block content %} {% endblock content %} </main> <script src="https://code.jquery.com/jquery-3.1.0.min.js"> <script > {% block javascript %} {% endblock javascript%} </body> </html>
من همچنین از Bootstrap برای یک رابط کاربری زیبا استفاده می کنم. برای JQuery و Bootstrap، ما از CDN استفاده می کنیم.
Example – Django Ajax CRUD Operations
اکنون زمان آن است که با Ajax Calls همراه شوید.
Create and Read User Django Ajax
ما از هیچ forms.py استفاده نخواهیم کرد، ما فرم HTML را مستقیماً در قالب داریم. همانطور که در فایل crud.html ما مشاهده می کنید.
اگر می خواهید جنگو فرم شما را بسازد، می توانید از فرم های crispy forms استفاده کنید.
بیایید یک نمای برای رسیدگی به درخواست Ajax ایجاد کنیم.
# Views.py from .models import CrudUser from django.views.generic import View from django.http import JsonResponse class CreateCrudUser(View): def get(self, request): name1 = request.GET.get('name', None) address1 = request.GET.get('address', None) age1 = request.GET.get('age', None) obj = CrudUser.objects.create( name = name1, address = address1, age = age1 ) user = {'id':obj.id,'name':obj.name,'address':obj.address,'age':obj.age} data = { 'user': user } return JsonResponse(data)
توجه - ما قالب را رندر نمی کنیم، فقط JsonResponse را برمی گردانیم و همچنین از روش Ajax Get استفاده می کنیم.
ما دادههای فرم را با استفاده از request.GET.get دریافت میکنیم (آدرس، هیچ)، آدرس ویژگی نام ورودی فرم است. سپس یک کاربر ایجاد می کنیم و کاربری را که ایجاد کرده ایم برای نمایش در صفحه وب برمی گردانیم.
# urls.py from django.urls import path from crud_ajax import views urlpatterns = [ path('crud/', views.CrudView.as_view(), name='crud_ajax'), path('ajax/crud/create/', views.CreateCrudUser.as_view(), name='crud_ajax_create'), ]
Form in Crud.html
for adding Users.
<form id="addUser" action=""> <div class="form-group"> <input class="form-control" type="text" name="name" placeholder="Name" required> </div> <div class="form-group"> <input class="form-control" type="text" name="address" placeholder="Address" required> </div> <div class="form-group"> <input class="form-control" type="number" name="age" min="10" max="100" placeholder="Age" required> </div> <button class="btn btn-primary form-control" type="submit">SUBMIT</button> </form>
اکنون اجازه دهید دوباره درخواست javascript و jquery ajax را در Crud.html که در هنگام لیست کردن کاربران ایجاد کرده ایم اضافه کنیم.
Crud.html
... {% block javascript %} // Create Django Ajax Call $("form#addUser").submit(function() { var nameInput = $('input[name="name"]').val().trim(); var addressInput = $('input[name="address"]').val().trim(); var ageInput = $('input[name="age"]').val().trim(); if (nameInput && addressInput && ageInput) { // Create Ajax Call $.ajax({ url: '{% url "crud_ajax_create" %}', data: { 'name': nameInput, 'address': addressInput, 'age': ageInput }, dataType: 'json', success: function (data) { if (data.user) { appendToUsrTable(data.user); } } }); } else { alert("All fields must have a valid value."); } $('form#addUser').trigger("reset"); return false; }); function appendToUsrTable(user) { $("#userTable > tbody:last-child").append(` <tr id="user-${user.id}"> <td class="userName" name="name">${user.name}</td> '<td class="userAddress" name="address">${user.address}</td> '<td class="userAge" name="age">${user.age}</td> '<td align="center"> <button class="btn btn-success form-control" ="editUser(${user.id})" data-toggle="modal" data-target="#myModal")">EDIT</button> </td> <td align="center"> <button class="btn btn-danger form-control" ="deleteUser(${user.id})">DELETE</button> </td> </tr> `); } {% endblock javascript %}
عملکرد JQuery فوق به این صورت است که وقتی فرم id='addUser' را ارسال می کنید، مقادیر فیلدهای ورودی را می گیرد و فراخوانی ajax به سرور منتقل می شود.
$.ajax({ url: '{% url "crud_ajax_create" %}', data: { 'name': nameInput, 'address': addressInput, 'age': ageInput }, dataType: 'json', success: function (data) { if (data.user) { appendToUsrTable(data.user); } } });
اجازه دهید بفهمیم که درخواست ajax بالا به مرورگر چه دستوری می دهد.
URL – where resource is located:
url: '/ajax/crud/create/',
Data Type – Type of Data we want in return:
dataType: 'json',
Return Data – Dictionary of data what we want to send:
data: { 'name': nameInput, 'address': addressInput, 'age': ageInput }
Success Response – Once we receive response from ajax, execute the code:
success: function (data) { if (data.user) { appendToUsrTable(data.user); } }
زمانی که کاربر فرم را پر کرده و ارسال می کند. داده های ارسالی به سرور می رود و پس از تایید به پایگاه داده و تابع appendToUsrTable فراخوانی می شود. این تابع appendToUsrTable فقط یک jQuery است که در آن کاربری را که با استفاده از User Add Form اضافه کرده ایم اضافه می کند. هنگامی که یک کاربر اضافه می شود به شکل زیر خواهد بود:
Update User Django Ajax
# Views.py class UpdateCrudUser(View): def get(self, request): id1 = request.GET.get('id', None) name1 = request.GET.get('name', None) address1 = request.GET.get('address', None) age1 = request.GET.get('age', None) obj = CrudUser.objects.get(id=id1) obj.name = name1 obj.address = address1 obj.age = age1 obj.save() user = {'id':obj.id,'name':obj.name,'address':obj.address,'age':obj.age} data = { 'user': user } return JsonResponse(data)
# urls.py from django.urls import path from crud_ajaximport views urlpatterns = [ path('crud/', views.CrudView.as_view(), name='crud_ajax'), path('ajax/crud/create/', views.CreateCrudUser.as_view(), name='crud_ajax_create'), path('ajax/crud/update/', views.UpdateCrudUser.as_view(), name='crud_ajax_update'), ]
crud.html
... // Create Django Ajax Call $("form#updateUser").submit(function() { var idInput = $('input[name="formId"]').val().trim(); var nameInput = $('input[name="formName"]').val().trim(); var addressInput = $('input[name="formAddress"]').val().trim(); var ageInput = $('input[name="formAge"]').val().trim(); if (nameInput && addressInput && ageInput) { // Create Ajax Call $.ajax({ url: '{% url "crud_ajax_update" %}', data: { 'id': idInput, 'name': nameInput, 'address': addressInput, 'age': ageInput }, dataType: 'json', success: function (data) { if (data.user) { updateToUserTabel(data.user); } } }); } else { alert("All fields must have a valid value."); } $('form#updateUser').trigger("reset"); $('#myModal').modal('hide'); return false; }); // Update Django Ajax Call function editUser(id) { if (id) { tr_id = "#user-" + id; name = $(tr_id).find(".userName").text(); address = $(tr_id).find(".userAddress").text(); age = $(tr_id).find(".userAge").text(); $('#form-id').val(id); $('#form-name').val(name); $('#form-address').val(address); $('#form-age').val(age); } } function updateToUserTabel(user){ $("#userTable #user-" + user.id).children(".userData").each(function() { var attr = $(this).attr("name"); if (attr == "name") { $(this).text(user.name); } else if (attr == "address") { $(this).text(user.address); } else { $(this).text(user.age); } }); }
بهروزرسانی کاربر مشابه Create User است. در views.py به جای ایجاد پرس و جو، از کوئری به روز رسانی استفاده می کنیم.
در فراخوانی Ajax Request، یک پارامتر id
دیگر برای شناسایی ردیف در پایگاه داده ارسال می کنیم
ما همچنین از دو تابع jQuery استفاده می کنیم - editUser و updateToUserTabel
در editUser – برای به روز رسانی فرم id=”updateUser” که داخل modal است استفاده می شود. و updateToUserTabel در موفقیت درخواست Ajax برای بهروزرسانی جزئیات کاربری که بهروزرسانی کردهایم استفاده میشود.
Delete User Django Ajax
# Views.py class DeleteCrudUser(View): def get(self, request): id1 = request.GET.get('id', None) CrudUser.objects.get(id=id1).delete() data = { 'deleted': True } return JsonResponse(data)
# urls.py from django.urls import path from crud_ajax import views urlpatterns = [ path('crud/', views.CrudView.as_view(), name='crud_ajax'), path('ajax/crud/create/', views.CreateCrudUser.as_view(), name='crud_ajax_create'), path('ajax/crud/update/', views.UpdateCrudUser.as_view(), name='crud_ajax_update'), path('ajax/crud/delete/', views.DeleteCrudUser.as_view(), name='crud_ajax_delete'), ]
Crud.html
// Delete Django Ajax Call function deleteUser(id) { var action = confirm("Are you sure you want to delete this user?"); if (action != false) { $.ajax({ url: '{% url "crud_ajax_delete" %}', data: { 'id': id, }, dataType: 'json', success: function (data) { if (data.deleted) { $("#userTable #user-" + id).remove(); } } }); } }
حذف کاربر با استفاده از Ajax Django یکی از ساده ترین راه ها است. در درخواست ajax، ما یک شناسه از شی را ارسال می کنیم که می خواهیم آن را حذف کنیم تا مشاهده شود. در View، query حذف اجرا می شود و پرچم حذف شده در Response ارسال می شود. در موفقیت، ما مستقیماً تابع jQuery را می نویسیم تا بخشی را که می خواهیم با استفاده از id به صورت پویا از جدول حذف کنیم، حذف می کنیم.
توجه: این مقاله به مرور زمان، ویرایش و یا تکمیل میشود!
تقاضا: در صورتی که با مشکل تایپی، دستوری و یا مفهومی در این مقاله برخورد کردید، از شما دوست عزیز و گرامی، صمیمانه تقاضا میکنم که اینجانب را مطلع کرده، تا نسبت به تصحیح و یا تکمیل آن، در اسرع وقت، اقدام نمایم. با کمال تشکر جواد جهانگیری
شماره تلفن همراه: 09149431772
نشانی پست الکترونیکی: javad.jahangiri.niopdc@gmail.com
فیلمهای آموزشی در آپارات:جواد جهانگیری (CTO) - آپارات
فیلم آموزشی در یوتویب: javad jahangiri - YouTube
نسخه مقاله: ۱.۱ - تاریخ بروزرسانی: 1401/01/07
برای دیدن فیلم اموزشی مربوطه به کانال آپاراتی بنده به ادرس جواد جهانگیری (CTO) - آپارات مراجعه نمایید
در دوره های آموزش تضمینی مجتمع فنی ارومیه که به صورت خصوصی و عمومی در دو شیوه حضوری و آنلاین برگزار می شود سرفصل های بسیار متنوع و کاربردی را بصورت پروژه محور آموزش داده می شود تا شخص کارآموز بتواند بلافاصله پس از اتمام این دوره در کمترین زمان ممکن وارد بازار کار شود.
آموزش تخصص ماست با ما حرفه ای شوید
جهت مشاوره با شماره 09149431772 در ارتباط باشید ...