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

سلام

درون فولدر boards/tests یک فایل با نام test_view_edit_post.py ایجاد می کنیم. قسمتی که باید تغییر کرده و اضافه شود به شکل زیر است.

boards/tests/test_view_edit_post.py (مشاهده کد کامل)

فعلاً مهم ترین بخش PostUpdateViewTestCase به عنوان کلاسی است که برای استفاده چند باره میان سایر موارد تست تعریف شده است. این مورد شامل تنظیمات اولیه، ساخت کاربران، تاپیک ها، بوردها و… است.

کلاس LoginRequiredPostUpdateViewTests بررسی می کند که آیا ویوی مربوطه با دکوراتور login_required@ محافظت شده است یا خیر. همانطور که می دانید فقط کاربران معتبر امکان دسترسی به این صفحه را دارند.

کلاس UnauthorizedPostUpdateViewTests یک کاربر جدید ایجاد می کند. کاربری که با نویسنده و ایجاد کنندۀ پست متفاوت بوده و سپس تلاش می کند به قسمت ویرایش صفحه وارد شود. طبیعی است که برنامه فقط به کاربری اجازه تغییر و ویرایش پست را می دهد که آن پست توسط همان کاربر ایجاد شده باشد.

تست را اجرا می کنیم:

اول از همه مشکل بوجودآمده با دکوراتور login_required@ را حل می کنیم. روش استفاده از دکوراتورهای ویو در ویوهای مبتنی بر کلاس کمی متفاوت بوده و به importهای اضافه نیاز است.

boards/views.py (مشاهده کد کامل)

کلاس ها را نمی توان مستقیما با دکوراتور login_required@ محدود کرد. برای این کار باید از ابزار method_decorator@ استفاده کرده و در این ابزار دکوراتور یا دکوراتورهای خود را به کلاس معرفی و بگوییم کدام متد نیاز به محدودسازی و دکورشدن دارد.

در ویوهای مبتنی بر کلاس استفاده از متد dispatch به عنوان دکوراتور، مرسوم و رایج است. این مورد یک متد داخلی در جنگو است که در کلاس ویو تعریف شده است. تمام درخواست ها از این متد عبور می کنند. یعنی ما می گوییم که دکوراتور login_required@ را روی متد dispach اعمال کن و از طرفی تمام متدها هم از dispatch عبور کرده و به این ترتیب مثل این است که دکوراتور login_required@را قبل از تمام متدها قرار داده باشیم.

فرمان تست را اجرا می کنیم.

اوکی! مشکل login_required@ را حل کردیم. حالا مشکل ویرایش تمام پست ها توسط هر کاربر را داریم.

بهترین راه برای حل این مشکل توقف سازی متد get_queryset در UpdateView است. متد اصلی را می توانید در لینک UpdateView#get_queryset مشاهده کنید.

boards/views.py (مشاهده کد کامل)

در خط ()queryset = super().get_queryset از متد get_queryset از کلاس والد استفاده دوباره کرده ایم و کلاس والد همان کلاس UpateView است.

سپس به کوئری ست خود یک فیلتر اضافه می کنیم که به واسطۀ این فیلتر پست ها را بر اساس کاربری که وارد سیستم شده غربال کرده و در شی request قابل دسترسی است.

دوباره تست می کنیم.

ایول!!

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

 

مطلب بعدی: ویوی لیست | List View

مطلب قبلی: ویوی بروزرسانی | Update View

بدون دیدگاه

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

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

جنگو
پیکربندی گواهینامۀ https

سلام حالا می خواهیم برنامۀ خودمان را با گواهینامۀ https امن کنیم. ساده ترین کار برای انجام آن Let’s Encrypt است. قبل از Let’s Encrypt هرگز تنظیمات https به این راحتی نبوده و مهمتر اینکه اینکار کاملاً رایگان است. آن ها راه حلی به نام certbot را ارائه داده اند …

جنگو
پیکربندی سرویس ایمیل

سلام یکی از بهتر سرویس دهنده های ایمیل Mailgun با قابلیت ۱۲ هزار ایمیل رایگان در ماه است. به صورت رایگان ثبت نام کنید. برای اینکار باید آن را با سرویس دهندۀ دامین خود تنظیم کنید که در این آموزش از tamadon.org استفاده شده است. حالا اولین رکورد DNS را …

جنگو
پیکربندی NGINX

سلام کار بعدی که قرار است انجام شود؛ تنظیمان Nginx به شکلی است که پاسخگویی و سرویس دهی مربوط به فایل های استاتیک را خود انجام دهد و سایر درخواست ها را به Gunicorn بفرستد. یک فایل پیکربندی با نام boards را درون /etc/nginx/sites-available/ و با محتوای زیر اضافه می …

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