هیچ دوره ای در سبد خرید شما وجود ندارد
فریم ورک Django یک چارچوب ( ویکی پدیا ) وب رایگان و متن باز است که در Python نوشته شده و از الگوی معماری MVT یا همون model-view-template پیروی می کند. هدف اصلی Django این است که ایجاد وب سایت های پیچیده و مبتنی بر پایگاه داده را آسان تر کند. این چارچوب بر قابلیت استفاده مجدد، Pluggability اجزای سازنده، کد کمتر، اتصال کم و توسعه سریع تاکید می کند. اگر با جنگو برنامه نویسی می کنید پیشنهاد می کنیم آموزش جنگو رست فریمورک را نیز ببینید.
معرفی دوره آموزش پروژه محور جنگو Django
اعتبارسنجی با تلفن همراه و کد یکبار مصرف در اکثر سایت ها متداول شده و سایت های زیادی از این روش برای اعتبارسنجی کاربران خود استفاده می کنند. با استفاده از فریمورک جنگو و قابلیت های زیادی که این فریمورک محبوب دارد، پیاده سازی این قابلیت به آسانی امکان پذیر است.
در این دوره ی آموزشی با سفارشی کردن کلاس User و ساخت یک Manager اختصاصی شروع به پیاده سازی ثبت نام و لاگین با شماره تلفن کردیم و تفاوت کلاس های AbstarctUser و AbstractBaseUser را یاد میگیریم.
- با کلاس ModelBackend در جنگو و متد Authentication آشنا می شویم و با این متد کاربر بدون رمز قادر به لاگین در سایت خواهد بود.
در ادامه ی اموزش با اتصال به یک سرویس جانبی، پیامک یک بار مصرف را با زمان انقضای مشخص به کاربر ارسال می کنیم و با استفاده از Django messages framework پیام های مناسبی به کاربر نمایش می دهیم.
در انتهای آموزش با signal و متدهای Async آشنا خواهیم شد و برای ارسال غیرهمزمان پیامک از پکیج django-background-tasks استفاده خواهیم کرد.
- در این آموزش از پایتون نسخه 3.8.0 و جنگو 3.0.3 و پکیج django-background-tasks استفاده شده است .
مخاطبین دوره آموزش پروژه محور جنگو Django:
- علاقه مندان به برنامه نویسی
- افرادی که مایل به یادگیری مباحث تخصصی هستند
- دانشجویان و فارغ التحصیلان رشته کامپیوتر
- و …
پیش نیازها:
- آشنایی با Django
- آشنایی با پایتون
مباحثی که در این دوره به آن ها میپردازیم : آموزش استفاده از فرم ها در Django
- آشنایی با کلاس های AbstarctUser و AbstractBaseUser
- ساخت کلاس Manager اختصاصی
- ایجاد authentication backend اختصاصی با ارث بری از ModelBackend
- ثبت نام و لاگین با استفاده از شماره موبایل
- ایجاد و اعتبارسنجی کد یکبار مصرف (OTP)
- استفاده از RestFull سرویس و وب سرویس های SOAP XML برای ارسال پیامک
- آشنایی با Django messages framework
- آشنایی با Signals در جنگو
- آشنایی با ابزارهای ارسال درخواست ها به صورت غیرهمزمان (async)
- استفاده از django-background-tasks
سرفصل های آموزش پروژه محور جنگو Django
- قسمت اول: مقدمه
- قسمت دوم: تفاوت AbstarctUser و AbstractBaseUser
- قسمت سوم: ساخت کلاس Manager اختصاصی
- قسمت چهارم: ایجاد authentication backend اختصاصی با ارث بری از ModelBackend
- قسمت پنجم: ایجاد کد یکبار مصرف (OTP) و ارسال پیامک با استفاده از یک سرویس جانبی (بخش اول)
- قسمت ششم: ایجاد کد یکبار مصرف (OTP) و ارسال پیامک با استفاده از یک سرویس جانبی (بخش دوم)
- قسمت هفتم: Verify کد یکبار مصرف و ورود کاربر
- قسمت هشتم: آشنایی با Django messages framework
- قسمت نهم: آشنایی با Signals در جنگو
- قسمت دهم: ارسال پیامک OTP به صورت غیرهمزمان (async) با استفاده از پکیج django-background-tasks
Hesam دانشجوی دوره
سلام ممنون از آموزش
من میخوام که رمز عبور برای کاربر وجود داشته باشه و فقط موقع ثبت نام به جای ایمیل شماره موبایل خودش و وارد بکنه کد تایید بره و در باقی موارد با شماره موبایل یا یوزر نیم و پسورد لاگین بکنه راهنمایی میکنید به چه شکلی عمل کنم؟
در واقع کد تایید فقط موقع ثبت نام و تغییر شماره ارسال بشه باقی موارد عادی با رمز عبور لاگین بکنه
میلاد حاتمی مدرس دوره
سلام. باید تغییراتی اعمال کنم که در یک پیام نمیشه توضیح بدم. به تلگرام من پیام بدید در خدمت شما هستم. آیدی من miladhzz
جهان
سلام
خب پس بقیش چی
مثلا فراموشی رمز عبور
چرا کامل نگفتین میخواستم بخرم
میلاد حاتمی مدرس دوره
ان شاالله در آپدیت دوره. مواردی که اشاره کردید هم لحاظ میکنیم.
البته فراموشی رمز عبور در صورتی کاربرد داره که ما فیلد رمز عبور هم داشته باشیم.
ولی در کل امکان اینم هست که همزمان رمز عبور هم داشته باشیم.
تشکر از شما بابت ثبت نظرتون
parham.mehrabi.webdev دانشجوی دوره
درود خسته نباشید
آموزش و توضیحات واقعا عالی بود
فقط این ریپازیتوری تو گیت هابتون نیست
میلاد حاتمی مدرس دوره
سلام. لطف دارید شما
ریپازیتوری وجود داره. آدرس:
https://github.com/miladhzz/custom_auth_daneshjooyar
m.samandarhd دانشجوی دوره
سلام میخوام یه تشکر ویژه داشته باشم از آقای میلاد حاتمی بابت تدریس خوب و پشتیبانی عالی شون. من بارها در تلگرام ازشون سوال پرسیدم و کمک خواستم و ایشون با حوصله همه رو جواب دادن. بسیار عالی هستن و امیدوارم همیشه موفق باشن
میلاد حاتمی مدرس دوره
سلام. متشکرم و لطف دارید
فعلا که فرصت آپدیت دوره هارو ندارم. ان شاالله با کمک کردن به دانشجوها کاستی های دوره هارو بتونم جبران کنم.
تشکر – حاتمی
salardoripy دانشجوی دوره
سلام
مثل بقیه دوره های آقای حاتمی مفید بود
با مباحثی مثل django signals و ساخت سرویس otp آشنا شدم
sadra.imanyfar دانشجوی دوره
با سلام و تشکر. ممنون از زحمات مدرس محترم. ولی به نظرم آموزش میتونست کامل تر و با کیفیت تر باشه و با نظر بهتری ارائه بشه.
میلاد حاتمی مدرس دوره
سلام. تشکر از ثبت نظرتون
حتما در آپدیت بعدی نکاتی که گفتید رو لحاظ می کنیم
تشکر – حاتمی
imannnam
سلام سورس های پروژه هم بی زحمت بزارید
میلاد حاتمی مدرس دوره
سلام. وقت شما بخیر
سورس های پروژه توی گیت هاب به صورت عمومی در دسترس هست
در ویدئوی معرفی می تونید لینک رو ببینید.
تشکر – حاتمی
رحیم کریمیان
بعد از پایان دوره مدرکی میدهید ؟
soheylakazemi
سلام بله درصورتی که 80 ردصد دوره را به صورت انلاین مشاهده کنید میتونید درخواست مدرک بدید و براتون ایمیل میشه
icegamer8282
سلام ببخشید پیشنیاز این دوره چیه؟ من خیلی مقدماتی در حد ساخت یه وبلاگ کوچیک از جنگو بلدم این اموزش نیازم میشه؟ یا مثلا اموزش وبسایت فروشگاهیتونو ببینم بعد اینو نگا کنم؟
پیشنهاد شما چه دوره ای هس؟ ممنون میشم راهنمایی کنین
میلاد حاتمی مدرس دوره
سلام. شما میتونید بعد از دوره مقدماتی، این دوره رو شروع کنید
mehdi952312 دانشجوی دوره
سلام استاد
من pip install kavenegar رو تو vscode وارد میکنم بسته با موفقیت نصب میشه
ولی موقعی که میخام import کنم تو فایلم kavenegar رو تشخیص نمیده که بتونم ازش استفاده کنم
from kavenegar import
تو خط بالا کاوه نگار قرمز میشه
میلاد حاتمی مدرس دوره
سلام
اول یه pip list بگیرید ببینید نصب هست.
اگه نصب بود env رو به درستی برای vscode تنظیم نکردید که پکیج هاتونو نمی شناسه.
هر مشکلی داشتید ایمیل کنید یا در تلگرام برای من ارسال کنید.
خوشحال میشم کمک کنم
تشکر – حاتمی
mehdi
ممنون استاد مشکل حل شد…
aromix.68neting1 دانشجوی دوره
بنده قصد داشتم از متد اعتبار سنجی کاوه نگار استفاده کنم، مستندات این متد در لینک فوق قابل مشاهده است https://kavenegar.com/rest.html#sms-Lookup در صورت امکان بنده را کمی راهنمایی بفرمایید
با تشکر و احترام
میلاد حاتمی مدرس دوره
سلام.
برای اینکه پیامک از طریق خطوط خدماتی ارسال بشه. شما باید قالب هایی به کاوه نگار بدید و فقط در اون قالب ها میتونید پیامک ارسال کنید. (جهت جلوگیری از تبلیغات و…)
در کل بهتره توی کاوه نگار تیکت بدید تا بهتر شمارو راهنمایی کنند.
تشکر – حاتمی
.105 دانشجوی دوره
سلام این ارور رو میده :
ERRORS:
product.Order.customer: (fields.E301) Field defines a relation with the model ‘auth.User’, which has been swappe
d out.
HINT: Update the relation to point at ‘settings.AUTH_USER_MODEL’.
.105 دانشجوی دوره
فهمیدم از مدل User یه جا دیگه استفاده کرده بودم
میلاد حاتمی مدرس دوره
سلام
وقت بخیر
لطفا این سوالات رو به ایمیل من ارسال کنید یا برای تلگرام من بفرستید.
تشکر- حاتمی
لیلی
سلام توی api و جنگو رست هم این آموزش کاربرد داره؟
میلاد حاتمی مدرس دوره
سلام
تشکر از شما بابت ثبت نظرتون
اگه بخوام کلی جواب بدم. خیر
اما میتونید ازش ایده بگیرید و توی رست پیاده سازی کنید
masiha
سلام من قصد تهیه این دوره رو دارم
در این دوره زمان valid بودن otp درس داده شده؟
اگر درس داده شده بعد از تموم شدن مدت زمان valid بودن کلید ارسال دوباره نمایش داده میشه؟
ممنون
میلاد حاتمی مدرس دوره
سلام وقت شما بخیر
بله زمان کد یکبار مصرف بررسی میشه
و اگه منقضی شده باشه به کاربر پیغام مناسب نمایش داده میشه
میلاد حاتمی مدرس دوره
سلام
valid بودن چک میشه. اما کد ارسال دوباره رو نداریم
کار سختی نیست
اگه تمایل داشته باشید راهنمایی میکنم.
به تلگرام یا ایمیل من پیام بدید.
تشکر – حاتمی
arman
سلام استاد
من یه فروشگاه دارم که به مرحله دیپلوی رسیده قسمت ثبت نامشم مانند دوره درست کردم فقط اون قسمت manage.py process tasks رو میخوام خودش هر 30 ثانیه یه بار انجام بده چون توی پروژه واقعی با روش شما نمیشه و اینکه شما ازش گذشتین دقیقا باید چیکار کنم ؟
با تشکر
میلاد حاتمی مدرس دوره
سلام. وقت شما بخیر. میتونید از cron tob, cron job استفاده کنید.
.105
سلام استاد عزیز ممنون منتظر آموزش های بعدی شما هستیم
استاد من این اررور رو دریافت میکنم میشه راهنمایی بفرمایید ( part 4 درس زمانی که میخواهی OTP دریافت کنی ) ؟
APIException[412] \xd8\xa7\xd8\xb1\xd8\xb3\xd8\xa7\xd9\x84 \xda\xa9\xd9\x86\xd9\x86\xd8\xaf\xd9\x87 \xd9\x86\x
d8\xa7\xd9\x85\xd8\xb9\xd8\xaa\xd8\xa8\xd8\xb1 \xd8\xa7\xd8\xb3\xd8\xaa’
متشکرم
میلاد حاتمی مدرس دوره
وقت شما بخیر. اینجوری نمیشه راهنمایی کرد.
لطفا از ویو و خطایی که دارید عکس بگیرید و برای تلگرام من بفرستید.
.105
آقای حاتمی بزرگوار مشکل حل شد این قسمت رو اشتباه وارد کرده بودم
‘sender’: ‘10004346’, # optional
ممنونم
fmh1
سلام و تشکر از شما
من آموزش های شما رو می بینم و دوست دارم اما پیشنهاد و انتقادی دارم
مثلا در “قسمت هفتم-Verify کد یکبار مصرف و ورود کاربر”
برنامه را به هر نحوی که اجرا بشه می نویسید و توضیح میدهید اما یک سری اصول و best practice ها و ریفکتور و در کل clean coding را رعایت نمی کنید. که پیشنهاد می کنم اصلاح فرمایید. برای نمونه در فایل views.py و فانکشن verify شماره موبایل دریافت میشه و یک کوئری به دیتابیس زده میشه تا اطلاعات کاربر بدست بیاد سپس دوباره داخل همان فانکشن ، از فایل helper متد check_otp_expiration فراخوانی میشه که دوباره این متد هم یک کوئری تکراری برای پیدا کردن همان کاربر به دیتابیس میزنه در حالی که این متد می توانست به جای دریافت شماره موبایل ، تاریخ انقضا را از ورودی بخونه و فقط چک کنه در اینصورت نیازی به کوئری زدن تکراری نبود.
بنظر با در نظر گرفتن این مسائل ، آموزش های شما هر بار بهتر خواهد شد
ممنون
میلاد حاتمی مدرس دوره
درود بر شما.
خیلی خوشحالم که اینقدر دقیق نظرتونو ثبت می کنید و به محتوای آموزش و اشکالاتش بی تفاوت نیستید.
شما درست میگید، میتونستیم از اطلاعات همون کاربری که از دیتابیس لود کردیم استفاده کنیم و دیگه نیازی به کوئری دوم نبود.
از شما تشکر میکنم
fmh1
سلام و تشکر بابت پاسخ قبلی
در ویدئو قسمت چهارم در فایل models و بخش backend آیا نباید backend ای که تعریف کرده ایم یعنی MobileBackend وارد شود؟
(شما ModelBackend وارد کرده اید)
میلاد حاتمی مدرس دوره
درود بر شما.
درسته باید MobileBackend اضافه بشه.
بنده در آموزش گفتم MobileBackend اما به اشتباه ModelBackend رو اضافه کردم. (به دلیل شباهت لغوی و پیشنهادی که PyCharm داد، اشتباه شده)
پروژه از بکندی که override کردیم استفاده میکنه و مشکلی پیش نمیاد.
تشکر از شما
fmh1
سلام
در قسمت دوم، آیا بررسی کردن فیلد ها بعد از setdefault کردن آنها تاثیری دارد؟
میلاد حاتمی مدرس دوره
درود بر شما، برای بهتر فهمیدن موضوع، ابتدا لینک زیر رو ببینید (سورس های اصلی جنگو)
https://github.com/django/django/blob/master/django/contrib/auth/models.py
دقت کنید که setdefault فقط وقتی key در دیکشنری وجود نداشته باشد مقدار را به دیکشنری ست میکند. کلاینتی که متد create_superuser را صدا می زند می تواند مقدار مد نظر ما را مقدار ندهد، پس وقتی key اصلا وجود نداشته باشد و بخواهیم از آن استفاده کنیم، exception خواهد داد. و برای جلوگیری از این استثنا باید از setdefault ، طبق مستندات جنگو استفاده کنیم.
امیدوارم پاسخ من برای شما مفید باشه. اگه متوجه نشدید به تلگرام یا ایمیل پیام بدید. تشکر