دسترسی به روابط کاربر جاری در کلاس بیس ویو

ساخت وبلاگ
سلام و عرض ادب خدمت اعضای محترم کانال

بنده تا به حال هرچی کد می نوشتم با فانکشن بیس ویو ها می نوشتم(FBV)

اما متوجه شدم که استفاده از class ها می تونه در کدنویسیه تمیز به من کمک کنه و کدهارو از اشفتگی در بیاره.
مخصوصا زمانیکه قرار هست اطلاعاتی رو از طریق فرم از کاربر بگیرم. برای این کار من قالب زیر استفاده می کنم:

from django.http import HttpResponseRedirectfrom django.shortcuts import render
from django.views.generic import View
from .forms import MyForm

class MyFormView(View):
form_class = MyForm
initial = {'key': 'value'}
template_name = 'form_template.html'

def get(self, request, *args, **kwargs):
form = self.form_class(initial=self.initial)
return render(request, self.template_name, {'form': form})

def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
# <process form cleaned data>
return HttpResponseRedirect('/success/')
return render(request, self.template_name, {'form': form})

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

من همان ابتدای کار یعنی قبل از اینکه فرمی را برای کاربر بفرستم نیاز دارم کاربر جاری را در اختیار داشته باشم تا از طریق این کاربر کوئری هایی رو پایگاه داده بزنم و فرم ها را
با اطلاعات مناسب برای کاربر بفرستم من این کار را سابقا در FBV ها به این شکل انجام می دادم:

current_user = request.user

و به همین راحتی می توانستم از current_user استفاده کنم و اطلاعاتی که می خواهم را از پایگاه داده بیرون بکشم . اما حالا که با کلاس بیس ویو ها کار می کنم می بینم که
فقط درون متدهای get و post است که به request دسترسی دارم پس من باید درون هرکدام از اینها به پایگاه داده کوئری بزنم . یعنی یک بار قبل از ارسال فرم ها و یک بعد از تحویل
گرفتن فرم های ارسال شده از سوی کاربر.

متوجه تفاوت شدید؟ در فانکشن بیس برای اینکه بتوانم به instance مقدار دهی کنم فقط یک بار از پایگاه می خواندم اما در کلاس بیس باید دوبار از پایگاه بخوانم که
این به وضوح مراوده ی مرا با پایگاه دو برابر کرده است.

حالا شما راه حلی برای این مشکل سراغ ندارید؟ منظورم این است که اگر من می توانستم در خارج از متد های get و post به کاربر جاری دسترسی داشته باشم دیگر فقط یک بار مطالب را از پایگاه می خواندم و در هر دو متد هم دسترسی داشتم .

خیلی ممنون

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

برچسب : نویسنده : محمد رضا جوادیان programers بازدید : 195 تاريخ : چهارشنبه 29 آذر 1396 ساعت: 10:36