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

آموزش ساخت وبسايت با Django

آموزش Django

آموزش ساخت یک وب سایت با Django


این مقاله در سری آموزش های Django به شما می آموزد که یک وبسایت “skeleton” را به عنوان پروژه پایه کار خود بسازید تا بتوانید در آینده تنظیمات خاص وب سایت مورد نظرتان مانند مسیر ها، model ها، view ها و template ها را به آن بیفزایید.


پیش نیازهای ساخت یک وبسایت “skeleton” در Django



نگاه کلی


این مقاله به شما می آموزد یک وب سایت “skeleton” بسازید تا بتوانید در آینده تنظیمات خاص وب سایت مورد نظرتان مانند مسیر ها، model ها، view ها و template ها را ( که در بخش های آینده بررسی خواهند شد) به آن بیفزایید.


برای شروع باید:


  1. با استفاده از ابزار django-admin ، یک project folder (که فایل template اصلی است) و manage.py( که به عنوان project management script استفاده خواهد شد) بسازید.

  2. با استفاده از manage.py، یک یا چند اپلیکیشن ایجاد کنید.


    توجه :

    یک وب سایت میتواند شامل یک یا چند بخش مانند سایت اصلی، blog، wiki، بخش دانلود ها و ... باشد. Django به شما توصیه میکند این بخش ها را به شکل اپلیکیشن های جداگانه بسازید تا بتوانید از آنها در پروژه های بعدی خود نیز استفاده کنید.

  3. اپلیکیشن های جدید را register کرده و در پروژه قرار دهید.

  4. برای هر اپلیکیشن url/path mapper بسازید.


در وب سایت کتابخانه ی محلی فولدر های website و project، locallibrary نام داشته و شامل یک اپلیکیشن به نام catalog است. ساختار top level folder را در تصویر زیر مشاهده کنید:


                locallibrary/         # Website folder
                    manage.py         # Script to run Django tools for this project (created using django-admin)
                    locallibrary/     # Website/project folder (created using django-admin)
                    catalog/          # Application folder (created using manage.py)
                

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


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


  1. command shell ( terminal در windows ) را باز کنید. دقت کنید که در محیط مجازی قرار بگیرید.

  2. به مکانی مناسب برای ذخیره ی پروژه ی اپلیکیشن Django خود رفته ( بهتر است ازمکانی استفاده کنی که یافتن آن ساده باشد،مثلا فولدر Documents) و یک فولدر برای وب سایت جدیدتان باز کنید ( در این مثال: django_projects). و سپس به دایرکتوری ایجاد شده بروید:


                                mkdir django_projects
                                cd django_projects
                            
  3. با استفاده از دستور django-admin startproject که در تصویر نمایش داده شده است، پروژه جدیدی ایجاد کرده و به فولدر آن بروید:


                                django-admin startproject locallibrary
                                cd locallibrary
                            

ابزار django-admin فولدر/فایلی به شکل زیر ایجاد میکند:


                    locallibrary/
                        manage.py
                        locallibrary/
                        __init__.py
                        settings.py
                        urls.py
                        wsgi.py
                        asgi.py
                

در حال حاضر باید در دایرکتوری زیر باشید:


../django_projects/locallibrary/
                

sub-folder پروژه locallibrary، نقطه آغاز وب سایت است:


  • __init__.py یک فایل خالی است که باعث میشود Python این دایرکتوری را یک پکیج پایتون در نظر بگیرد.

  • settings.py شامل تمام تنظیمات وب سایت مانند ثبت تمام اپلیکیشن های ایجاد شده، آدرس فایل های static، جزئیات پیکر بندی دیتابیس و ... میباشد.

  • urls.py نگاشت ( mapping) های URL-to-view سایت را تعریف میکند. این بخش میتواند تمامی کد های نگاشت URL را دربر گیرد، اما مشاهده خواهید کرد که معمولا بخشی از آنها را در اپلیکیشن های مشخصی قرار میدهیم.

  • wsgi.py به ارتباط اپلیکیشن Django و وب سرور کمک میکند. میتوانید این بخش را یک boilerplate در نظر بگیرید.

  • asgi.py استاندارد مورد استفاده اپلیکیشن های وب asynchronous (ناهمگام) پایتون برای ارتباط با سرور است. ASGI معادل ناهمگام WSGI است که در اپلیکیشن های همگام و ناهمگام پایتون قابل استفاده است ( اما WSGI تنها استانداردی برای اپلیکشن های همگام است). این استاندارد backward-compatible با WSGI بوده و چندین سرور framework و اپلیکیشن را پشتیبانی میکند.


manage.py برای ایجاد اپلیکیشن، کار با دیتابیس وآغاز به توسعه وب سرور استفاده میشود.


ایجاد اپلیکیشن فهرست (catalog application) در جنگو


برای ایجاد اپلیکیشن فهرست، در پروژه locallibrary قرار گرفته و دستور زیر را اجرا کنید. دقت کنید که این دستور باید در فولدری که فایل manage.py در آن قرار دارد، اجرا شود:


                    python3 manage.py startapp catalog
                

توجه :

دستور بالا برای سیستم عامل های Linux و macOS X. میباشد. در صورت استفاده از Windows از دستور زیر استفاده کنید:


py -3 manage.py startapp catalog
                    

همچنین) در صورت کار با Windows (در ادامه این ماژول، به جای python3 ، py -3 قرار دهید.


اگر از Python نسخه 3.7.0 یا بالاتر استفاده میکنید، به جای دستور بالا، دستور py manage.py startapp catalog را اجرا کنید.


این ابزار یک فولدر جدید ایجاد کرده و فایل هایی از بخش های مختلف اپلیکیشن را( که در مثال زیر bold شده اند) در آن قرار میدهد. اکثر این فایل ها با توجه به کابردشان نام گذاری شده اند( مثلا view ها در view.py ، model ها در model.py ، تست ها در test.py، پیکربندی مدیریت سایت در admin.py و ثبت اپلیکیشن در apps.py) و شامل مقداری کد boilerplate برای کار با اشیا مرتبط اند.


پس از به روز رسانی، دایرکتوری پروژه به شکل زیر خواهد بود:


                    locallibrary/
                        manage.py
                        locallibrary/
                        catalog/
                            admin.py
                            apps.py
                            models.py
                            tests.py
                            views.py
                            __init__.py
                            migrations/
                

فایل های زیر نیز در این دایرکتوری موجودند:


  • فولدر migration، که برای ذخیره ی migration ها استفاده میشوند و به وسیله ی آنها میتوانید با تغییر model ها، به شکل اتوماتیک دیتابیس خود را نیز ویرایش کنید.

  • __init__.py، یک فایل خالی است که باعث میشود Django/Python این فولدر را به عنوان یک Python Package شناسایی کند. همچنین به شما اجازه میدهد از اشیا آن در بخش های دیگر پروژه استفاده کنید.


توجه :

آیا متوجه کمبود فایلی در لیست بالا شدید؟ محل view ها و model ها مشخص شده اند اما محلی برای قرار دادن نگاشت های url، template ها و فایل های static مشخص نشده است. در ادامه می آموزید که این فایل ها را ایجاد کنید( که برای مثال ما لازم است اما ممکن است در وب سایت های دیگر نیازی به آنها نباشد).


ثبت (register) اپلیکیشن catalog در جنگو


حالا که اپلیکیشن را ایجاد کردید، باید آن را با پروژه register کنید تا در زمان اجرای ابزا های دیگر( مانند اضافه کردن مدل ها به دیتابیس) اجرا شوند. برای این کار باید اپلیکیشن را به لیست INSTALLED_APPS موجود در تنظیمات پروژه اضافه کنید.


تنظیمات پروژه را باز کنید


به django_projects/locallibrary/locallibrary/settings.py رفته و لیست INSTALLED_APPS را بیابید. سپس مانند تصویر زیر، یک خط به انتها آن بیفزایید:


                    INSTALLED_APPS = [
                        'django.contrib.admin',
                        'django.contrib.auth',
                        'django.contrib.contenttypes',
                        'django.contrib.sessions',
                        'django.contrib.messages',
                        'django.contrib.staticfiles',
                        # Add our new application
                        'catalog.apps.CatalogConfig', #This object was created for us in /catalog/apps.py
                    ]
                

این خط جدید، شی پیکربندی اپلیکیشن (CatalogConfig) را ، که در زمان ایجاد اپلیکیشن در محل /locallibrary/catalog/apps.py تولید شده است، مشخص میکند.


توجه :

همانطور که مشاهده میکنید، INSTALLED_APPS ( و MIDDLEWARE ) های زیادی در فایل setting موجود اند. این فایل ها از Django administration site و عملکرد های آن ( مانند sessions و authentication و ...)پشتیبانی میکنند.


مشخص کردن دیتابیس در Django


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


در این مثال ما از دیتابیس SQLite استفاده میکنیم، زیرا که نیازی به دسترسی های مکرر هم زمان بر دیتابیس نخواهیم داشت و تنظیم آن نیز بسیار ساده خواهد بود. پیکر بندی دیتابیس در setting.py به شکل زیر است:


                    DATABASES = {
                        'default': {
                        'ENGINE': 'django.db.backends.sqlite3',
                        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
                        }
                    }
                

با توجه به اینکه از SQLite استفاده میکنیم، نیاز به انجام تنظیمات دیگری نداریم.


تنظیمات دیگر پروژه ساخت سایت در Django


فایل setting.py برای تنظیمات دیگری نیز به کار میرود اما در این مرحله تنها کافی است مقدار TIME_ZONE را برابر رشته موجود در List of tz database time zones( مقدارستونTZ ) قرار دهید. مقدار TIME_ZONE را مناسب منطقه زمانی خود انتخاب کنید:


TIME_ZONE = 'Europe/London'
                

دو بخش دیگر در تنظیمات وجود دارد که درحال حاضر نیازی به تغییر آنها نیست اما باید با آنها آشنا شوید:


  • SECRET_KEY. یک کلید مخفی است که به عنوان بخشی از استراتژی امنیت وب سایت Django استفاده میشود. اگر در زمان توسعه از این کد محافظت نکنید، در زمان تولید باید از کدی متفاوت استفاده کنید ( مثلا کدی که در یک فایل و یا یک متغیر قرار داده اید).

  • DEBUG. از این طریق میتوانید در زمان debug،به جای دریافت پاسخ های HTTP code status، log های موجود را در error مشاهده کنید. با توجه به اهمیت اطلاعات debug برای هکر ها، مقدار DEBUG در زمان توسعه باید False قرار داده شود، اما در این مرحله میتوانیم آن را True نیز قرار دهیم .

راه اندازی URL mapper در Django


با ایجاد وب سایت، یک فایل URL mapper به نام urls.py در فولدر پروژه ایجاد میشود. معمولا ایجاد نگاشت ها به اپلیکیشن های مرتبط واگذار میشود اما میتوان برای مدیریت آنها از این فایل نیز استفاده کرد.


locallibrary/locallibrary/urls.py را باز کرده و توضیحات زیر را، که راه هایی برای استفاده از URL mapper را بررسی میکند، مطآلعه کنید:


                    """locallibrary URL Configuration

                    The `urlpatterns` list routes URLs to views. For more information please see:
                        https://docs.djangoproject.com/en/3.1/topics/http/urls/
                    Examples:
                    Function views
                        1. Add an import:  from my_app import views
                        2. Add a URL to urlpatterns:  path('', views.home, name='home')
                    Class-based views
                        1. Add an import:  from other_app.views import Home
                        2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
                    Including another URLconf
                        1. Import the include() function: from django.urls import include, path
                        2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
                    """
                    from django.contrib import admin
                    from django.urls import path

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

نگاشت های URL ازطریق متغیر های urlpatterns، که یک list از توابع path() پایتون میباشد، مدیریت میشوند. هرتابع path() به یک الگو URL برای view مشخصی، که با تطبیق الگو نمایش داده میشود و یا به یک list از کد های تست الگو های URL، مرتبط است ( در حالت دوم، این الگو “base URL” برای الگو های تعریف شده در ماژول هدف خواهد بود). لیست urlpatterns ، در ابتدا، یک تابع برای ایجاد نگاشت بین تمام URL ها و الگو ادمین/ به ماژول admin.site.urls تعریف میکند( admin.site.urls شامل نگاشت های URL تعریف شده در اپلیکیشن Adminstration میباشد).


توجه :

مسیر موجود در path() ، یک الگوی URl قابل تطبیق به شکل یک رشته است. این رشته شامل یک متغیرنام گذاری شده( در <>(، مانند 'catalog//' میباشد. این الگو، URL ای مانند /catalog/any_chars/ and pass any_chars را به شکل رشته ای با نام id، با view تطبیق میدهد. متد و الگو های مسیر یابی در بخش های بعد بررسی خواهند شد.

برای اضافه کرد یک item جدید به لیست urlpatterns ، خطوط زیر را به انتهای فایل اضافه کنید. این item جدید شامل یک path() میباشد که درخواست های الگو catalog/ را به ماژول catalog.urls ( فایلی که شامل URL،catalog/urls.py میباشد) منتقل میکند.


                    """locallibrary URL Configuration

                    The `urlpatterns` list routes URLs to views. For more information please see:
                        https://docs.djangoproject.com/en/3.1/topics/http/urls/
                    Examples:
                    Function views
                        1. Add an import:  from my_app import views
                        2. Add a URL to urlpatterns:  path('', views.home, name='home')
                    Class-based views
                        1. Add an import:  from other_app.views import Home
                        2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
                    Including another URLconf
                        1. Import the include() function: from django.urls import include, path
                        2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
                    """
                    from django.contrib import admin
                    from django.urls import path

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

توجه کنید که ما خط import (from django.urls import include) را به همراه خط کد مرتبط اش قرار داده ایم ( تا دلیل استفاده ی آن مشخص باشد)، اما معمولا تمام خطوط import در بالای فایل پایتون قرار میگیرند.


حالا root URL سایت (127.0.0.1:8000 ) را به 127.0.0.1:8000/catalog/ تغییر میدهیم که تنها اپلیکیشن مورد استفاده در این پروژه است. برای این کار از تابع RedirectView استفاده میکنیم. با استفاده از این تابع URL جدید، با تطبیق الگو URL مشخص شده در تابع path() ( که دراین مثال root URL میباشد)، به اولین آرگومان خود (/catalog/) تغییر مسیر دهد.


خطوط زیر را به انتهای فایل اضافه کنید:


                    #Add URL maps to redirect the base URL to our application
                    from django.views.generic import RedirectView
                    urlpatterns += [
                       path('', RedirectView.as_view(url='catalog/', permanent=True)),
                    ]
                

برای اشاره به ‘/’، اولین پاترامتر تابع path را خالی بگذارید. اگر در اولین پارامتر '/' را قرار دهید، Dajngo با شروع سرور توسعه، هشدار زیر را نمایش خواهد داد:


                    System check identified some issues:

                    WARNINGS:
                    ?: (urls.W002) Your URL pattern '/' has a route beginning with a '/'.
                    Remove this slash as it is unnecessary.
                    If this pattern is targeted in an include(), ensure the include() pattern has a trailing '/'.
                

Django به شکل پیش فرض از فایل های static مانند CSS، JavaScript و image ها استفاده نمیکند. اما این فایل ها میتوانند برای ایجاد وب سایت مفید واقع شوند. در تنظیمات URL mapper، میتوانید با استفاده از خطوط زیر، قابلیت استفاده از فایل های static را فعال کنید.


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


                    # Use static() to add url mapping to serve static files during development (only)
                    from django.conf import settings
                    from django.conf.urls.static import static

                    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
                

توجه :

: راه های زیادی برای گسترش (extend) لیست urlpatterns وجود دارد( در بخش های قبل ما با استفاده از عملگر += یک لیست جدید از item ها ضمیمه کردیم تا بتوانیم کد های جدید و قدیمی را مشخص کنیم ). میتوان این کار را با قرار دادن patter-map زیر در تعریف لیست اصلی، انجام داد:


                        urlpatterns = [
                            path('admin/', admin.site.urls),
                            path('catalog/', include('catalog.urls')),
                            path('', RedirectView.as_view(url='catalog/')),
                        ] + stat
                    

به عنوان آخرین گام، در فولدر catalog، یک فایل به نام urls.py ایجاد کرده و متن زیر را برای تعریف urlpatterns های (خالی) import شده، در آن قرار دهید. در زمان ساخت اپلیکیشن، الگو های ما در این فایل قرار خواهند گرفت:


                    from django.urls import path
                    from . import views

                    urlpatterns = [

                    ]
                

تست کردن framework وب سایت در Django


در حال حاضر، پروژه skeletonما کامل شده است. با اینکه وب سایت هنوزعملکرد خاصی ندارد اما برای اطمینان از انجام درست تغییرات، میتوانیم آن را اجرا کنیم.


قبل از این کار، ابتدا باید یک database migration اجرا کنیم. با این کار دیتابیس ما به روز رسانی شده ( model ها در installed application قرار گرفته) و تعدادی از error های موجود از بین میروند.



اجرای database migration


Django برای نگاشت تعاریف model های موجود در کد Dajngo به ساختمان داده ی استفاده شده در دیتابیس، از Object-Related-Mapper (ORM) استفاده میکند. درصورت ایجاد تغییر در مدل ها، Django آنها را شناسایی کرده و database migration script هایی (در /locallibrary/catalog/migrations/ ( برای تغییر ساختمان داده موجود در دیتابیس ایجاد میکند تا با model هماهنگی داشته باشد.


با ایجاد وب سایت، Django تعدادی model، که توسط بخش admin سایت استفاده میشود، ایجاد میکند ( که بعدا آنها را بررسی میکنیم). با اجرای کد های زیر ( در دایرکتوری شامل manage.py)، جداولی برای این model ها در دیتابیس ایجاد کنید :


                    python3 manage.py makemigrations
                    python3 manage.py migrate
                

مهم :

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


دستور makemigrations ، برای تمام اپلیکیشن های نصب شده در پروژه شما migration میسازد( اما اجرا نمیکند). اگر بخواهید migration را فقط برای یک اپلیکیشن اجرا کنید، میتوانید از نام آن اپلیکیشن استفاده کنید و از این طریق، کد migration ها را پیش از اجرا بررسی کنید و اگر متخصص استفاده از Django باشید، حتی میتوانید آنها را قدری تغییر دهید!


دستور migrate ، migration ها را بر دیتابیس شما اعمال کرده و Django این تغییرات اعمال شده بر دیتابیس مورد استفاده را پیگیری میکند.



راه اندازی وب سایت


در زمان توسعه، میتوانید ابتدا از development web server استفاده کرده و سپس سایت را بر browser خود مشاهده کنید.


توجه :

development web server، کارایی و قدرت کافی برای استفاده در مرحله تولید را ندارد، اما در مرحله توسعه میتوان از آن برای اجرا و تست سریع استفاده کرد. به شکل پیش فرض این سرور از کامپیوترمحلی خودتان (http://127.0.0.1:8000/) استفاده میکند اما میتوانید کامیوتر دیگری نیز در شبکه خود برای آن مشخص کنید.



با فراخوانی دستور runserver، development web server را ( در دایرکتوری شامل manage.py ) راه اندازی کنید:


                    python3 manage.py runserver

                     Performing system checks...

                     System check identified no issues (0 silenced).
                     August 15, 2018 - 16:11:26
                     Django version 2.1, using settings 'locallibrary.settings'
                     Starting development server at http://127.0.0.1:8000/
                     Quit the server with CTRL-BREAK.
                

با راه اندازی سرور، میتوانید در browser خود به http://127.0.0.1:8000/ رفته و سایت خود را مشاهده کنید. با این کار یک صفحه error به شکل زیر مشاهده خواهید کرد:


صفحه Django Debug برای Django 2.0

نگران نباشید! این error به علت نبود تعاریف page/url در ماژولcatalog.urls ایجاد میشود ( که در زمان ایجاد یک URL در root سایت به آن باز میگردیم).


توجه :

صفحه ای که مشاهده کردید قابلیت automated debug logging را در Django نمایش میدهد. با یافت نشدن صفحه، Django یک error با اطلاعاتی مفید بر صفحه نمایش میدهد. در تصویر بالا مشاهده میکنید که URL ما با هیچ یک از الگو های (لیست شده ) موجود مطابقت ندارد. logging در حالت تولید ( که سایت در وب قرار میگیرد) متوقف خواهد شد و در آن حالت صفحه ای user-frienly اما با اطلاعات کمتر، نمایش داده میشود.


حالا میدانیم که Django به درستی کار میکند!


توجه :

با هر تغییر قابل توجه ایجاد شده در سایت، باید migration ها را دوباره اجرا کنید.

خودتان را به چالش بکشید


دایرکتوری catalog/ شامل فایل هایی برای view ها، model ها و بخش های دیگر اپلیکیشن است. این فایل ها را باز کرده و boilerplate ها را بررسی کنید.


همانطور که مشاهده کردید، نگاشت URL برای سایت Admin به urls.py پروژه اضافه شده است. در صفحه browser خود به محیط admin رفته و نتیجه را مشاهده کنید ( میتوانید URL صحیح را در نگاشت ها بیابید).


خلاصه:

حالا یک پروژ skeleton ایجاد کرده اید و میتوانید url ها، model ها ، view ها و template های دلخواه خود را در آن قرار دهید.


با کامل شدن بخش پایه پروژهLocal Library website ، میتوانید کد های وب سایت را بنویسیم.


  • 117
  •    212
  • تاریخ ارسال :   1399/10/22

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

ارسال

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

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