در این دوره آموزشی که در سایت دانشجویار منتشر شده است (لینک دوره) با آموزش ورود با موبایل و کد OTP در جنگو در خدمت شما هستیم. امیدوارم توضیحاتی که در این مطلب ارائه می شود کامل و مفید باشد و در تصمیم گیری برای دانلود این دوره کمک کند.
در دوره ی منتشر شده قبلی (آموزش کار با فرم ها در جنگو) به صورت جامع و کامل با فرم ها آشنا شدیم و در نهایت یک پروژه تستی نیز پیاده سازی کردیم. این دوره روی شخصی سازی لاگین در جنگو تمرکز می کنیم و اینکه چطور بتوانیم بدون وارد کردن Password و فقط با موبایل و کد یکبار مصرف در Django لاگین کنیم.
قسمت اول معرفی دوره آموزش ورود با موبایل و OTP در Django:
ویدئوی ارائه شده در این قسمت بعد از اتمام آموزش ضبط شده است، لذا تمامی کارهایی که در آموزش انجام خواهد شد ، به طور خلاصه و تصویری توضیح داده شده است. با دیدن این قسمت متوجه می شوید که این دوره شامل چه مباحثی خواهد بود.
قسمت دوم تفاوت AbstarctUser و AbstractBaseUser در Django:
در این قسمت ابتدا توضیحاتی در مورد پروژه و همچنین توصیه های موجود در داکیومنت جنگو در مورد نحوه استفاده از مدل User ارائه می شود.
سپس توضیحاتی در مورد AbstractUser و AbstractBaseUser همراه با مستندات جنگو ارائه می شود و با تفاوت دو کلاس و دلیل استفاده هر کدام آشنا می شویم.
قسمت سوم ساخت کلاس Manager اختصاصی در Django:
ابتدا توضیحاتی در مورد Manager ها ارائه می شود و دلیل استفاده از آنها را توضیح می دهیم. همچنین توضیح می دهیم که چطور می توانیم بک Custom Manager ایجاد کنیم. هر مدل می تواند بیش از یک Manager داشته باشد.
در ادامه برای اختصاصی کردن Manager برای مدل یوزر ابتدا مدل User خود را با ارث بری از AbstractUser ایجاد می کنیم. فیلد username را برابر None کرده و بقیه فیلدها را به مدل کاربر اضافه می کنیم.
در ادامه یا فایل پایتونی با نام MyUserManager می سازیم و کلاس Manager اختصاصی خودمان را با ارث بری کردن از BaseUserManager ایجاد کرده متدهای Create_user و Create_superuser را Override می کنیم.
سپس در settings.py مقدار AUTH_USER_MODEL را تنظیم می کنیم تا پروژه مدل یوزر ما را شناسایی کند. در نهایت اقدام به migrate می کنیم و با دستور createsuperuser کاربر ادمین ایجاد می کنیم.
قسمت چهارم ایجاد authentication backend اختصاصی با ارث بری از ModelBackend در Django:
در این قسمت ابتدا توضیجاتی در مورد Authentication Backend ارائه می شود و توضیح می دهیم که به صورت پیش فرض رفتار پروژه چطور است. سپس توضیح می دهیم که چطور می توانیم در جنگو بیش از یک Authentication Backend داشته باشیم.
در ادامه یه فایل جدید با نام MyBackend می سازیم و یک کلاس با نام MobileBackend ساخته و از ModelBackend ارث بری می کنیم. سپس متد Authenticate را Override می کنیم.
در نهایت تنظیمات مربوط را انجام می دهیم تا جنگو Backend را شناسایی کند. سپس با ایجاد یک ویو جدید و استفاده از فقط موبایل لاگین می کنیم.
قسمت پنجم ایجاد کد یکبار مصرف (OTP) و ارسال پیامک با استفاده از یک سرویس جانبی در Django – بخش اول:
در این قسمت ابتدا اقدام به ساخت ویو و فرم برای ثبت نام کاربر می کنیم در واقع ثبت نام و لاگین همین ویو خواهد بود. در این صورت کاربر اگر جدید باشد لاگین می کند ولی اگر جدید بود ثبت نام شده و لاگین می کند.
در ادامه سرویس کاوه نگار معرفی می شود و روش استفاده از REST API و همچنین WSDL Service را آموزش می دهیم.
در ادامه یک فایل پایتوی جدید با نام helper.py می سازیم و در این فایل یک متد send_otp اضافه می کنیم تا با این متد بتوانیم پیامک را با استفاده از REST API برای کاربر ارسال کنیم. کد OTP را با استفاده از متد random در پایتون می سازیم تا کاربر نتواند OTP را تشخیص دهد.
در انتهای این قسمت یک ویو جدید با نام verify به همراه تمپلت و url ایجاد می کنیم که وظیفه اعتبارسنجی موبایل و OTP و بررسی کردن زمان انتقضای آن را خواهد داشت.
قسمت ششم یجاد کد یکبار مصرف (OTP) و ارسال پیامک با استفاده از یک سرویس جانبی در Django – بخش دوم:
در این قسمت که ادامه قسمت پنجم است، ابتدا با استفاده از session شماره موبایل را در مرورگر ذخیره می کنیم تا در ویو verify بتوانیم به شماره موبایل دسترسی داشته باشیم.
سپس با استفاده از SOAP Services مجددا وب سرویس ارسال پیامک را پیاده سازی می کنیم تا هر دو روش ارسال پیامک را یاد بگیریم. برای استفاده از WSDL Service پکیچ zeep را نصب می کنیم تا بتوانیم رکوئست به وب سرویس ارسال کنیم.
قسمت هفتم Verify کد یکبار مصرف و ورود کاربر در Django:
ابتدا تغییراتی به ویوها می دهیم تا در محیط Development بدون ارسال واقعی OTP بتوانیم به مقدار آن دسترسی داشته باشیم.
سپس در ویو verify از session موبایل را دریافت می کنیم و با استفاده از Django ORM کاربر ذخیره شده را لود می کنیم. سپس مقدار OTP وارد شده را با مقداری که در دیتابیس ذخیره شده است مقایسه می کنیم. اگر مقادیر صحیح بودند کاربر را لاگین می کنیم.
سپس متدی جدید در helper.py با نام check_otp_expiration می سازیم که موبایل را می گیرد و بررسی می کند که OTP منقضی شده یا هنوز معتبر است. از این متد در ویو verify استفاده می کنیم و اگر کاربر بعد از زمان زیادی اقدام به لاگین کند خطای انقضای OTP را مشاهده کند.
قسمت هشتم آشنایی با Django messages framework در Django:
در این قسمت ابتدا تغییراتی در تمپلت register و verify اعمال کردیم و با استفاده از Bootstrap ظاهر فرم را بهتر کرده می کنیم.
سپس توضیحاتی در مورد Django messages framework ارائه می کنیم و روش کار کردن این ابزار را با استفاده از داکیومنت های جنگو توضیح می دهیم.
در مرحله بعد توضیحاتی در مورد تغییرات اعمال شده در تمپلت ارائه می دهیم و سپس در ویو تغییرات مورد نظر را اعمال می کنیم و پیغام را به تمپلت ارسال می کنیم. در مرحله بعدی با حلقه for پیغام های مناسب را نمایش می دهیم.
با استفاده از tag های موجود در Django messages framework و تنظیم آنها در settings.py و سپس استفاده از کلاس های bootstrap پیغام خطا یا موفقیت را در خروجی بر حسب اینکه خطا اتفاق افتاده یا ورود موفق است به کاربر نمایش می دهیم.
قسمت نهم آشنایی با Signals در Django:
ابتدا توضیحاتی در مورد Signal ها در جنگو ارائه می کنیم و با استفاده از داکیومنت های جنگو اجزای مورد نیاز برای استفاده از سیگنال ها را توضیح می دهیم.
سپس یک فایل با اسم signal.py ایجاد می کنیم و برای رکوئست یک سیگنال می نویسیم و در ادامه در apps.py این سیگنال را به اپلیکشین کانکت می کنیم. در مرحله بعدی از سیگنال post_save استفاده می کنیم تا بعد از ثبت نام هر کاربر سیگنال اجرا شود. در سیگنال می توانیم هنگام ذخیره و آپدیت عملیات مورد نظر خودمان را پیاده سازی کنیم.
در نهایت سیگنال های جدید که به ثبت یا ویرایش کاربر حساس هستند را در apps.py کانکت می کنیم. سپس یوزر تستی ایجاد می کنیم و تاثیر سیگنال را مشاهده می کنیم.
قسمت دهم ارسال پیامک OTP به صورت غیرهمزمان (async) با استفاده از پکیج django-background-tasks در Django:
ویوهای Async از جنگو نسخه 3 به بعد اضافه شدند. اما ممکن از ما از نسخه های قدیمی تر استفاده کنیم لذا برای ارسال Async پیامک می توانیم از پکیج های جانبی استفاده کنیم. روش ایده آل استفاده از celery و redis است. اما چون این ابزارها برای سیستم های بزرگ استفاده می شود ما از پکیج های کوچکی استفاده می کنیم.
در ابتدای آموزش مشکلی که باعث می شود مجبور شویم از روش Async استفاده کنیم را با مثال توضیح می دهیم. سپس پکیج django-background-tasks را معرفی می کنیم و توضیحاتی در مورد روش استفاده از آن ارائه می دهیم.
سپس تغییرات لازم را به متد مورد نظر اعمال می کنیم و از دکوریتور @background استفاده می کنیم. و یک درخواست ارسال پیامک با استفاده از لاگین ثبت می کنیم. سپس با استفاده از دستور python manage.py process_tasks برای django-background-tasks مشخص می کنیم که پیام ها را به صورت غیرهمزمان ارسال کند.
برای استفاده بهینه از این روش در محیط واقعی می توانیم از cronjob استفاده کنیم. در انتهای این قسمت وارد دیتابیس می شویم و جداول مربوط به django-background-tasks را توضیح می دهیم.
پایان دوره آموزشی – لطفا نظرات خود را در بخش نظرات ثبت کنید. هر سوالی داشته باشید پاسخگو هستم.