URLهای پیشرفته

سلام

برای ساخت آدرس‌های پویا استفاده می شود. برای مثال ساخت آدرس پروفایل‌ها که در آن می‌خواهیم نام کاربر در آدرس قرار گیرد و او را به صفحۀ خود ارجاع دهد. مثل http://twitter.com/Libogram. برای این کار به شکل زیر عمل می کنیم:

با توجه به اینکه گفته شد در فایل urls.py بعد از اولین تطبیق، جنگو به کار خود پایان می دهد بنابراین در صورتی که ما یک صفحه به نام about  داشته باشیم و همزمان کاربری نیز با نام about وجود داشته باشد؛ تکلیف چیست؟

یک راه این است که به جای عبارت بالا قبل از آدرس پروفایل یک مسیر انتزاعی با نام /username/ ایجاد کنیم یا مثل بعضی از سایت‌ها قبل از حساب کاربری یک @ قرار دهیم. مثل http://mysite.com/@Libogram که البته در بسیاری از سایت‌های بزرگ مرسوم نیست. مخلص کلام اینکه باید قبل از ساخت آدرس بالا، آدرس صفحۀ about را مشخص کنیم.

نکته اینکه  اگر کاربری با نام about وجود داشته باشد نمی‌تواند صفحۀ پروفایل خود را از این طریق مشاهده کند!! این اتفاق در گیت‌هاب افتاده و کاربری با نام watching وجود دارد که نمی تواند صفحۀ خود را مستقیماً ببیند!

البته بهترین راه این است که یک بلک لیست برای نام کاربران وجود داشته باشد و کسی نتواند آن‌ها را رزرو یا ایجاد کند. لیستی از این نام‌های کاربری را می توان در آدرس‌ زیر یافت:

https://github.com/shouldbee/reserved-usernames/blob/master/reserved-usernames.csv

مثالی از نحوۀ پیاده‌سازی آن هم در جنگو در آدرس https://github.com/vitorfs/parsifal/blob/master/parsifal/authentication/forms.py#L6 وجود دارد.

برگردیم به پروژۀ خودمان. قصد داریم با استفاده از آیدیِ یک بورد، لیستِ تاپیک‌های آن بورد را نمایش دهیم.

ریجکس \d+ به عنوان integer است. این عدد برای مشخص‌کردن و بیرون‌کشیدن بورد از دیتابیس کارآیی دارد. همچنین ریجکس (?P<pk>\d+) به این معناست که این عدد را در متغیر pk قرار دهد. در تابع view نیز برای استفاده از این متغیر به شکل زیر عمل می کنیم:

با توجه به اینکه از ریجکس (?P<pk>\d+) استفاده شده در تابعِ ویو نیز حتماً باید از همین اسم استفاده کنیم. اگر نخواهیم خودمان را به این اسم مقید کنیم نباید در ریجکس متغیری را تعریف کنیم. یعنی:

و حالا در تابعِ view از هر نامی می‌شود استفاده کرد. مثلاً:

یا:

نکته: pk به نمایندگی از primary key آمده است. جنگو به صورت خودکار برای هر مدل، یک فید از نوع AutoField با نام id ایجاد می‌کند که این فیلد به عنوان کلید اصلی در نظر گرفته می‌شود. اما اگر بخواهیم برای یک مدل کلید اصلی دیگری مثل ایمیل اختصاص دهیم باید به صورت جداگانه آن را مشخص کنیم. برای دسترسی به آن هم که باید از email یا نظیر آن استفاده شود.

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: استفاده از APIها در URL

مطلب قبلی: URLهای ابتدایی و ساده 

بدون دیدگاه

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

جنگو
تنظیمات دیتابیس PostgreSQL

سلام ابتدا به کاربر Postgres سوییچ می کنیم. sudo su – postgres یک حساب کاربری برای دیتابیس می سازیم. createuser u_boards یک دیتابیس جدید ساخته و نام کاربری بالا را برای آن تنظیم می کنیم. createdb django_boards –owner u_boards یک پسورد قوی برای کاربر انتخاب می کنیم. psql -c “ALTER …

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

ساخت کاربر برای برنامه با دستور زیر کاربر جدید را می سازیم. adduser boards من معمولاً نام برنامه را برای نام کاربری انتخاب می کنم. پسورد و سایر اطلاعات اضافی که از شما می خواهد را وارد کنید. حالا نام کاربری را به لیست sudoer ها (حساب های کاربری با …

جنگو
توسعه و پیکربندی VPS در دیجیتال اوشن

سلام شما ممکن است قصد استفاده از هر نوع VPSای را داشته باشی و این هیچ عیبی ندارد. نکتۀ مهم آن است که تنظیمات را مشابه من انجام دهید. سیستم عامل روی سرور، اوبونتوی ۱۶.۰۴ است. در مرحلۀ اول یک سرور جدید (در دیجیتال اوشن به آن Droplet می گویند.) …

هرگونه استفادۀ از این آموزش به صورت رایگان و با ارجاع به تمدن جایز است.