آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

معرفی جنگو ( Django )

کد Django به چه شکل است؟



اپلیکیشن های تحت وب موجود در وبسایت های داده محور، منتظر درخواست های HTTP از مرورگر و یا client های دیگر هستند. زمانی که درخواستی دریافت می شود، اپلیکیشن بر اساس URL و اطلاعات موجود در داده های POST یا GET، درخواست ها را پاسخ می دهد.


با توجه به درخواست فرستاده شده، یکی از عملیات های خواندن یا نوشتن اطلاعات از دیتابیس و یا عملیات های مورد نیاز دیگر انجام می شود. سپس اپلیکیشن یک پاسخ به مرورگر ارسال کرده که معمولا یک صفحه HTML دینامیک برای مرورگر ایجاد می کند تا بتواند اطلاعات بازیابی شده ورودی به placeholder های موجود در قالب HTML را نمایش دهد.

اپلیکیشن های تحت وب Django معمولا کد هایی که هر یک از این گام ها را انجام می دهند را در فایل های جداگانه گروه بندی می کند :



 کد Django به چه شکل است؟

URL ها :



اگرچه می توان درخواست های هر URL را بوسیله یک تابع پاسخ داد، اما روشی با قابلیت نگهداری بالاتر نیز وجود دارد، به این صورت که برای رسیدگی به هر منبع، یک تابع View مجزا نوشته می شود. URL mapper برای هدایت درخواست های HTTP به View مناسب استفاده می شود که هدایت درخواست ها متناسب با URL درخواست فرستاده شده صورت می گیرد. URL mapper همینطور می تواند برای منظم و هماهنگ کردن الگو های خاص رشته ای یا عددی که در URL وجود دارند، مورد استفاده قرار گیرد و این رشته ها را بعنوان داده به یک تابع View پاس دهد.



View :



View تابعی برای رسیدگی به درخواست هاست، که درخواست های HTTP را دریافت کرده و پاسخ های آن را ارسال می کند. View ها بوسیله model ها به داده های مورد نیاز برای پاسخ دهی مناسب به درخواست ها دسترسی پیدا می کنند و قالب بندی پاسخ ها را به template واگذار می کنند.



Modelها :



model ها، اشیا پایتون هستند که ساختار داده های یک اپلیکیشن را تعریف کرده و مکانیزم هایی برای مدیریت (اضافه کردن، تغییر دادن، حذف کردن) رکورد های موجود در دیتابیس و جستجو در آنها فراهم می کنند.



Templateها :



template یک فایل متنی است که ساختار یا آرایش یک فایل که شامل (مانند یک صفحه HTML) placeholderهایی برای نمایش محتوا واقعی نیز می باشد را تعریف می کند. یک view می تواند به صورت پویا، یک صفحه HTML را با استفاده از template HTML ایجاد کرده و داده های موجود در model را در آن قرار دهد. یک template می تواند برای تعریف ساختار نمونه های مختلف یک فایل و نه فقط HTML مورد استفاده قرار گیرد.

توجه:

این نوع سازمان دهی در Django تحت عنوان معماری “Model View Template (MVT)” شناخته می شود که شباهت های بسیاری با معماری Model View Controller که شناخته شده تر است، دارد.



در بخش های زیر، قسمت های اصلی اپلیکیشن Django به طور کلی به شما نشان داده می شود ( جزئیات بیشتر را در ادامه، پس از آنکه محیط توسعه خود را آماده کردید، بررسی می کنیم).



ارسال درخواست به View مناسب (urls.py) در جنگو



mapper معمولا در فایلی با نام urls.py ذخیره می شود. در مثال زیر، mapper ( الگوهای url) لیستی از نگاشت های (mappings) موجود میان routes ( الگو های مشخص URL) و توابع view متناظر با آنها را تعریف می کند. اگر درخواست HTTP دریافتی دارای URL منطبق با یک الگو مشخص باشد، تابع view مرتبط با آن فراخوانی شده و درخواست را پاس می دهد.


                        urlpatterns = [
                            path('admin/', admin.site.urls),
                            path('book//', views.book_detail, name='book_detail'),
                            path('catalog/', include('catalog.urls')),
                            re_path(r'^([0-9]+)/$', views.best),
                        ]
                    


شی urlpatterns لیستی از توابع path() و/ یا re_path() ( توابع در پایتون با استفاده از [ ] تعریف میشوند، که item ها بوسیله ی" ," از هم جدا می شوند و ممکن است در انتهای Lists, Tuples, Dictionaries نیز از “,” استفاده شود. برای مثال : [ item1, item2, item3, ] ) است.


اولین آرگومان در هر دو متد، یک route ( الگو) است که انطباق آن بررسی خواهد شد. متد path() از () برای تعریف بخش هایی از URL استفاده می کند که به عنوان آرگومان های نامگذاری شده ضبط و به تابع view پاس داده می شوند. تابع re_path() از الگویی انعطاف پذیر برای انطباق استفاده می کند که regular expressions نامیده می شود.


آرگومان دوم، تابع دیگری است که پس از فرایند تطبیق الگو، فراخوانی می شود. عبارت view.book_detail نشان می دهد که تابع، book_detail() نام دارد و در ماژولی به نام view یافت می شود (مثلا در فایلی به نام view.py).




رسیدگی به درخواست (views.py)




view ها، قلب اپلیکیشن های تحت وب هستند که درخواست های HTTP را از clientهای وب دریافت کرده و پاسخ های HTTP را باز می گردانند. در این میان، دیگر منابع framework را برای دسترسی به دیتابیس ها، ارائه template ها و ... مدیریت می کنند.


مثال زیر تابع view کوچکی به نام index() را نمایش می دهد که می تواند به وسیله ی URL mapper شرح داده شده در بخش قبل فراخوانی شود. این تابع همانند تمامی توابعview ، یک شیHttpRequest را بعنوان پارامتر(request) دریافت کرده و یک شی HttpResponse را باز می گرداند. در این حالت ما عملیاتی بر روی درخواست انجام نداده ایم و پاسخ ما تنها یک رشته کد را باز می گرداند. در بخش بعد درخواستی که عملکرد جالب تری داشته باشد را به شما نشان خواهیم داد.


                # filename: views.py (Django view functions)

                  from django.http import HttpResponse

                  def index(request):
                # Get an HttpRequest - the request parameter
                # perform operations using information from the request.
                # Return HttpResponse
                  return HttpResponse('Hello from Django!')

                


توجه : اندکی پایتون :

ماژول های پایتون، کتابخانه هایی از توابع هستند که در فایل های جداگانه ذخیره شده اند و ما می توانیم از آنها در کدهای خود استفاده کنیم. در اینجا ما تنها شی HttpResponse را از ماژول django.http وارد می کنیم تا بتوانیم از آن در view خود : from django.http import HttpRespond استفاده کنیم. روش های دیگری برای وارد کردن چند و یا تمام اشیا یک ماژول نیز وجود دارد.


همانگونه که در بالا مشاهده کردید، توابع با استفاده از کلیدواژه def تعریف می شوند، و لیستی از پارامتر های نامگذاری شده، پس از نام تابع، در پرانتز قرار می گیرند، و تمامی خطوط با یک" ;" به پایان می رسند. توجه کنید که چطور خطوط بعدی با فرورفتگی نوشته می شوند. فرورفتگی اهمیت بالایی دارد زیرا مشخص می کند که خطوط مربوط به یک کد در یک بلوک مشخص قرار گرفته اند (فرورفتگی های اجباری یکی از ویژگی های کلیدی پایتون است که از جمله دلایل خوانایی کد پایتون نیز به حساب می آید).


view ها اغلب در فایلی تحت عنوان views.py ذخیره می شوند.




تعریف مدل های داده (models.py)



اپلیکیشن های تحت وب Django، داده ها را از طریق اشیائی از پایتون که به عنوان model شناخته می شوند، مدیریت کرده و تحت جستجو قرار می دهند. modelها ساختار داده های ذخیره شده را تعریف می کنند که شامل نمونه های فیلد و احتمالا حداکثر سایز آنها، مقادیر پیش فرض، گزینه های انتخابی، متن کمکی برای مستند سازی، برچسب های متنی برای form ها و ... هستند. تعریف model مستقل از دیتابیس است و شما می توانید یکی از چندین مورد را بعنوان بخشی از تنظیمات پروژه انتخاب کنید. دیتابیس های موجود را در تنظیمات پروژه خود انتخاب کنید. پس از انتخاب دیتابیس مورد نظر خود نیازی به برقراری ارتباط مستقیم با آن ندارید، شما تنها باید ساختار model و دیگر کدها را بنویسید و Django به تمامی امور ارتباط با دیتابیس رسیدگی می کند.


قطعه کد زیر یک نمونه ساده ای از مدل Django را برای آبجکتی به نام Team نمایش می دهد. کلاس Team از کلاسی از Django به نام models.Model مشتق شده است که نام تیم و level آن را به صورت فیلدهای character تعریف کرده و حداکثر تعداد character هایی را که می توان در هر رکورد ذخیره کرد، مشخص می کند. team_level می تواند از بین مقادیری که تعریف کرده ایم انتخاب شود، پس ما آن را بعنوان یک فیلد انتخابی تعریف کرده و نگاشتی را با یک مقدار پیش فرض، میان گزینه هایی که باید انتخاب و داده هایی که باید ذخیره شوند، ایجاد می کنیم.


                # filename: models.py

                from django.db import models

                class Team(models.Model):
                  team_name = models.CharField(max_length=40)

                TEAM_LEVELS = (
                    ('U09', 'Under 09s'),
                    ('U10', 'Under 10s'),
                    ('U11', 'Under 11s'),
                    ...  #list other team levels
                    )
                team_level = models.CharField(max_length=3, choices=TEAM_LEVELS, default='U11')


                

توجه : اندکی پایتون :

پایتون از برنامه نویسی شی گرا پشتیبانی می کند؛ در برنامه نویسی شی گرا کدهای خود را در آبجکت هایی سازمان دهی می کنیم که داده های مرتبط و توابع مورد نیاز برای اجرای عملیات بر روی این داده ها را شامل می شوند. آبجکت ها همینطور می توانند از دیگر آبجکت ها ارث بری کنند، یا از آنها مشتق شوند و یا آنها را توسعه دهند و به این ترتیب امکان به اشتراک گذاشته شدن رفتارهای مشترک را در میان آبجکت های بهم مرتبط فراهم می کنند. برای تعریف طرح اولیه (blueprint) در پایتون از کلیدواژه “Class” استفاده می شود. علاوه بر این، می توانیم بر اساس مدل موجود در کلاس، چندین نمونه مشخص از آبجکت ساخت.


برای مثال، در اینجا کلاس Team را داریم که از کلاس Model مشتق شده است. این جمله به این معناست که کلاس Team یک model است و تمامی متدهای مدل را داراست، اما می توانیم قابلیت های خاص خودش را هم به آن اضافه کنیم. در مدل، فیلد هایی که دیتابیس برای ذخیره داده به آنها نیاز دارد را تعریف کرده و آنها را نامگذاری می کنیم. Django از این تعاریف که شامل نام فیلد ها نیز می شود، برای ایجاد دیتابیس استفاده می کند.




جستجو داده ها (views.py)



مدل Django دارای یک API ساده برای جستجو در دیتابیس مربوطه است که می تواند استفاده از شاخص های مختلف (مانند exact، case-sensetive، بزرگتر و غیره )، به طور هم زمان با چندین فیلد انطباق پیدا کرده و گزاره های پیچیده (مثلا ایجاد یک جستجو برای تیم های U11 که نام آنها با “Fr” شروع شده و با “al” خاتمه میابد) را نیز پشتیبانی کند.


قطعه کد زیر نشان دهنده تابعی از view ( resource handler) است که تمام تیم های U09 را نمایش می دهد. خط پررنگ شده نشان می دهد که چطور می توان از API کوئری برای فیلتر کردن تمام رکورد هایی استفاده کرد که فیلد team_level آنها دقیقا دارای متن ‘U09’ است (دقت کنید که چطور این شاخص به عنوان یک آرگومان و با نام فیلد به تابع filter() پاس داده می شود و با نمونه ای که به وسیله ی دو زیر خط ازهم جدا شده اند، منطبق می شود : team_level_ _exact، ).


                ## filename: views.py

                from django.shortcuts import render
                from .models import Team

                def index(request):
                    list_teams = Team.objects.filter(team_level__exact="U09")
                    context = {'youngest_teams': list_teams}
                    return render(request, '/best/index.html', context)



                

این تابع، برای ایجاد HttpResponse که به مرورگر برگردانده می شود، از تابع render() استفاده می کند. این تابع یک shortcut است که با ترکیب قالبی خاص از HTML و تعدادی داده که در قالب قرار می گیرند، یک فایل HTML ایجاد می کند (در متغیر “context” موجود است). در بخش بعدی متوجه می شویم که چگونه داده در template قرار می گیرد و HTML را ایجاد می کند.




تفسیر و خواندن داده ها (HTML Templates)



سیستم template به شما اجازه می دهد تا با استفاده از placeholder هایی که در زمان ایجاد صفحه با داده پر می شوند، ساختار سند خروجی را مشخص کنید. template ها اغلب برای ایجاد HTML مورد استفاده قرار می گیرند، اما قادر بهتولید نمونه های دیگری از سندها نیز هستند. Django ازهر دو سیستم native templating خود و کتابخانه معروف پایتون به نام Jinja2 پشتیبانی می کند (در صورت نیاز می توان دیگر سیستم ها را نیز به سیستم های قابل پشتیبانی توسط Django اضافه کرد).


قطعه کد زیر نشان می دهد که قالبی از HTML که توسط تابع render() در بخش قبل فراخوانی می شود، به چه شکل است. این template با این فرض نوشته شده است که می تواند در زمان render شدن، به متغیر لیست به نام youngest_team دسترسی داشته باشد (که در متغیر context در تابع render بالا موجود است). در اسکلت HTML، گزاره ای وجود دارد که در ابتدا وجود متغیر youngest_team را بررسی می کند، و سپس آن را در حلقه تکرار for قرار می دهد. در هر بار تکرار، template مقدار team_name برای هر تیم را در یک المان

  • نمایش می دهد.


    ## filename: best/templates/best/index.html
    
    
    
    
      
      Home page
    
    
      {% if youngest_teams %}
        
      {% for team in youngest_teams %}
    • {{ team.team_name }}
    • {% endfor %}
    {% else %}

    No teams are available.

    {% endif %}



    چه کارهای دیگری می توان انجام داد؟



    بخش های پیشین ویژگی های اصلی مورد نیاز در بسیاری از برنامه های تحت وب را نشان می دهند. از جمله این ویژگی ها می توان به مواردی همچون نگاشت URL، Views، Models و Templates اشاره کرد. برخی موارد دیگر که توسط Django فراهم شده اند، به شرح زیر هستند :


    • Formها : form های HTML برای جمع آوری اطلاعات کاربر به منظور پردازش در سرور، استفاده می شوند. Django ساخت، تایید و پردازش این form ها را ساده تر می سازد.

    • Caching: ایجاد محتوا به شکل پویا در مقایسه با رائه محتوا ایستا، نیاز به محاسبات بیشتری داشته و اهسته تر انجام می شود. Django سیستم منعطفی برای ذخیره همه یا بخشی از صفحه ارائه شده در cache را فراهم می کند تا تنها در صورت نیاز دوباره render شوند.

    • سایت مدیریت : زمانی که برنامه ای را با استفاده از ساختار پایه تولید می کنید، سایت مدیریت Django به شکل پیش فرض در آن وجود دارد. در این حالت، ایجاد یک صفحه admin برای مدیریت تا بوسیله آن بتواند model های داده را در سایت ایجاد، ویرایش و مشاهده کند، بسیار آسان خواهد بود.

    • سریال سازی داده : Django به شما این امکان را می دهد که داده های خود را به سادگی سریال سازی کرده و به صورت XML یا JSON استفاده کنید. این امکان در زمان ایجاد یک وب سرویس (وب سایتی است که تنها داده های مورد نیاز برای اپلیکیشن ها و سایت های دیگر را فراهم می کند و خودش هیچ داده ای نمایش نمی دهد)، یا ساخت وبسایتی که rendering داده ها در آن بوسیله کدهای موجود در سمت کاربر انجام می گیرد، بسیار مفید است.

    • 132
    •    170
    • تاریخ ارسال :   1399/10/05

    دانلود PDF دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
    رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
    ارسال دیدگاه نظرات کاربران
    شماره موبایل دیدگاه
    عنوان پست الکترونیک

    ارسال

    آموزشگاه برنامه نویسی تحلیل داده
    آموزشگاه برنامه نویسی تحلیل داده

    تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .