بخش های اصلی

آموزش Django

Django – Ajax

اساساً Ajax ترکیبی از تکنولوژی هاییِه که برای کاهش تعداد صفحه های بارگذاری شده، با هم ادغام شدن. معمولاً از Ajax برای تسهیل کارِ کاربرِ انتهایی استفاده می کنیم. می توانید برای استفاده از Ajax در Django، مستقیماً از یک کتابخانه ی Ajax مثل Jquery یا ... استفاده کنین.  فرض می کنیم که شما از Jquery استفاده می کنین، بنابراین باید کتابخانه را دانلود کنین و از طریق  Apache یا دیگر سرورها، در سرور به آن خدمت رسانی کنین. سپس در Template از آن استفاده کنین، مثل کاری که هنگام طراحیِ برنامه های مبتنی بر Ajax انجام میدین.

یکی دیگر از راه های استفاده از Ajax در Django اینه که از فریم ورکِ Django Ajax استفاده کنین. رایج ترین فریم ورک در این زمینه django-dajax است که ابزاری قدرتمند برای توسعه ی آسان و سریعِ نمایشِ ناهمگام منطق در برنامه های وبِه و از Python استفاده می کنه و تقریباً اصلاً از JavaScript استفاده نمی کنه. این فریم ورک از چهار تا از محبوب ترین فریم ورک های Ajax پشتیبانی می کنه: Prototype, jQuery, Dojo و MooTools.

نحوه ی استفاده از Django-dajax

اولین کاری که باید انجام بدین نصبِ django-dajax است. می توانید این کار با را استفاده از easy_install یا pip انجام بدین:

$ pip install django_dajax
$ easy_install django_dajax

کد بالا بصورت اتوماتیک django-dajaxice را نصب می کنه که برای django-dajax مورد نیازه. سپس می توانید هر dajax و dajaxice را پیکربندی کنین.

dajax و dajaxice را به آپشنٍ INSTALLED_APPS در فایلِ settings.py مربوط به پروژه، اضافه کنین:

INSTALLED_APPS += (
   'dajaxice',
   'dajax'
)

از تشابهِ فایلِ settings.py با کد زیر اطمینان حاصل کنین :

TEMPLATE_LOADERS = (
   'django.template.loaders.filesystem.Loader',
   'django.template.loaders.app_directories.Loader',
   'django.template.loaders.eggs.Loader',
)

TEMPLATE_CONTEXT_PROCESSORS = (
   'django.contrib.auth.context_processors.auth',
   'django.core.context_processors.debug',
   'django.core.context_processors.i18n',
   'django.core.context_processors.media',
   'django.core.context_processors.static',
   'django.core.context_processors.request',
   'django.contrib.messages.context_processors.messages'
)

STATICFILES_FINDERS = (
   'django.contrib.staticfiles.finders.FileSystemFinder',
   'django.contrib.staticfiles.finders.AppDirectoriesFinder',
   'dajaxice.finders.DajaxiceFinder',
)

DAJAXICE_MEDIA_PREFIX = 'dajaxice'

حالا به فایلِ myapp/url.py برین و اطمینان حاصل کنین که برای تنظیم URLهایِ dajax و بارگذاری فایل های dajax statics js، کد بصورت زیر نوشته شده باشه:

from dajaxice.core import dajaxice_autodiscover, dajaxice_config
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings

Then dajax urls:

urlpatterns += patterns('',
   url(r'^%s/' % settings.DAJAXICE_MEDIA_PREFIX, include('dajaxice.urls')),)
	
urlpatterns += staticfiles_urlpatterns()

در ادامه یک فرم ساده بر اساس مدلِ Dreamreal ایجاد می کنیم تا با استفاده از Ajax (بدون تازه سازی مجدد صفحه) آن را ذخیره کنیم.

ابتدا، به فرمِ Dreamreal در myapp/form.py نیاز داریم.

class DreamrealForm(forms.Form):
   website = forms.CharField(max_length = 100)
   name = forms.CharField(max_length = 100)
   phonenumber = forms.CharField(max_length = 50)
   email = forms.CharField(max_length = 100)

سپس برای برنامه به فایلِ ajax.py نیاز داریم: myapp/ajax.py. این فایل همان جاییِه که منطق برنامه در آن قرار داده میشه، سپس تابعی که فرم را ذخیره می کنه را در آن قرار می دیم و popup را برمی گردانیم:

from dajaxice.utils import deserialize_form
from myapp.form import DreamrealForm
from dajax.core import Dajax
from myapp.models import Dreamreal

@dajaxice_register
def send_form(request, form):
   dajax = Dajax()
   form = DreamrealForm(deserialize_form(form))
   
   if form.is_valid():
      dajax.remove_css_class('#my_form input', 'error')
      dr = Dreamreal()
      dr.website = form.cleaned_data.get('website')
      dr.name = form.cleaned_data.get('name')
      dr.phonenumber = form.cleaned_data.get('phonenumber')
      dr.save()
      
      dajax.alert("Dreamreal Entry %s was successfully saved." % 
         form.cleaned_data.get('name'))
   else:
      dajax.remove_css_class('#my_form input', 'error')
      for error in form.errors:
         dajax.add_css_class('#id_%s' % error, 'error')
			
   return dajax.json()

اکنون templateای به نامِ dreamreal.html ایجاد می کنیم که فرم در آن قرار میگیره:


   
   
         {{ form.as_p }}
      
      
   

view را که در myapp/views.py با template همراه میشه، اضافه می کنیم:

def dreamreal(request):
   form = DreamrealForm()
   return render(request, 'dreamreal.html', locals())

URL مربوطه را در myapp/urls.py ذخیره می کنیم:

url(r'^dreamreal/', 'dreamreal', name = 'dreamreal'),

حالا برای این که Ajax کار کنه، چیزهای لازم را به template اضافه می کنیم –

در بالای فایل، کد زیر را اضافه کنین :

{% load static %}
{% load dajaxice_templatetags %}

در قسمتِمربوط به template dreamreal.html، کد زیر را اضافه کنین –

برای این مثال از کتابخانه ی Jquery استفاده می کنیم، پس  کد زیر را هم اضافه کنین :

 

تابع Ajaxای که هنگام کلیک کردن فراخوانی میشه :

 

در نظر داشته باشین که در دایرکتوریِ فایل هایِ static به “jquery-1.11.3.min.js” و jquery.dajax.core.js نیاز دارین. برای این که اطمینان حاصل کنین که تمام فایل های dajax static در دایرکتوری Static قرار دارن، کد زیر را اجرا کنین –

$python manage.py collectstatic

نکته – گاهی jquery.dajax.core.js ممکنِه وجود نداشته باشه یا گم بشه، اگه چنین اتفاقی افتاد، فقط سورس آن را دانلود کنین و در فولدرِ static قرار بدین.

اگه به accessing /myapp/dreamreal/ برین، خروجی بصورت زیر خواهید دید –

using django dajax

اگه submit کنین، صفحه ای بصورت زیر خواهید دید:

using django dajax response

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش Django

Learn Django

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد