سایت شخصی ایمان سلمانی

حاج محمد ابراهیم همت

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

نوشتن اولین برنامۀ جنگو - قسمت 1

بیایید با مثال یاد بگیریم

در طول این آموزش به ساخت برنامهٔ نظرسنجی می‌پردازیم. که شامل دو بخش است:
1- سایت عمومی که به مردم امکان می دهد نظرسنجی ها را مشاهده کنند و به آنها رای دهند.
2- سایت مدیریتی که به شما امکان اضافه کردن، تغییر و حذف نظرسنجی ها را میدهد.

باید جنگو نصب شده باشد، می‌توانید با اجرای دستور زیر درترمینال بفهمید که آیا جنگو نصب شده یا نه، اگر نصب شده با چه نسخه‌ای ($ نشانگر ترمینال است):

$ python -m django --version

 

اگر Django نصب شده باشد، باید نسخه جنگوی نصب شدهٔ خود را ببینید. اگر نصب نباشد با خطای  "No module named django"(ماژولی با این نام نیست) مواجه می‌شوید.

این آموزش برای Django 1.11 و Python 3.4 یا بالاتر نوشته شده است. اگر نسخهٔ دیگری از آن را دارید، می توانید به مستندات آن مراجعه کرده،  آموزش‌های مرتبط با آن را پیدا کنید (اگر دوست داشتید برایم پیام بفرستید تا کمکتان کنم.) ، یا Django را به جدیدترین نسخه بروز کنید. اگر هنوز از Python 2.7 استفاده می کنید، باید کمی نمونه های کد را تنظیم کنید.

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


برای دریافت کمک کجا برم:

اگر در این آموزش مشکلی برایتان پیش آمد با می‌توانید با من مطرح کنید یا به django-users بروید و یا بر روی #django روی irc.freenode.net رد کنید تا با دیگر کاربران جنجو که ممکن است بتوانند به آن کمک کنند چت کنید

در #django داخل irc.freenode.ir با دیگر کاربران جنگو مطرح کنید.


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

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

داخل خط فرمان با دستور cd به پوشه ای که می خواهید کد خود را ذخیره کنید بروید، سپس دستور زیر را اجرا کنید:

 $ django-admin startproject mysite


یک دایرکتوری mysite در دایرکتوری فعلی شما ایجاد می کند. اگر این کار را نکرد، به خطا های در حین اجرای django-admin مراجعه کنید.


توجه داشته باشید

شما نباید از نام هایی  مثل django و python و اجزای آن ها در نام گزاری پروژه استفاده کنید، به این معنا است که شما باید از نام هایی مانند django (که با خودش در گیری دارد) یا test (که نام یک بستهٔ پایتون است) استفاده نکنید.



کد ها باید کجا باشند؟
اگر قبلاً به صورت ساده از PHP استفاده می‌کرده اید (بدون استفاده از چارچوب مدرن)، احتمالا شما برای قرار دادن کد، ریشه سند وب سرور (در یک مکان مانند / var / www) را انتخواب می‌کرده اید. با جنگو، شما این کار را انجام نمی دهید. ایده خوبی نیست که کد های پایتون را در ریشه سند وب سرور خود قرار دهید، زیرا احتمال اینکه افراد بتوانند کد شما را از طریق وب ببینند زیاد است. این برای امنیت خوب نیست.
کد های خود را در برخی از شاخه های خارج از ریشه سند، مانند / home / mycode قرار دهید.



بیایید نگاهی به طرح اولیه بیندازیم:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

این فایل ها عبارتند از:

  1- دایرکتوری خارجی mysite  فقط یک ظرف برای پروژه شماست. نام آن برای جنگو مهم نیست شما می توانید آن را به هر چیزی که دوست دارید تغییر نام دهید.
  2-  manage.py: یک ابزار خط فرمان است که به شما امکان می دهد تا با پروژه جنگو به روشهای مختلف ارتباط برقرار کنید. شما می توانید تمام جزئیات مربوط به manage.py در django-admin  and manage.py را بخوانید.
  3-  دایرکتوری داخلی mysite  در‌ واقع بستهٔ پایتون واقعی پروژه شماست. نام آن را تغییر ندهید. به نام آن برای import کردن چیزی که داخلش است نیاز است(mysite.urls).
  4- mysite / __ init__.py: یک فایل خالی است که به پایتون می گوید که این پوشه باید یک بسته پایتون در نظر گرفته شود. اگر شما در پایتون متدی هستید، می‌توانید با مراجعه به اسناد پایتون دربارهٔ بسته های پایتونی اطلاعات بیشتری کسب کنید.
  5- mysite / settings.py: فابل تنظیمات و پیکربندی برای یک پروژه جنگو. تنظیمات جنگو به شما در مورد نحوه کارکرد تنظیمات اطلاع خواهد داد.
  6-  mysite / urls.py: طرح URL برای پروژه جنگو؛ یک "جدول محتویات" برای سایت شما. شما می توانید اطلاعات بیشتر در مورد URL ها را در dispatcher URL بخوانید.
  7-  mysite / wsgi.py: نقطه ورود برای وب سرورهای سازگار با WSGI برای خدمت به پروژه شما. برای اطلاعات بیشتر به نحوه استقرار WSGI مراجعه کنید.

سرور توسعه

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

$ python manage.py runserver

خروجی زیر را در خط فرمان مشاهده خواهید کرد:

Performing system checks...
System check identified no issues (0 silenced).
 
You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.
 
November 01, 2017 - 15:50:53
Django version 1.11, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

 

توجه داشته باشید

در حال حاضر اخطار در مورد مهاجرت (migrate) پایگاه داده های غیر کاربردی را نادیده بگیرید ما به زودی با پایگاه داده برخورد خواهیم کرد.

شما سرور Development Django را ایجاد کرده اید، یک وب سرور سبک وزن که فقط با پایتون نوشته شده است. این برای این است که بتوانید به سرعت توسعه بپردازید و  نیاز به تنظیم پیکربندی یک سرور مانند Apache نداشته باشید تا زمانی که پروژه آماده تولید نباشد.


اکنون زمان خوبی برای یادآوری است: از این سرور برای هر چیزی استفاده نکنید. این فقط برای استفاده در حین توسعه در نظر گرفته شده است. (جنگو در زمینه ساخت چارچوب وب هست، نه سرورهای وب.)

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



تغییر پورت

به طور پیش فرض، دستور runerver سرور توسعه را بر روی IP داخلی در پورت 8000 راه اندازی می کند.

اگر می خواهید پورت سرور را تغییر دهید، آن را به عنوان یک آرگومان خط فرمان منتقل کنید. به عنوان مثال، این دستور سرور را در پورت 8080 آغاز می کند:

$ python manage.py runserver 8080

اگر می خواهید IP سرور را تغییر دهید، آن را با پورت منتقل کنید. به عنوان مثال، برای داشتن تمام IP های عمومی موجود (که مفید است اگر شما در حال اجرا Vagrant یا نشان دادن کار خود بر روی کامپیوتر های دیگر در شبکه)، استفاده کنید:

$ python manage.py runserver 0:8000

0 یک میانبر برای 0.0.0.0 است. اسناد کامل برای سرور توسعه می تواند در مرجع runerver یافت شود.



بارگزاری اتوماتیک از runeserver

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


ایجاد برنامه نظرسنجی
حالا که محیط شما - "پروژه" - تنظیم شده است، ساخت برنامه را شروع می کنیم.

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

پروژه ها در مقابل برنامه ها
تفاوت بین یک پروژه و یک برنامه چیست؟ یک برنامه یک برنامه وب است که کاری انجام می دهد - مثلا یک سیستم وبلاگ، یک پایگاه داده از پرونده های عمومی یا یک برنامه نظرسنجی ساده. یک پروژه مجموعه ای از پیکربندی و برنامه ها برای یک وب سایت خاص است. یک پروژه می تواند شامل چندین برنامه باشد. یک برنامه میتواند در پروژههای مختلفی به کار رود.

برنامه های شما می توانند در هر نقطه از python path شما کار کنند. در این آموزش، برنامه نظرسنجی ما درست در کنار فایل manager.py شما ایجاد می کنیم تا بتوان آن را به عنوان یک ماژول سطح بالای خود وارد کرد، نه یک زیرماژول از mysite.

برای ایجاد برنامه خود، مطمئن شوید که در همان دایرکتوری به عنوان manage.py قرار دارید و این دستور را تایپ کنید:

$ python manage.py startapp polls

پوشهٔ نظر سنجی باید به این شکل باشد:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

این ساختار دایرکتوری برنامه نظرسنجی را به نمایش می گذارد.
بگذارید اولین view را بنویسیم. فایل polls / views.py را باز کنید و کد پایتون زیر را در آن قرار دهید:

polls/views.py
from django.http import HttpResponse
 
def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

این ساده ترین view ممکن در جنگو است. برای تماس با view، ما باید آن را به یک URL ارجاع دهیم - و برای این منظور ما باید یک URLconf داشته باشیم.

برای ایجاد URLconf در دایرکتوری نظرسنجی، یک فایل با نام urls.py ایجاد کنید. در حال حاضر پوشه برنامه شما باید چنین شکلی داشته باشد:

polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

 فایل polls / urls.py  کد های زیر را وارد کنید:

polls/urls.py from django.conf.urls import url
from . import views
urlpatterns = [     url(r'^$', views.index, name='index'), ]

گام بعدی این است که polls.urls را در URLconf ریشه ارجاع دهید. در mysite / urls.py،   django.conf.urls.include را import کنید و include() را در لیست urlpatterns وارد کنید، مانند کد های پایین:

mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin
 
urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

تابع include () اجازه می دهد تا سایر URLconf ها را ارجاع دهید. توجه داشته باشید که عبارات منظم برای تابع include () دیگر $ (کاراکتر مطابقت رشتهٔ نهایی) ندارد، بلکه از یک علامت slash  استفاده می شود.

ایده include() این است که URL ها آسان را کند. از آنجا که نظرسنجی ها در URLconf خود هستند (polls / urls.py)، آنها می توانند تحت "/ polls /" یا زیر "/ fun_polls /" یا تحت "/ content / polls /" یا هر ریشه مسیر دیگر قرار می گیرند و برنامه هنوز هم کار خواهد کرد.


اسفاده از include

شما همیشه باید از include استفاده کنید. admin.site.urls تنها استثنا است.



با آنچه می بینید مطابقت ندارد

اگر می بینید که include(admin.site.urls) به جای admin.site.urls به خاطره این است که در یک نسخه از جنگو از استفاده شده است. شما می توانید یا به آموزشی قدیمی تر بروید و یا نسخه جدیدتر را نصب کنید.



شما اکنون نمایه فهرست را به URLconf منتقل کرده اید. اجازه دهید متمعن شویم که کار می کند، دستور زیر را اجرا کنید:

$ python manage.py runserver


در مرورگر خود به http: // localhost: 8000 / polls / برو، باید متن "Hello, world. You’re at the polls index."، که شما در index view تعریف کردید.

آرگوان های تابع url
تابع url () چهار آرگومان دارد، که دو مورد واجب: regex و view، و دو اختیاری: kwargs و name است. در این مرحله ببرسی این ۴ آرگومان می‌پردازیم.


url () argument: regex
اصطلاح "regex" یک فرم کوتاه معمولی است که به معنی "عبارات منظم"(regular expression) است که یک نحو برای تطبیق الگوها در رشته ها و یا در این مورد، الگوهای URL است. ابتدا عبارات منظم را بنویسید جنگو اول آن‌ها را بررسی می‌کند تا آنکه با url متابقت دارد را بررسی کند.

توجه داشته باشید که این عبارات منظم، پارامترهای GET و POST یا نام دامنه را جستجو نمی کنند.

اگر به عبارات منظمی نیاز دارید، به ویکیپدیا و مستندات ماژول re نگاه کنید. همچنین، کتابMastering Regular Expressions ازJeffrey Friedl عالی است. در عمل، لازم نیست یک متخصص در عبارات منظم باشید، شما فقط باید یاد بگیرید چگونه الگو های ساده را به سازید. در واقع، regexes پیچیده می توانند عملکرد جستجوی ضعیف داشته باشند، بنابراین احتمالا نباید به تمام قدرت  regexes تکیه کنید.

در نهایت، یادآوری عملکرد: این عبارات منظم، اولین بار که ماژول URLconf بارگذاری می شود، کامپایل می شوند. آنها فوق العاده سریع هستند (تا زمانی که جستجوها خیلی پیچیده نیستند همانطور که در بالا ذکر شد).


url () argument: view
هنگامی که جنگو یک عبارت منظم را پیدا می کند، جانگو تابع view مشخص شده را با یک شی HttpRequest به عنوان اولین آرگومان و هر مقدار "captured" از عبارات منظم به عنوان آرگومان بعدی فراخوانی می کند. اگر regex از captures های ساده استفاده کند، مقادیر به عنوان آرگومان موقعیتی منتقل می شوند؛ اگر با استفاده از captures نامیده می شود، مقادیر به عنوان آرگومان های کلیدی منتقل می شوند.


url () argument: kwargs
آرگومان کلیدی واژه های دلخواه را ازdicttionary به view منتقل می کند. ما نمی خواهیم از این ویژگی از جنگو در آموزش استفاده کنیم.


url () argument: name
نامگذاری نشانی اینترنتی به شما اجازه می دهد تا به طور غیرمستقیم از جاهای دیگر در جنگو به ویژه از داخل قالب ها استفاده کنید.

هنگامی که شما با request و جریان respounse راحت هستید، نوشتن اولین برنامه با جنگو قسمت ۲  را بخوانید تا شروع به کار با پایگاه داده کنید.

 

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی