کار با urlها در جنگو

کار با urlها در جنگو

بدون ديدگاه

کار با urlها در جنگو

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

تو آموزش قبلی با مدل های جنگو آشنا شدیم و نحوه نوشتن مدل ها و انواع رابطه ها رو یاد گرفتیم. تو این آموزش قصد داریم به مبحث url ها در جنگو بپردازیم.

url چیست؟

یک url  همون آدرس وبه که هر زمان که شما به یک وبسایت وارد میشید، اون رو در قسمت آدرس مرورگرتون مشاهده می کنید. برای مثال url پیش فرضی که سرور جنگو رو بالا میاره ۱۲۷٫۰٫۰٫۱:۸۰۰ هستش.

وظیفه اصلی url ها تو جنگو اینه که یک pattern یا url که در مرورگر وارد میشه رو به یک view متصل کنند. هر url از دو بخش اصلی تشکیل میشه. بخش اول مربوط به  pattern  یا الگوییه که قراره به اون مرتبط بشه و بخش دوم نام یک تابع یا کلاس view  هست که برای اجرا فراخوانی میشه.  اگر view مربوطه رو با تابع پیاده سازی کرده باشید، تو این قسمت باید اون رو به شکل views.FunctionName فراخوانی کنین و اگر با کلاس پیاده سازی کرده باشید، باید به شکل () views.ClassName.as_view فراخوانی کنید.

اگر شما یک پروژه جنگو ایجاد کنید ( که تو آموزش های قبلی به اون پرداختیم)، در داخل پوشه پروژه یک فایل با نام urls.py وجود داره که به صورت پیش فرض داده های زیر رو داخلش داره :

کار با urlها در جنگو

تو این فایل یک url پیش فرض برای صفحه ادمین تعریف شده که به جنگو میگه اگر در قسمت آدرس مرورگر الگوی ‘admin’ بعد از آدرس سایت نوشته شد، admin.site.urls رو فراخوانی کن تا کاربر رو به صفحه مربوط به ادمین هدایت کنه. همچنین تو این فایل یک سری کامنت هایی وجود داره که نحوه نوشته شدن بقیه url ها رو توضیح داده. همه ی url های شما باید داخل urlpatterns نوشته بشن و همچنین با استفاده از متد path  تعریف بشن.

مثال 

به مثال زیر دقت کنید. این مثال مربوط به یک سیستم مقالاته که می تونید با وارد کردن سال، ماه و موضوع مقاله  در قسمت آدرس مرورگر، به مقاله های منتشر شده در هر سال و ماه دسترسی داشته باشید :

 

from django.urls import path

from . import views

urlpatterns = [
path('articles/2003/',views.special_case_2003),
path('articles/<int:year>/',views.year_archive),
path('articles/<int:year>/<int:month>/,views.month_archive);
path('articles/<int:year>/<int:month>/<slug:slug>/',views.articles_detail),
]

همونطور که می بینید تو این مثال چهار url تعریف شده که هر کدوم یک آدرس رو برای سیستم جنگو معرفی میکنن. تو خط اول متد path از django.urls ایمپورت شده تا برای تعریف urlها استفاده بشه. خط بعدی فایل views  رو ایمپورت کرده تا  view مربوط به هر url فراخوانی بشه.

تو خط اول در داخل urlpatterns  گفته شده که اگر الگوی ” articles/2003//127.0.0.1:800 ” تو قسمت آدرس مرورگر نوشته شد، تابع special_case_2003 رو برای اجرا فراخوانی کن.

تو خط دوم گفته شده اگر الگوی  “<articles/<int:year”  تو قسمت آدرس مرورگر نوشته شد، تابع year_archive رو با توجه به سال نوشته شده در آدرس فراخوانی کن. تو این خط year با استفاده از تبدیل کننده int  به عنوان یک عدد از مرورگر گرفته میشه و به عنوان آرگومان برای view مربوط به اون url فرستاده میشه.  برای مثال اگر آدرس “articles/1999” نوشته بشه، این url  تابع مربوطه رو به شکل (year_archive (year = 1999 فراخوانی میکنه.

url نوشته شده تو خط سوم کمک میکنه تا کاربر بتونه مقاله ها رو بر حسب سال و ماه فیلتر کنه. اینجا علاوه بر year، month هم به عنوان آرگومان دوم برای view مربوطه ارسال میشه.

برای مثال آدرس “articles/2000/5”  تابع month_archive رو به شکل (month_archive(year=2000 , month=5 فراخوانی میکنه.

خط آخر هم به کاربر امکان جستجو بر اساس سال، ماه و موضوع مقاله رو میده. تو این خط هم علاوه بر ماه و سال، موضوع مقاله هم با تبدیل کننده slug گرفته میشه و برای تابع view فرستاده میشه.

برای مثال آدرس “articles/2000/3/what_is_django ” تابع (” article_detail(year=2000,month=3, slug=”what_is_django را فراخوانی می کند و مقاله مربوطه  که در ماه سوم سال ۲۰۰۳ منتشر شده رو نشون میده.

عبارات منظم (RegEx)

عبارات منظم یا همون Regular expression یک سری عبارت هستن که با استفاده از اونها میتونید به متنی که قراره در قسمت  url  نوشته بشه، یک سری قاعده و الگو بدید. کتابخونه re در پایتون به همین منظور استفاده میشه. تو جنگو هم با استفاده از متد re_path (به جای path ) میتونید الگوی url رو بر اساس عبارات منظم تعیین کنید. برای مثال اگه بخوایم مثال بالا مربوط به سیستم مقالات رو با استفاده از عبارات منظم بنویسیم و یه سری محدودیت برای طول اعداد سال و ماه در نظر بگیریم،باید اونو به شکل زیر بنویسم.

 

from django.urls import path, re_path

from . import views

urlpatterns = [
path('articles/2003/',views.special_case_2003
re_path(r'^articles/(?P<year>[0-9]{4})/$, views.year_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$',views.month_archive),
re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.articles_detail),
]

همون طور که می بینید اینجا محدودیت ۴ رقم برای سال و ۲ رقم برای ماه در نظر گرفته شده.

به عنوان یک مثال دیگه فرض کنید میخواید یک url  برای اسم user تعریف کنید که میتونه ترکیبی از حروف، اعداد، خط تیره و آندرلاین باشه. در این صورت می تونید از عبارات منظم به شکل زیر استفاده کنید :

 

from django.urls import re_path

from . import views

urlpatterns = [

re_path(r'^users/(?P<username>[a-z0-9_-]{4,8})/$, views.user_detail),
]

اینجا منظور از عبارت نوشته شده اینه که عبارتی که قراره بعد از /users نوشته بشه میتونه حاوی حروف a تا z ، اعداد ۰ تا ۹، -و _ باشه و طول این عبارت هم باید بین ۴ تا ۸ کاراکتر باشه. برخی از مهم ترین عبارات منظمی که تو url های جنگو استفاده میشن به همراه یه سری توضیحات تو تصویر زیر اومده که برای آشنایی بیشتر میتونید مطالعش کنید.

خب تو این مقاله هم با url ها آشنا شدیم و فهمیدیم چجوری میتونیم url های پروژمون رو تعریف کنیم. تو مقاله های بعدی نحوه نوشتن view مربوط به url ها رو هم توضیح میدیم.

برای مطالعه مقالات بیشتر در زمینه پایتون کلیک کنید.

منبع خارجی در زمینه پایتون

 

نوشتن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد.