۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

آموزش جنگو: با Django 5.0 شروع کنید

با مسیرها، نماها و قالب‌ها در محبوب‌ترین چارچوب وب پایتون راه‌اندازی کنید.

با مسیرها، نماها و قالب‌ها در محبوب‌ترین چارچوب وب پایتون راه‌اندازی کنید.

Django یک چارچوب وب Python است که از Ruby on Rails الهام گرفته شده است و از بسیاری از استعاره‌های مشابه برای توسعه سریع وب استفاده می‌کند. آسان جنگو با بارگذاری کامل و انعطاف پذیر به یکی از پرکاربردترین چارچوب های وب پایتون تبدیل شده است.

Django تقریباً همه چیزهایی را که برای ساختن یک برنامه وب با هر اندازه ای نیاز دارید را شامل می شود و محبوبیت آن یافتن نمونه ها و کمک برای سناریوهای مختلف را آسان می کند. Plus Django ابزارهایی را ارائه می دهد که به برنامه شما اجازه می دهد تا ویژگی ها را به خوبی توسعه دهد و ویژگی ها را اضافه کند و طرح داده خود را (در صورت وجود) انتقال دهد.

Django همچنین به پیچیده بودن شهرت دارد، با اجزای بسیاری و مقدار زیادی پیکربندی “زیر هود” مورد نیاز است. در حقیقت، می‌توانید یک برنامه ساده پایتون را با سرعت نسبتاً کوتاهی راه‌اندازی و اجرا کنید، سپس در صورت نیاز عملکرد آن را گسترش دهید.

این مقاله شما را از طریق ایجاد یک برنامه اولیه جنگو ۵.۰ راهنمایی می کند. همچنین در نسخه Django 5 به مهمترین ویژگی‌ها برای توسعه دهندگان وب خواهیم پرداخت.

نصب کتابخانه های هسته جنگو

برای نصب جنگو ۵.۰، به پایتون ۳.۱۰ یا بهتر نیاز دارید. اگر در نسخه قبلی پایتون گیر کرده اید، ممکن است بتوانید از نسخه ۴ استفاده کنید. برای اطلاع از جدول نسخه Python جنگو مراجعه کنید از چه نسخه هایی می توانید استفاده کنید در حالت ایده‌آل، از جدیدترین نسخه پایتون استفاده کنید که از هر کاری که ممکن است بخواهید با پروژه جنگو خود انجام دهید، پشتیبانی می‌کند.

اولین مرحله ایجاد یک محیط مجازی است که در آن نصب خواهید کرد جانگو. این باعث می‌شود جنگو و کتابخانه‌های مرتبط با آن از نصب پایه پایتون شما جدا باشند، که همیشه یک تمرین خوب است.

توجه داشته باشید که برای ایجاد چندین پروژه با یک نمونه از جنگو نیازی به استفاده از محیط های مجازی ندارید. شما فقط به آنها برای جداسازی نقاط مختلف چارچوب جنگو نیاز دارید که هر کدام پروژه های متفاوتی دارند.

بعد، جنگو را در محیط مجازی انتخابی خود از طریق ابزار pip پایتون نصب کنید:

pip install django

با این کار کتابخانه های هسته جنگو و ابزار خط فرمان django-admin که برای مدیریت پروژه های جنگو استفاده می شود، نصب می شود.

ایجاد یک پروژه جنگو جدید

نمونه‌های جنگو در دو سطح سازمان‌دهی می‌شوند: پروژه‌ها و برنامه‌ها.

  • یک پروژه نمونه ای از جنگو با پیکربندی پایگاه داده، تنظیمات و برنامه های خاص خود است. بهتر است یک پروژه را به عنوان مکانی برای ذخیره تمام پیکربندی‌های سطح سایت مورد استفاده در نظر بگیرید.
  • یک برنامه زیربخشی از یک پروژه است که مسیر و منطق رندر خود را دارد. چندین برنامه را می توان در یک پروژه جنگو قرار داد.

برای ایجاد یک پروژه جنگو جدید از ابتدا، دایرکتوری را که می‌خواهید پروژه را در آن ذخیره کنید وارد کنید و تایپ کنید:


django-admin startproject <project_name>

نام پروژه و زیر شاخه ای است که پروژه در آن ذخیره می شود. مطمئن شوید که نامی را انتخاب کنید که به احتمال زیاد با نامی که پایتون یا جنگو در داخل استفاده می کند، برخورد نکند. نامی مانند myproj به خوبی کار می کند.

دایرکتوری جدید ایجاد شده باید حاوی یک فایل manage.py باشد که برای کنترل رفتار برنامه از خط فرمان استفاده می‌شود و یک زیر شاخه دیگر (همچنین با نام پروژه) که حاوی فایل‌های زیر است. :

  • یک فایل __init__.py که توسط پایتون برای تعیین یک زیر شاخه به عنوان ماژول کد استفاده می شود.
  • settings.py، که تنظیمات مورد استفاده برای پروژه را نگه می دارد. بسیاری از رایج ترین تنظیمات برای شما از قبل پر شده است.
  • urls.py، که مسیرها یا نشانی‌های اینترنتی موجود برای پروژه جنگو شما را فهرست می‌کند، یا پروژه به آنها پاسخ می‌دهد.
  • wsgi.py، که توسط سرورهای وب سازگار با WSGI، مانند Apache HTTP یا Nginx، برای به برنامه های پروژه شما خدمات ارائه می دهد.
  • asgi.py، که توسط سرورهای وب سازگار با ASGI برای ارائه برنامه های پروژه شما استفاده می شود. ASGI یک استاندارد نسبتاً جدید برای سرورها و برنامه‌های ناهمزمان است و به سروری نیاز دارد که از آن پشتیبانی کند، مانند Uvicorn. جنگو اخیراً پشتیبانی بومی را برای برنامه‌های ناهمزمان اضافه کرده است، که همچنین باید هاست شود یک سرور سازگار با async به طور کامل موثر باشد.

در مرحله بعد، پروژه را برای اطمینان از عملکرد آن آزمایش کنید. از خط فرمان در دایرکتوری حاوی فایل manage.py پروژه شما، اجرا کنید:


python manage.py runserver

با این کار باید یک وب سرور توسعه موجود در http://127.0.0.1:8000/ راه اندازی شود. از آن پیوند دیدن کنید و باید یک صفحه خوش آمدگویی ساده را ببینید که به شما می گوید نصب با موفقیت انجام شده است.

توجه داشته باشید که وب سرور توسعه نباید نباید برای ارائه پروژه جنگو به عموم مردم استفاده شود. این فقط برای آزمایش محلی است و برای برنامه های عمومی طراحی نشده است.

ایجاد برنامه جنگو

بعد، یک برنامه کاربردی در داخل این پروژه ایجاد می کنیم. به همان دایرکتوری manage.py بروید و این دستور را صادر کنید:


python manage.py startapp myapp

این یک زیر شاخه برای برنامه ای به نام myapp ایجاد می کند که حاوی موارد زیر است:

برای شروع کار با برنامه، ابتدا باید آن را در پروژه ثبت کنید. myproj/settings.py را به صورت زیر ویرایش کنید و یک خط به بالای فهرست INSTALLED_APPS اضافه کنید:


INSTALLED_APPS = [
    "myapp.apps.MyappConfig",
    "django.contrib.admin",
    ...

اگر به myproj/myapp/apps.py نگاه کنید، یک شی از پیش تولید شده به نام MyappConfig را مشاهده خواهید کرد که در اینجا به آن اشاره کرده ایم.

افزودن مسیرها و نماها به برنامه جنگو

برنامه های Django از یک الگوی اساسی برای پردازش درخواست ها پیروی می کنند:

  • هنگامی که درخواست ورودی دریافت می‌شود، جنگو URL را برای یک مسیر تجزیه می‌کند تا آن را اعمال کند.
  • مسیرها در urls.py تعریف می‌شوند و هر مسیر به یک view پیوند می‌یابد، به معنای تابعی که داده‌ها را برای ارسال به مشتری برمی‌گرداند. نماها را می توان در هر جایی از پروژه جنگو قرار داد، اما آنها به بهترین وجه در ماژول های خود سازماندهی می شوند.
  • نماها می‌توانند حاوی نتایج یک الگوی باشند، که کدی است که داده‌های درخواستی را بر اساس طرح خاصی قالب‌بندی می‌کند.

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

مسیرها در urls.py در فهرستی به نام urlpatterns تعریف شده‌اند. اگر نمونه urls.py را باز کنید، urlpatterns از قبل از پیش تعریف شده را مشاهده خواهید کرد:


urlpatterns = [
    path('admin/', admin.site.urls),
]

تابع path – یک جنگو داخلی – یک مسیر و یک تابع view را به عنوان آرگومان می گیرد و یک مرجع به یک مسیر URL تولید می کند. به طور پیش فرض، جنگو یک مسیر admin ایجاد می کند که برای مدیریت سایت استفاده می شود، اما ما باید مسیرهای خود را ایجاد کنیم.

یک ورودی دیگر اضافه کنید، به طوری که کل فایل به این شکل باشد:


from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('myapp/', include('myapp.urls'))
]

عملکرد include به جنگو می‌گوید که اطلاعات الگوی مسیر بیشتری را در فایل myapp.urls جستجو کند. همه مسیرهای یافت شده در آن فایل به مسیر سطح بالای myapp (به عنوان مثال، http://127.0.0.1:8080/myapp) پیوست خواهند شد.

بعد، یک urls.py جدید در myapp ایجاد کنید و موارد زیر را اضافه کنید:


from django.urls import path
from . import views

urlpatterns = [
    path('', views.index)
]

جانگو یک اسلش به ابتدای هر URL اضافه می کند، بنابراین برای تعیین ریشه سایت (/)، فقط یک رشته خالی به عنوان URL ارائه می کنیم.

اکنون، فایل myapp/views.py را ویرایش کنید تا به این شکل به نظر برسد:


from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world!")

django.http.HttpResponse یک جنگو داخلی است که یک پاسخ HTTP را از یک رشته ارائه شده تولید می کند. توجه داشته باشید که درخواست، که حاوی اطلاعات یک درخواست HTTP ورودی است، باید به عنوان اولین پارامتر به یک تابع view ارسال شود.

سرور توسعه را متوقف و راه اندازی مجدد کنید و به http://127.0.0.1:8000/myapp/ بروید. باید ببینید “”Hello, world!” در مرورگر ظاهر می شود.

افزودن مسیرها با متغیرها در جنگو

جانگو می‌تواند مسیرهایی را بپذیرد که متغیرها را به عنوان بخشی از نحو خود ترکیب می‌کنند. فرض کنید می‌خواهید URLهایی را بپذیرید که قالب year/ داشتند. شما می توانید با افزودن ورودی زیر به urlpatterns این کار را انجام دهید:


path('year/', views.year)

تابع view views.year سپس از طریق مسیرهایی مانند year/1996، year/2010 و غیره فراخوانی می شود. متغیر year به عنوان پارامتر به views.year منتقل می شود.

برای اینکه خودتان این کار را امتحان کنید، ورودی urlpatterns بالا را به myapp/urls.py اضافه کنید، سپس این تابع را به myapp/views.py< اضافه کنید. /code>:


def year(request, year):
    return HttpResponse('Year: {}'.format(year))

اگر در سایت خود به /myapp/year/2010 بروید، باید سال: ۲۰۱۰ را در پاسخ مشاهده کنید. توجه داشته باشید که مسیرهایی مانند /myapp/year/rutabaga خطایی ایجاد می‌کنند زیرا محدودیت int: در متغیر سال فقط یک عدد صحیح را در آن موقعیت مجاز می‌کند. بسیاری از گزینه‌های قالب‌بندی دیگر برای مسیرها در دسترس هستند.

نسخه‌های قبلی جنگو دارای نحو پیچیده‌تری برای مسیرها بود که تجزیه آن دشوار بود. اگر همچنان نیاز به اضافه کردن مسیرها با استفاده از نحو قدیمی دارید - به عنوان مثال، برای سازگاری با پروژه قدیمی جنگو - می‌توانید از django.urls.re_path، که مسیرها را با استفاده از عبارات منظم مطابقت می دهد.

الگوهای جنگو

از زبان قالب داخلی جنگو می‌توان برای تولید استفاده کرد صفحات وب از داده ها.

الگوهای استفاده شده توسط برنامه های جنگو در فهرستی که در مرکز پروژه قرار دارد ذخیره می شوند: /templates//. برای پروژه myapp ما، دایرکتوری myapp/templates/myapp/ خواهد بود. این ساختار دایرکتوری ممکن است ناخوشایند به نظر برسد، اما اجازه دادن به جنگو برای جستجوی الگوها در مکان‌های مختلف، از برخورد نام بین الگوهایی با نام یکسان در چندین برنامه جلوگیری می‌کند.

در فهرست راهنمای myapp/templates/myapp/ خود، فایلی به نام year.html با محتوای زیر ایجاد کنید:


Year: {{year}}

هر مقدار درون پرانتزهای دوتایی در یک الگو به عنوان یک متغیر در نظر گرفته می‌شود. با همه چیز به معنای واقعی کلمه رفتار می شود.

myapp/views.py را به شکل زیر تغییر دهید:


from django.shortcuts import render
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world!")

def year(request, year):
    data = {'year':year}
    return render(request, 'myapp/year.html', data)

عملکرد render - یک "میانبر" جنگو (ترکیبی از چندین داخلی داخلی برای راحتی) - شی درخواست موجود را می گیرد، به دنبال الگوی myapp/year.html در لیست مکان‌های قالب موجود است و داده‌های فرهنگ لغت را به عنوان مطابق الگو به آن منتقل می‌کند. این الگو از فرهنگ لغت به عنوان فضای نامی برای متغیرهای استفاده شده در قالب استفاده می کند. در این حالت، متغیر {{year}} در الگو با مقدار کلید year در فرهنگ لغت data جایگزین می‌شود (که است، data["year"]).

میزان پردازشی که می‌توانید روی داده‌ها در قالب‌های جنگو انجام دهید عمداً محدود است. فلسفه جنگو این است که در صورت امکان، جداسازی ارائه و منطق تجاری را اعمال کند. بنابراین، می‌توانید از طریق یک شی تکرار شونده حلقه بزنید، و می‌توانید تست‌های if/then/else را انجام دهید، اما تغییر داده‌های درون یک الگو ممنوع است.

برای مثال، می‌توانید یک آزمایش ساده «اگر» را به این صورت رمزگذاری کنید:


{% if year > 2000 %}
۲۱st century year: {{year}}
{% else %}
Pre-21st century year: {{year}}
{% endif %}

نشانگرهای {% و %} بلوک‌های کد قابل اجرا در زبان الگوی جنگو را محدود می‌کنند.

اگر می‌خواهید از زبان پردازش الگوی پیچیده‌تری استفاده کنید، می‌توانید چیزی مانند Jinja2 یا Mako را جایگزین کنید. جنگو شامل یکپارچه سازی back-end برای Jinja2، اما می‌توانید از هر زبان قالبی استفاده کنید که رشته‌ای را برمی‌گرداند - برای مثال، با برگرداندن آن رشته در یک شی HttpResponse مانند مورد "Hello, world!" مسیر.

مراحل بعدی با جنگو

آنچه در اینجا دیده‌اید، فقط اساسی‌ترین عناصر یک برنامه جنگو را پوشش می‌دهد. جنگو شامل بسیاری از مؤلفه های دیگر برای استفاده در پروژه های وب است. همه اینها ارزش دارد که به طور جداگانه به تفصیل مورد بحث قرار گیرد، اما من یک مرور مختصر را برای شما قرار می دهم:

  • پایگاه‌های داده و مدل‌های داده: ORM داخلی جنگو به شما امکان می دهد ساختارهای داده و روابط بین آنها را برای برنامه خود و همچنین مسیرهای انتقال بین نسخه های آن ساختارها را تعریف کنید.
  • فرم‌ها: جنگو روشی ثابت برای نمایش‌ها برای ارائه فرم های ورودی را به کاربر، بازیابی داده ها، عادی سازی نتایج، و ارائه گزارش خطای مداوم.
  • امنیت و ابزارهای کمکی: جنگو شامل است بسیاری از توابع داخلی برای ذخیره سازی، ورود به سیستم، مدیریت جلسه، مدیریت فایل های استاتیک و عادی سازی URL ها. همچنین ابزارهایی را برای نیازهای رایج امنیتی مانند استفاده از گواهی‌های رمزنگاری، بسته‌بندی می‌کند. یا محافظت در برابر محافظت از جعل بین سایتی یا جعل کلیک.