#4
Rza#auth_framework
- جنگو یک فریم ورک احراز هویت داره ، که میتونه احراز هویت کاربران ، سشن ها ، شرط ها و گروه بندی ها رو تشکیل بده .
فریم ورک احراز هویتخود دارای چندین ویو مانند لاگین و لاگ اوت و ... داره که میتونیم از اون ها استفاده کنیم.
برای احراز هویت از django.contrib.auth استفاده میشود.
میدلور(middleware) کلسی است که با چندین متود در محل های در خواست پاسخ به صورت ترتیبی اجرا میشود.
فریم ورک احراز هویت همچنین شامل چندین مدل است که django.contrib.auth.models هستن :
یوزر ها : یک مدل یوزر با فیلد های ابتدایی ، فیلد هایی اصلی شامل : یوزرنیم ، پسورد ، ایمیل ، فرست نیم ، و لیست نیم و is_activve هست.
گروه ها : یک مدل گروه که یوزر ها رو دسته بندی می کند.
اجازه ها ( premissions): پرچم هایی است که برای کاربران و با گروه ها برای انجام دادن حرکت خاصی از ان ها.
#create_login #login_user
- ساخت لوگین یوزر :
ما ابتدا به یک فرم برای گرفتن اطلاعات کاربر نیاز داریم که فرم اون رو در زیر میبینید ( مثال ) :

سپس احتیاج به یک ویو داریم که باید اونو بنویسیم مانند زیر :

نکته : متود authenticate که دربالا استفاده شده است در django.contrib.auth وجود داره ، میاد بررسی می کنه که آیا یوزر وجود داره یا نه ، اگر وجود داشت یک شی از یوزر برمیگردونه و اگروجود نداشت None برمیگردونه. که یک ریکوئست میگیره ، یک یوزر نیم و یک پسورد !
نکته : در خط بعدی چک میشه که ایا یوزر اکتیو هست یا خیر ، اگر اکتیو بود که یوزر لاگین میشه و گرنه میگه اکانت غیر فعال است اگر درست باشه ، برای ان یک سشن میسازه و اون رو در دیتابیس ذخیره می کنه.
نکته بسیار مهم : فرق بین login و authenticate این هست که :
که authenticate چک می کنه که ببینه ورودی های کاربر درسته یا نه اگر درست باشه یک آبجکت یوزر برمیگردونه که میتونیم شرط های خودمون رو قبل از لاگین شدن ریوزر چک کنیم.
ولی login میا ورود کاربر رو انجام میده و یک سشن از اون در دیتابیس میسازه.
مرحله بعد ساخت یک url هست و سپس یک تمپلیت :


# auth_view #all_view_auth
- جنگو خودش تمامی کار های لازم رو انجام داده که در صورت نیاز میتونیم از اون ویو ها برای لوگین ، لاگ اوت ، ریست پست ، چنج پس و ... استفاده کنیم :

#login_decorator #login_redirect #logout_redirect #template_user_object
- برای اینکه بگیم که این ویو مختص افراد لاگین شده باشه ، میتونیم از decorator لاگین استفاده کنیم ، django.contrib.auth میتونیم لودش کنیم.
یادمون باشه برای اینکه url های لاگین ، لاگ اوت و بعد از لاگین کجا هدایت بشن میتونیم توی تنظیمات گلوبال تعریف کنیم :

ما به یوزری که وارد صفحه میشه دسترسی داریم ( با استفاده از کانست پروسسور های خود جنگو که در تمپلیت تعریف شده ) . نکته مهم اینجاست که اگر حتی یوزر ورود نکرده باشد ما دسترسی به ابجکت یوزر داریم ولی یوزری که لوگین نکرده باشه که (AnonymouseUser) نام دارد.
برای چک کردن اینکه یوزر auth شده ( در تمپلیت ) میتونیم زا .is_authenticated استفاده کنیم :

#register_user
- وقتی می خواهیم یک کاربر رو ثبت نام کنیم باید یک شی از اون بسازیم و با استفاده از متود set_password برای اون پسورد بزاریم ، دلیل اینکار اینه که اگر همون پسورد رو مستقیم وارد کنیم ، به صورت هش ذخیره نمیشه و بعدا در لاگین به مشکل میخوریم ، پس از این روش استفاده می کنیم.
نکته : بهترین نوع رمزنگاری scrypt هست که رم و openSSL بیشتری نیاز داره.
نکته : همیشه از get_user_model() استفاده کن ، و اون رو در settings تعریف کن که چون همیشه در پروژه های مختلف ممکنه بسته به نیاز خودمون یوزر های متفاوتی داشته باشیم.
نکته : imagefield در پایگاه داده به عنوان varchar(100) ذخیره میشه.
#upload_image #pillow #related_to_user
- برای استفاده از آپلود تصاویر ، فیلم احتیاج داریم که از pillow رو نصب کنیم ، ( برای مدیریت عکس ها و پردازش ان ها ) و برای imagefield باید یک چیزی رو حتما ست کنیم که به این صورت هست :

ما در عکس بالا از method static استفاده کردیم که این فقط برای محیط دولوپ هستش و برای محیط پروداکشن باید از یک چیز دیگری استفاده کنیم که در فصل های اینده خواهیم خوند.
نکته : برای آپلود تصاویر و یا مولتی مدیا باید در قسمت form ، Html باید encrypt رو برابر multipart/form_data قرار بدیم که بتونه آپلود کنه.
نکته : برای اینکه از related ها استفاده کنیم باید از get_model_user استفاده کنیم که این خیلی خوبه .
نکته : زمانی که one to one داریم نیازی به تعریف related نیست !
نکته : جنگو همیشه تاکید داره مدل یوزرتو خودت بساز ، و بعدا اونو در تننظیمات اضافه کن ( گوگل کن )
#message #message_framework
- همه چیز درباره Messages FrameWork :
زمانی که کاربران با سیستم ها یما ارتباط برقرار می کنند ، نیاز است که به آنان نشون بدیم که اون عملیات ان ها دارند چکار انجام میدن . از مسیج استفاده می کنیم ، که به صورت one time هستش .
نکته : ساده ترین راه برای نمایش پیام به کاربران است.
نکته مهم : مسیج ها در کوکی ذخیره میشوند ( fall back in season ) و به انها نشون داده میشوند و پاک میشوند.
روش اضافه کردن message :

می توانیم با add messasage یک پیام جدید بنویسیم ، و یا از قبلیا که تعریف شده استفاده کنیم .
چگونه از ان در تمپلیت استفاده کنیم :

نکته : مسیج از یک کانتست پروسسرور استفاده می کند و ان را به تمپلیت اضافه می کند.
نکته : context proccesor یک تابع فانکشن هست که یک ریکوئست آبجکت میگیرد و یک دیکشنری request بر میگردونه !
#model_backend #backend_model #checking_exists_email
جنگو این امکان رو به ما میده که از یک سورس دیگه برای ورود استفاده کنیم. (مثلا یوزر علاوه بر یوزر از ایمیل استفاده کنه )
نکته : میتوینم مدل خودمون رو بنویسیم ( به صورت پیش فرض ModelBackend قرار داره )
نکته : هرگاه تابع authenticate جنگو فراخوانی میشه ، جنگو تلاش می کنه که با هر روشی که رد مدل بک اند قرار داره وارد سایت بشه.( به ترتیب از بالا به پایین ) اگر یکی از اون مدل ها کار کنه کار تمومه و لاگین انجام میشه
راه ساده برای ساخت backend model :

در فایل اپ پروژه که فایل پایتونی به اسم ( دلخواه ) authencitation اضاف می کنیم. ساخت مدل بک اند نیازمند دو متود است :
1 - که Authenticate هست که یک ریکوئست میگیره ، و یک یوزر و پسورد که اختیاری هست و میتونیم هرچی بهش بدیم
2 - که get_user هستش که یوزر فعلی رو بر میگردونه.
توضیحات کامل :

و در اخر باید یادمون باشه که در تنظیمات اصلی پروژه اون رو اضاف کنیم :

نکته : یادمون باشه که جنگو از بالا به پایین شروع به انجام میده . یعنی ممکنه با اولی کار تموم بشه. ترتیب به شدت مهمه.
وقتی یک مدل اضاف می کنیم باید ببینیم که کاربران نتونن ایمیل های همدگیرو بزارن :

اول موقع ثبت نام باید چک کنیم که ایمیل های تکراری نزارن و دوم موقع تغییر اطلاعات مورد نیاز : ( در صورت داشتن ) :
