Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و هشتم - دیتابیس چیست
در ابتدای این ویدئو برای ما سوال بود که اطلاعات کاربرها کجا ذخیره می شوند. پس به مفهومی به اسم دیتابیس رسیدیم و یکم در موردش سرچ کردیم. توی سرچ هامون با دیتابیس و نرم افزارهای DBMS آشنا شدیم و با اسم چند تا نرم افزار DBMS مثل SQL Server, PostgreSql, MySql, Oracle و... آشنا شدیم. در ادامه با SQLite هم آشنا شدیم و فهمیدیم که برای توسعه خیلی پر استفاده است و جنگو به صورت پیشفرض ازش استفاده می کنه. با نرم افزار DB Browser for SQLite دیتابیسمون رو باز کردیم و با جداول پیشفرض جنگو یکم آشنا شدیم. در ادامه با ارث بری از ModelForm دیدیم که جنگو چقدر راحت برای ما فرم ثبت نام رو ایجاد میکنه.
لینک آپارات:
https://www.aparat.com/v/r5IBe
لینک یوتیوب:
https://youtu.be/8KKy_QoCjyk
در ابتدای این ویدئو برای ما سوال بود که اطلاعات کاربرها کجا ذخیره می شوند. پس به مفهومی به اسم دیتابیس رسیدیم و یکم در موردش سرچ کردیم. توی سرچ هامون با دیتابیس و نرم افزارهای DBMS آشنا شدیم و با اسم چند تا نرم افزار DBMS مثل SQL Server, PostgreSql, MySql, Oracle و... آشنا شدیم. در ادامه با SQLite هم آشنا شدیم و فهمیدیم که برای توسعه خیلی پر استفاده است و جنگو به صورت پیشفرض ازش استفاده می کنه. با نرم افزار DB Browser for SQLite دیتابیسمون رو باز کردیم و با جداول پیشفرض جنگو یکم آشنا شدیم. در ادامه با ارث بری از ModelForm دیدیم که جنگو چقدر راحت برای ما فرم ثبت نام رو ایجاد میکنه.
لینک آپارات:
https://www.aparat.com/v/r5IBe
لینک یوتیوب:
https://youtu.be/8KKy_QoCjyk
👍7
❔ این متن بخشی از یک پست از کانال @pytens هست، خوشحال میشم نظر خودتون رو بگید (مهم نیست خودتون در چه سطحی هستید):
یک چند روزی هست ذهنم درگیر یک موضوع شده، همه چیز هم از یک دورهمی شروع شد و یکی از افراد که بعد از شنیدن صحبتها گفت من یک دختر دارم ۹ سالش هست و داریم سعی میکنیم استعدادش رو کشف کنیم (با احترام به علایق) که راهی که براش بهتر هست رو پیش بگیره نه اینکه دکتر، مهندس بشه چون خانوادهاش توی این مشاغل هستند (چه درک خوبی)
بعد از من پرسید بنظر شما که چندین سال هست توی این کار مشغول هستی چطور میشه فهمید یک نفر برنامهنویس خوبی میشه در نهایت یا نه !؟
✅ نظرتون رو کامنت کنید یا خصوصی برای @miladhzz بفرستید. تشکر
یک چند روزی هست ذهنم درگیر یک موضوع شده، همه چیز هم از یک دورهمی شروع شد و یکی از افراد که بعد از شنیدن صحبتها گفت من یک دختر دارم ۹ سالش هست و داریم سعی میکنیم استعدادش رو کشف کنیم (با احترام به علایق) که راهی که براش بهتر هست رو پیش بگیره نه اینکه دکتر، مهندس بشه چون خانوادهاش توی این مشاغل هستند (چه درک خوبی)
بعد از من پرسید بنظر شما که چندین سال هست توی این کار مشغول هستی چطور میشه فهمید یک نفر برنامهنویس خوبی میشه در نهایت یا نه !؟
✅ نظرتون رو کامنت کنید یا خصوصی برای @miladhzz بفرستید. تشکر
👍7
PythonNotesForProfessionals.pdf
5.9 MB
فایل PDF کتاب Python Notes for Professionals
دانلود کنید. کتاب با ارزشی هست.
دانلود کنید. کتاب با ارزشی هست.
🔥14
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و نهم - ظاهر فرم Register
ابتدای این ویدئو حین کار کردن با fields در model form نکته ای در مورد tuple ها یاد گرفتیم. بعدش یاد گرفتیم که چطور فیلدهای مشخصی رو فقط توی خروجی فرم نمایش بدیم. بعدش رفتیم سراغ تغییر label فیلد های فرم. بعد از اون help_texts مربوط به username رو حذف کردیم. بعدش خواستیم tool tip اضافه کنیم که یادم رفت. جلسه بعد ان شاالله اوکی اش میکنیم. در ادامه توی modelForm از widget استفاده کردیم و کلاس های مخصوص خودمون رو به فیلدها دادیم. این جلسه مثل یه کار واقعی بود و همه چیز رو تقریبا سرچ کردیم.
لینک آپارات:
https://www.aparat.com/v/qm2eP
لینک یوتیوب:
https://youtu.be/wcL7r5CIi4s
ابتدای این ویدئو حین کار کردن با fields در model form نکته ای در مورد tuple ها یاد گرفتیم. بعدش یاد گرفتیم که چطور فیلدهای مشخصی رو فقط توی خروجی فرم نمایش بدیم. بعدش رفتیم سراغ تغییر label فیلد های فرم. بعد از اون help_texts مربوط به username رو حذف کردیم. بعدش خواستیم tool tip اضافه کنیم که یادم رفت. جلسه بعد ان شاالله اوکی اش میکنیم. در ادامه توی modelForm از widget استفاده کردیم و کلاس های مخصوص خودمون رو به فیلدها دادیم. این جلسه مثل یه کار واقعی بود و همه چیز رو تقریبا سرچ کردیم.
لینک آپارات:
https://www.aparat.com/v/qm2eP
لینک یوتیوب:
https://youtu.be/wcL7r5CIi4s
👍3
Forwarded from دستاوردهای یادگیری عمیق(InTec)
توی شرکت ی بخش آرشیوی داریم که همهی کدهای قدیمی zip شده هستند و دیتاها tar compressed که خب طبیعی هست
گاهی نیاز میشه یک پروژه قدیمی به روز بشه یا اینکه یک بخشی از پروژه قدیمی برای کارهای جدید لازم میشه یا ...
خلاصه لازم میشه که اینکار صورت بگیره از قدیم هم یک چیزی جا افتاده که هر ورژنی که deploy میشه (فیچرهای بزرگ و اصلی) علاوه بر اینکه روی گیت لیبل میخوره و ... ی نسخه ازش بکاپ گرفته میشه بازم با فرمت zip
دیدم یکی از نیروها نشسته اینارو دونه دونه داره extract میکنه روی سیستمش و دنبال یکی از پروژه هایی میگرده که n فیچر مورد نیاز رو پیاده سازی کرده کلی هم وقتش رو گرفته بود و عصبی بود
براش همه تلاشش رو تبدیل کردم به این چند خط کد
دلیل اصلی zip ذخیره کردن کدها و جدا کردنش از دیتاها توی شرکت هم همینه پایتون توانایی اجرای کد داخل فایل zip رو هم داره.
بعضی وقتا پرسیدن دلیل اینکه چرا یک تصمیم خاص گرفته شده میتونه خیلی کمک کننده باشه و خیلی وقت براتون ذخیره کنه.
گاهی نیاز میشه یک پروژه قدیمی به روز بشه یا اینکه یک بخشی از پروژه قدیمی برای کارهای جدید لازم میشه یا ...
خلاصه لازم میشه که اینکار صورت بگیره از قدیم هم یک چیزی جا افتاده که هر ورژنی که deploy میشه (فیچرهای بزرگ و اصلی) علاوه بر اینکه روی گیت لیبل میخوره و ... ی نسخه ازش بکاپ گرفته میشه بازم با فرمت zip
دیدم یکی از نیروها نشسته اینارو دونه دونه داره extract میکنه روی سیستمش و دنبال یکی از پروژه هایی میگرده که n فیچر مورد نیاز رو پیاده سازی کرده کلی هم وقتش رو گرفته بود و عصبی بود
براش همه تلاشش رو تبدیل کردم به این چند خط کد
import glob, importlib
packages = glob.glob("./**/*.zip")
for pk in packages:
sys.path.append(pk)
name = pk.split('/')[-1].split('.')[0]
module = importlib.import_module(module_name, package=None)
try:
module.needed_feature()
print(f"found feature in: {pk}")
break
except:
pass
اینجوری تو کمتر از چند دقیقه (بقول خودش تا قهوه رو بریزه کد مدنظر رو پیدا کرده بود)دلیل اصلی zip ذخیره کردن کدها و جدا کردنش از دیتاها توی شرکت هم همینه پایتون توانایی اجرای کد داخل فایل zip رو هم داره.
بعضی وقتا پرسیدن دلیل اینکه چرا یک تصمیم خاص گرفته شده میتونه خیلی کمک کننده باشه و خیلی وقت براتون ذخیره کنه.
👏18👍6
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاهم - تابع هش چیست
اوایل این قسمت سیستمم قاطی کرده بود و صدا یکم خرابه، لذا عذرخواهی میکنم. همون اوایل tooltip رو اضافه کردیم به فرم و با استفاده از help_text فرم ها تونستیم این قابلیت رو اضافه کنیم. بعدش رفتیم سراغ تکمیل کد ذخیره کاربر در ویو signup و با متد save آشنا شدیم. دیدم که کاربر ساخته شده نمیتونه لاگین کنه چون پسوردش hash نشده بود. پس اول رفتیم یکم در مورد هش یاد گرفتیم و بعدش با استفاده از متد make_password مشکل رمزهای هش نشده رو اوکی کردیم.
لینک آپارات:
https://www.aparat.com/v/ZMqgn
لینک یوتیوب:
https://youtu.be/0gAVoLWFP5g
اوایل این قسمت سیستمم قاطی کرده بود و صدا یکم خرابه، لذا عذرخواهی میکنم. همون اوایل tooltip رو اضافه کردیم به فرم و با استفاده از help_text فرم ها تونستیم این قابلیت رو اضافه کنیم. بعدش رفتیم سراغ تکمیل کد ذخیره کاربر در ویو signup و با متد save آشنا شدیم. دیدم که کاربر ساخته شده نمیتونه لاگین کنه چون پسوردش hash نشده بود. پس اول رفتیم یکم در مورد هش یاد گرفتیم و بعدش با استفاده از متد make_password مشکل رمزهای هش نشده رو اوکی کردیم.
لینک آپارات:
https://www.aparat.com/v/ZMqgn
لینک یوتیوب:
https://youtu.be/0gAVoLWFP5g
👍1
Forwarded from DevOps (Ahmadali Bagheri)
سلام رفقا جلسه چهارم دوره پروژه محور پیاده سازی جنگو هم رسید امااا این جلسه قرار در مورد Reverse Proxy صحبت کنیم . اقا بزار بگم داستان این چیه اصلا!!!
شما فکر کن میخوای چند تا سرور داشته باشی و لود بالانسینگ داشته باشی
یا فکر کن میخوای سرورت رو امن کنی و آی پیش رو دیگه هرکی از راه رسید در نیاره که با یه برنامه الکی attack نخوری
یا فکر کن میخوا بحث ssl یعنی encrypt/decrypt رو از روی سرور برداری که پرفورمنس کار بره بالا (خب یه بابایی باید اینو انجام بده )
یا فکر کن میخواد کش سرور داشته باشی که سرعت خیلی بالا بره بالا .....
اینجا Reverse proxy میاد وسط و برای اینکار ابزارهای مختلفی وجود داره
امیربهادر عزیز تو این جلسه اومده از ابزار Traefik استفاده کرده و همه چی رو گفته
وقتی این ابزار رو راه میندازی اصلا مهم نیست که پشتش جنگو باشه !لاراول باشه یا نست جی اس و هر فریمورک دیگه .... لذت ببرید و با بازنشر و کامنت و لایک انرژی بدین بهمون
https://www.youtube.com/watch?v=ptjA9Hc-0ls
راستی اگر سوالی بود لطفا زیر همون ویدیو بپرسین امیربهادر همه رو با عشق جواب میده
روی خود ریپو هم میتونین issue بزنین
اگر دوست داشتین به کانال خود امیربهادر هم سر بزنین کلی محتوای خوب داره 👇🏼👇🏼👇🏼👇🏼
https://t.iss.one/BenDevelop
https://www.youtube.com/@bendev8723
https://www.linkedin.com/in/amirbahador/
پس یه مرور نمکی بکنیم باهم
✅ شنبه ها آمازون
✅ سه شنبه ها ترافورم
✅ چهارشنبه ها نت آپس مقدماتی و بعد از این کورس نت آپس پیشرفته
✅ دوشنبه ها و پنج شنبه ها دوره پروژه محور Django + docker + CI/CD
شما فکر کن میخوای چند تا سرور داشته باشی و لود بالانسینگ داشته باشی
یا فکر کن میخوای سرورت رو امن کنی و آی پیش رو دیگه هرکی از راه رسید در نیاره که با یه برنامه الکی attack نخوری
یا فکر کن میخوا بحث ssl یعنی encrypt/decrypt رو از روی سرور برداری که پرفورمنس کار بره بالا (خب یه بابایی باید اینو انجام بده )
یا فکر کن میخواد کش سرور داشته باشی که سرعت خیلی بالا بره بالا .....
اینجا Reverse proxy میاد وسط و برای اینکار ابزارهای مختلفی وجود داره
امیربهادر عزیز تو این جلسه اومده از ابزار Traefik استفاده کرده و همه چی رو گفته
وقتی این ابزار رو راه میندازی اصلا مهم نیست که پشتش جنگو باشه !لاراول باشه یا نست جی اس و هر فریمورک دیگه .... لذت ببرید و با بازنشر و کامنت و لایک انرژی بدین بهمون
https://www.youtube.com/watch?v=ptjA9Hc-0ls
راستی اگر سوالی بود لطفا زیر همون ویدیو بپرسین امیربهادر همه رو با عشق جواب میده
روی خود ریپو هم میتونین issue بزنین
اگر دوست داشتین به کانال خود امیربهادر هم سر بزنین کلی محتوای خوب داره 👇🏼👇🏼👇🏼👇🏼
https://t.iss.one/BenDevelop
https://www.youtube.com/@bendev8723
https://www.linkedin.com/in/amirbahador/
پس یه مرور نمکی بکنیم باهم
✅ شنبه ها آمازون
✅ سه شنبه ها ترافورم
✅ چهارشنبه ها نت آپس مقدماتی و بعد از این کورس نت آپس پیشرفته
✅ دوشنبه ها و پنج شنبه ها دوره پروژه محور Django + docker + CI/CD
YouTube
traefik ریورس پروکسی
+ reverse proxy
+ Traefik
+ Docker-compose
▬ محتوای ویدیو ▬▬▬▬▬▬▬▬▬▬
ما تو این ویدیو با استفاده از داکر کومپوز سرویس هامون رو
روی داکر میاریم در مورد مبحث جذاب ریورس پروکسی صحبت میکنیم
و بعد با استفاده از traefik لود رو بین سرویس هامون پخش میکنیم
…
+ Traefik
+ Docker-compose
▬ محتوای ویدیو ▬▬▬▬▬▬▬▬▬▬
ما تو این ویدیو با استفاده از داکر کومپوز سرویس هامون رو
روی داکر میاریم در مورد مبحث جذاب ریورس پروکسی صحبت میکنیم
و بعد با استفاده از traefik لود رو بین سرویس هامون پخش میکنیم
…
👍5
https://www.youtube.com/watch?v=vPIvIoPu2co
سومین قسمت دوره آموزش مقدماتی DRF یا همون Django rest framework 🧠.
تو این قسمت بیشتر با فانکشن بیس آشنا میشیم API ساخت آبجکت رو مینویسیم. با postman کار میکنیم و نگاهی به متد ها مختلف http میندازیم و سعی میکنیم غیر از DRF چیزهای دیگه ای هم یاد بگیریم 🤝
امیدوارم از این دوره چیزها مفید و باحالی یاد بگیرید❤️🫵
با معرفی دوره به دستانتون باعث حمایت و در نتیجه دوره و آموزش ها بیشتر بشید🥹❤️🔥
💬 join -> @TorhamDevCH
سومین قسمت دوره آموزش مقدماتی DRF یا همون Django rest framework 🧠.
تو این قسمت بیشتر با فانکشن بیس آشنا میشیم API ساخت آبجکت رو مینویسیم. با postman کار میکنیم و نگاهی به متد ها مختلف http میندازیم و سعی میکنیم غیر از DRF چیزهای دیگه ای هم یاد بگیریم 🤝
امیدوارم از این دوره چیزها مفید و باحالی یاد بگیرید❤️🫵
با معرفی دوره به دستانتون باعث حمایت و در نتیجه دوره و آموزش ها بیشتر بشید🥹❤️🔥
💬 join -> @TorhamDevCH
YouTube
آموزش مقدماتی DRF با تورهام قسمت سوم | Django Rest Framework
سومین قسمت دوره DRF، تو این قسمت بیشتر با فانکشن بیس آشنا میشیم API ساخت آبجکت رو مینویسیم. با postman کار میکنیم و نگاهی به متد ها مختلف http میندازیم و سعی میکنیم غیر از DRF چیزهای دیگه ای هم یاد بگیریم 🤝
امیدوارم از این دوره لذت کافی رو ببرید و چیزهای…
امیدوارم از این دوره لذت کافی رو ببرید و چیزهای…
❤4👍1
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاه و یکم - ساخت اولین ریپازیتوری
توی این قسمت در مورد سورس کنترل یا ورژن کنترل ها تحقیق کردیم و یکم تاریخچه شون رو بررسی کردیم. فهمیدیم که SVN و Git و TFS و... وجود داره. بعدش در مورد گیت هاب و گیت لب هم مطالعه کردیم. در ادامه برای اینکه یه محیط واقعی رو شبیه سازی کنیم git رو روی یک ویندوز۷ نصب کردیم و از صفر شروع کردیم به کار با گیت. بعدش با git gui و git bash آشنا شدیم. در ادامه ریپازیتوری خودمون رو به اسم basic-programming ساختیم و با فایل gitignore هم آشنا شدیم. بعدش رفتیم سراغ ریموت شدن به یه ریپازیتوری و دیدم که یکم سخته. لذا آسون ترین روش رو استفاده کردیم و کدهامون رو به گیت وصل کردیم. خیلی مختصر با دستور clone و status و commit و push هم آشنا شدیم و در ادامه گیت رو توی پایچارم فعالسازی کردیم. در نهایت تغییراتی روی پروژه اعمال کردیم و commit و push کردیم. یه بار هم از دستور revert استفاده کردیم و در نهایت rollback رو هم یاد گرفتیم.
لینک آپارات:
https://www.aparat.com/v/YSyCg
لینک یوتیوب:
https://youtu.be/yQ9v9fkdMDM
توی این قسمت در مورد سورس کنترل یا ورژن کنترل ها تحقیق کردیم و یکم تاریخچه شون رو بررسی کردیم. فهمیدیم که SVN و Git و TFS و... وجود داره. بعدش در مورد گیت هاب و گیت لب هم مطالعه کردیم. در ادامه برای اینکه یه محیط واقعی رو شبیه سازی کنیم git رو روی یک ویندوز۷ نصب کردیم و از صفر شروع کردیم به کار با گیت. بعدش با git gui و git bash آشنا شدیم. در ادامه ریپازیتوری خودمون رو به اسم basic-programming ساختیم و با فایل gitignore هم آشنا شدیم. بعدش رفتیم سراغ ریموت شدن به یه ریپازیتوری و دیدم که یکم سخته. لذا آسون ترین روش رو استفاده کردیم و کدهامون رو به گیت وصل کردیم. خیلی مختصر با دستور clone و status و commit و push هم آشنا شدیم و در ادامه گیت رو توی پایچارم فعالسازی کردیم. در نهایت تغییراتی روی پروژه اعمال کردیم و commit و push کردیم. یه بار هم از دستور revert استفاده کردیم و در نهایت rollback رو هم یاد گرفتیم.
لینک آپارات:
https://www.aparat.com/v/YSyCg
لینک یوتیوب:
https://youtu.be/yQ9v9fkdMDM
👍2
✅ آیا همیشه بهتره از آخرین نسخه پایتون برای همه پروژه ها استفاده کنیم؟
نظر چند تا از دوستان با تجربه در این مورد:
✔️یکسری پکیج هایی که اپدیت ندادن از ۳.۹ به ۳.۱۰ نیاز به یکسری تغییرات ریز دارن که باید فورک کنی دستی اپدیت کنی. ولی من خودم از ۳.۱۰ استفاده میکنم همه جا
✔️چون رو ۳.۱۰ یک تایمی انقدر سر پکیج ها ارور خوردم اومدم ۳.۹ همچی اوکی بود و اینکه الان دیفالت ۳.۱۰ وصله اوکی، ولی قدیمی ها روی ۳.۸ و ۳.۹ موندن دیگ
✔️تقریبا تمام پروژه هایی که تجاری هستن پایتون ۳.۸ و ۳.۹ استفاده میکنم. پروژه های استارتاپی و شخصی و ... آخرین نسخه پایتون (فکرکنم ۳.۱۱) برای من اینطوریه. روی همین ۳.۸ و ۳.۹ تا حالا چندین بار سر package conflict سرویس شدیم جرات نداریم بالاتر ببریم توی پروژه هایی که حساسن
✔️ببین من معتقدم که بسته به نیازت باید بری جلو و میدونم این خیلی کلیشه ای هست ولی اگر کاری نداشته باشم و لنگ نسخه بالا تر نباشم ۳.۹ ولی مثلاً من الان تفاوت سرعتم با ۳.۱۰ مشهوده و نیاز دارم سریع تر باشم توی یه پروژه دیگه با ۳.۱۰ میرم جلو
🙏🏻 شما هم نظر خودتون رو بدید (خصوصی هم بگید اوکیه). نظرات بقیه رو هم به کامنت ها اضافه میکنم
نظر چند تا از دوستان با تجربه در این مورد:
✔️یکسری پکیج هایی که اپدیت ندادن از ۳.۹ به ۳.۱۰ نیاز به یکسری تغییرات ریز دارن که باید فورک کنی دستی اپدیت کنی. ولی من خودم از ۳.۱۰ استفاده میکنم همه جا
✔️چون رو ۳.۱۰ یک تایمی انقدر سر پکیج ها ارور خوردم اومدم ۳.۹ همچی اوکی بود و اینکه الان دیفالت ۳.۱۰ وصله اوکی، ولی قدیمی ها روی ۳.۸ و ۳.۹ موندن دیگ
✔️تقریبا تمام پروژه هایی که تجاری هستن پایتون ۳.۸ و ۳.۹ استفاده میکنم. پروژه های استارتاپی و شخصی و ... آخرین نسخه پایتون (فکرکنم ۳.۱۱) برای من اینطوریه. روی همین ۳.۸ و ۳.۹ تا حالا چندین بار سر package conflict سرویس شدیم جرات نداریم بالاتر ببریم توی پروژه هایی که حساسن
✔️ببین من معتقدم که بسته به نیازت باید بری جلو و میدونم این خیلی کلیشه ای هست ولی اگر کاری نداشته باشم و لنگ نسخه بالا تر نباشم ۳.۹ ولی مثلاً من الان تفاوت سرعتم با ۳.۱۰ مشهوده و نیاز دارم سریع تر باشم توی یه پروژه دیگه با ۳.۱۰ میرم جلو
🙏🏻 شما هم نظر خودتون رو بدید (خصوصی هم بگید اوکیه). نظرات بقیه رو هم به کامنت ها اضافه میکنم
🔥5
با استفاده از سایت https://www.mockaroo.com/ می تونیم دیتاست تصادفی با تنوع حدود ۱۶۰ نوع دیتا تایپ و خروجی با فرمت SQL ,JSON , CSV و .... ایجاد کنیم. برای پر کردن دیتابیس با داده های فیک میتونه مناسب باشه.
البته با پکیج های factory_boy و faker هم میتونیم همین کارهارو انجام بدیم. اما به قول یکی از همکاران این سایت user friendly هست.
البته با پکیج های factory_boy و faker هم میتونیم همین کارهارو انجام بدیم. اما به قول یکی از همکاران این سایت user friendly هست.
👍14❤1
✅ یه پست (سوال) لینکدین از Sahar Farahzad در مورد DRF. جالبه + چندتا از نظرات پست هم توی کامنت ها میزام
لینک پست:
https://www.linkedin.com/posts/sahar-farahzad-7b7559ba_django-rest-swagger-220-activity-7030204542608637952-IcHA?utm_source=share&utm_medium=member_desktop
سلام دوستان.
دوستان جنگو کار یه سوال ازتون دارم:
کسی میدونه چطور میشه داکیومنت swagger و برای جنگو بهینه کرد؟
من یه سری راهکار پیدا کردم اما بازم خوب نیست. مثلا اگه توی ویو کامنت بذاریم
"""
list:
my title
my description
"""
این میاد برای Get عنوان و توضیحات میذاره. نکته اش اینه که حتما یه خط بینش فاصله باشه تا تشخیص بده اولیه عنوان و دومیه توضیحات هست. اما خب فرض کن همینجا برای create و update و partial_updat و ... هم بذاری. اونوقت تو api اصلا چیز قشنگی نشون نمیده و همه یه خط درمیون فاصله هست. خیلی بد میشه.
سوال دومم اینه که چطوری میشه example ها رو درست کرد؟
دو نوع example داریم:
1. Parameters
2. Responses
یه سری جاها به جای اینکه توی example آبجکت و نشون بده، یک استرینگ فقط برای id داره در حالی که توی api آبجکت هستش.
یه راهکار پیدا کردم که جواب نداد گویا واسه ورژن های قدیمی هست. مثلا:
"""
parameters:
-name: user
type: string
"""
اینجا برعکس انجام دادم. انتظار داشتم user که آبجکت هست تبدیل به id که استرینگ هست بشه.
چندین روزه دارم میگردم. اگه کمک کنید ممنون میشم.
کسی راهکار بهتر داره؟
لینک هایی که خوندم اینا مهمترینهاش بودن:
https://lnkd.in/e7YkdtNK
https://lnkd.in/eeuSRGNM
https://lnkd.in/ek5ZD29S
این باید چیز خوبی باشه اما نتونستم خوب بفهممش:
https://lnkd.in/ej6WMv4i
لینک پست:
https://www.linkedin.com/posts/sahar-farahzad-7b7559ba_django-rest-swagger-220-activity-7030204542608637952-IcHA?utm_source=share&utm_medium=member_desktop
سلام دوستان.
دوستان جنگو کار یه سوال ازتون دارم:
کسی میدونه چطور میشه داکیومنت swagger و برای جنگو بهینه کرد؟
من یه سری راهکار پیدا کردم اما بازم خوب نیست. مثلا اگه توی ویو کامنت بذاریم
"""
list:
my title
my description
"""
این میاد برای Get عنوان و توضیحات میذاره. نکته اش اینه که حتما یه خط بینش فاصله باشه تا تشخیص بده اولیه عنوان و دومیه توضیحات هست. اما خب فرض کن همینجا برای create و update و partial_updat و ... هم بذاری. اونوقت تو api اصلا چیز قشنگی نشون نمیده و همه یه خط درمیون فاصله هست. خیلی بد میشه.
سوال دومم اینه که چطوری میشه example ها رو درست کرد؟
دو نوع example داریم:
1. Parameters
2. Responses
یه سری جاها به جای اینکه توی example آبجکت و نشون بده، یک استرینگ فقط برای id داره در حالی که توی api آبجکت هستش.
یه راهکار پیدا کردم که جواب نداد گویا واسه ورژن های قدیمی هست. مثلا:
"""
parameters:
-name: user
type: string
"""
اینجا برعکس انجام دادم. انتظار داشتم user که آبجکت هست تبدیل به id که استرینگ هست بشه.
چندین روزه دارم میگردم. اگه کمک کنید ممنون میشم.
کسی راهکار بهتر داره؟
لینک هایی که خوندم اینا مهمترینهاش بودن:
https://lnkd.in/e7YkdtNK
https://lnkd.in/eeuSRGNM
https://lnkd.in/ek5ZD29S
این باید چیز خوبی باشه اما نتونستم خوب بفهممش:
https://lnkd.in/ej6WMv4i
👍4
به کانال جنگولرن از ۱ تا ۵ چه امتیازی میدید؟ (واقعی باشه لطفا)
Anonymous Poll
10%
1
9%
2
22%
3
26%
4
34%
5
👍9🤮4
✅ پیاده سازی معماری Onion با جنگو
https://www.youtube.com/watch?v=NVHxdsaHFwk
https://www.youtube.com/watch?v=NVHxdsaHFwk
YouTube
معماری جنگو با پیاز
اگر تا به حال پیاز خوردین یا پیاز دوست دارین این ویدیو مخصوص شماست
▬ محتوای ویدیو ▬▬▬▬▬▬▬▬▬▬
ما تو این ویدیو بررسی میکنیم که بیزینس لاجیک چیه
و چگونه معماری تمیزی رو در جنگو میتونیم داشته باشیم
▬ شبکه های اجتماعی ▬▬▬▬▬▬▬▬▬▬
یوتیوب: https://www.…
▬ محتوای ویدیو ▬▬▬▬▬▬▬▬▬▬
ما تو این ویدیو بررسی میکنیم که بیزینس لاجیک چیه
و چگونه معماری تمیزی رو در جنگو میتونیم داشته باشیم
▬ شبکه های اجتماعی ▬▬▬▬▬▬▬▬▬▬
یوتیوب: https://www.…
👍3
Forwarded from Milad Hatami
چندتا از تجربه مصاحبه های من که توی ویرگول منتشر کردم.
خیلی مصاحبه رفتم. فقط اینارو حال داشتم بنویسم (و یادم مونده چی گفتن)
https://vrgl.ir/9GU9J
https://vrgl.ir/XZeyE
https://vrgl.ir/fSgl0
https://vrgl.ir/b0JcD
https://vrgl.ir/OfRCp
https://vrgl.ir/t8h16
https://vrgl.ir/siEuO
خیلی مصاحبه رفتم. فقط اینارو حال داشتم بنویسم (و یادم مونده چی گفتن)
https://vrgl.ir/9GU9J
https://vrgl.ir/XZeyE
https://vrgl.ir/fSgl0
https://vrgl.ir/b0JcD
https://vrgl.ir/OfRCp
https://vrgl.ir/t8h16
https://vrgl.ir/siEuO
ویرگول
تجربه مصاحبه برنامه نویس جنگو شرکت مهسان - اسکایپی
در این مصاحبه من به عنوان برنامه نویس پایتون - جنگو به چالش کشیده شدم
👍8🙏4
یک سوال #مصاحبه دیگه
از کانال https://t.iss.one/pytens
Core Python
❔ این سوالات برای هر موقعیت شغلی پایتون پرسیده میشه، سوال از تجربه شخصی دوستان توی مصاحبه هست که بنظرم سوال خیلی خوب و جالبی اومد
سطح : mid-level
یک کلاس برای تولید اعداد رندم بنویس :
کلاس رو توی ۳ حالت پیاده سازی کن :
1- Sequence
2- Iterator
3-Iterable
ازونجایی که کانال جای پیاده سازی نیست، سعی کنید فقط بگید تفاوت این ۳ از نظر کد چی هست !؟
مهمترین ویژگیهایی که یک کلاس باید داشته باشه تا توی یکی ازین دستهبندی ها قرار بگیره ؟
✅ جواب:
تفاوتها :
Sequence :
توی پیاده سازی و استانداردش میگه که sequence باید ۲ تا متد رو حتما داشته باشه :
Iterator:
۳ تا ویژگی اصلی داره طبق تعریف پروتکل توی پایتون
۱- فقط و فقط یکبار قابل استفاده هست ینی بعد از اینکه بار اول روش loop بزنید دیگه نمیتونید اینکار رو بکنید یا مقدار خالی بر میگردونه یا ارور و باید دوباره تعریف بشه توی توابع داخلی پایتون تابع
open()
اینطور هست.
۲- حتما باید متد
۳- متد
Iterable :
۱- برخلاف Iterator با یکبار تعریف چندین بار میشه استفادهاش کرد بعنوان مثال تابع
range()
توی خود پایتون بریزیدش توی یک متغییر و بیش از ۱ بار روش loop بزنید هربار خروجی درست رو میگیرید
۲- شامل متد
۳- متد
بخش داکیومنت مربوط به این بحث :
Python docs
از کانال https://t.iss.one/pytens
Core Python
❔ این سوالات برای هر موقعیت شغلی پایتون پرسیده میشه، سوال از تجربه شخصی دوستان توی مصاحبه هست که بنظرم سوال خیلی خوب و جالبی اومد
سطح : mid-level
یک کلاس برای تولید اعداد رندم بنویس :
کلاس رو توی ۳ حالت پیاده سازی کن :
1- Sequence
2- Iterator
3-Iterable
ازونجایی که کانال جای پیاده سازی نیست، سعی کنید فقط بگید تفاوت این ۳ از نظر کد چی هست !؟
مهمترین ویژگیهایی که یک کلاس باید داشته باشه تا توی یکی ازین دستهبندی ها قرار بگیره ؟
✅ جواب:
تفاوتها :
Sequence :
توی پیاده سازی و استانداردش میگه که sequence باید ۲ تا متد رو حتما داشته باشه :
__len__, __getitem__اگر این ۲ مورد رو پیاده سازی کنید قطعا sequence رو دارید.
Iterator:
۳ تا ویژگی اصلی داره طبق تعریف پروتکل توی پایتون
۱- فقط و فقط یکبار قابل استفاده هست ینی بعد از اینکه بار اول روش loop بزنید دیگه نمیتونید اینکار رو بکنید یا مقدار خالی بر میگردونه یا ارور و باید دوباره تعریف بشه توی توابع داخلی پایتون تابع
open()
اینطور هست.
۲- حتما باید متد
__iter__
رو داشته باشه و این متد خودش رو برمیگردونه معمولا (ینی یک Iterator)۳- متد
__next__
براش تعریف میشه Iterable :
۱- برخلاف Iterator با یکبار تعریف چندین بار میشه استفادهاش کرد بعنوان مثال تابع
range()
توی خود پایتون بریزیدش توی یک متغییر و بیش از ۱ بار روش loop بزنید هربار خروجی درست رو میگیرید
۲- شامل متد
__iter__
میشه ولی خودش رو قطعا بر نمیگردونه و فقط و فقط یک iterator رو بر میگردونه۳- متد
__next__
براش پیاده سازی
نمیشه چون روی خودش قرار نیست loop بزنیدبخش داکیومنت مربوط به این بحث :
Python docs
Telegram
دستاوردهای یادگیری عمیق(InTec)
هوش مصنوعی، یادگیری ماشین و یادگیری عمیق
موضوع اصلی کانال
این یک بلاگ شخصی با طرز تفکر شخصی هست.
Core Python : @PyHints
تلاشی هم در یادگیری Rust دارم که درحال داکیومنت شدن هم هست؛ اگر شماهم به این زبان علاقمند هستید join یادتون نره
Rust: @PyRust
موضوع اصلی کانال
این یک بلاگ شخصی با طرز تفکر شخصی هست.
Core Python : @PyHints
تلاشی هم در یادگیری Rust دارم که درحال داکیومنت شدن هم هست؛ اگر شماهم به این زبان علاقمند هستید join یادتون نره
Rust: @PyRust
❤11🤮7👍1
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاه و دوم - ignore کردن فایل commit شده
در شروع این ویدئو میخواستیم ببینم که جلسه قبل چکار کردیم که با مشکل پوش شدن تنظیمات pycharm مواجه شدیم. یعنی تنظیمات پایچارم روی سیستم خودمون داشت به گیت منتقل میشد و ایرادش توی کار تیمی مشخص میشه. ابتدا تلاش کردیم که به gitignore اضافه اش کنیم. ولی مشکل همچنان وجود داشت. برای رفع این مشکل با دستوراتی مثل git status, git rm --cached, git commit, git push, git pull , git add آشنا شدیم. بعدش یاد گرفتیم چطور از سایت گیت هاب فایل حذف کنیم و کامیت کنیم. در ادامه یا گرفتیم که چه وقتهایی باید کامیت کنیم و چه فایل هایی رو باید با همدیگه commit کنیم. یه اشاره هایی هم به branch و merge داشتیم و فهمیدیم که شرکت های برنامه نویسی برای مدیریت پروژه و نحوه commit کردن ها، اصول خودشون رو دارن. در انتهای ویدئو هم یه باگ رو برطرف کردیم.
لینک آپارات:
https://www.aparat.com/v/Yl0gC
لینک یوتیوب:
https://youtu.be/ewHoQZw_1m4
در شروع این ویدئو میخواستیم ببینم که جلسه قبل چکار کردیم که با مشکل پوش شدن تنظیمات pycharm مواجه شدیم. یعنی تنظیمات پایچارم روی سیستم خودمون داشت به گیت منتقل میشد و ایرادش توی کار تیمی مشخص میشه. ابتدا تلاش کردیم که به gitignore اضافه اش کنیم. ولی مشکل همچنان وجود داشت. برای رفع این مشکل با دستوراتی مثل git status, git rm --cached, git commit, git push, git pull , git add آشنا شدیم. بعدش یاد گرفتیم چطور از سایت گیت هاب فایل حذف کنیم و کامیت کنیم. در ادامه یا گرفتیم که چه وقتهایی باید کامیت کنیم و چه فایل هایی رو باید با همدیگه commit کنیم. یه اشاره هایی هم به branch و merge داشتیم و فهمیدیم که شرکت های برنامه نویسی برای مدیریت پروژه و نحوه commit کردن ها، اصول خودشون رو دارن. در انتهای ویدئو هم یه باگ رو برطرف کردیم.
لینک آپارات:
https://www.aparat.com/v/Yl0gC
لینک یوتیوب:
https://youtu.be/ewHoQZw_1m4
👍5❤1
Forwarded from برنامه نویسی از پایه
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت پنجاه و سوم - ارث بری template در جنگو
در ابتدای این ویدئو توی سایت w3schools لاگین کردم و پروفایل و بقیه قسمت های دیگه اش رو بررسی کردم. توی این بررسی با مفهوم sub-domain آشنا شدیم. بعد از اون رفتیم توی داکیومنت های جنگو و در مورد template inheritance یا ارث بری تمپلت ها در جنگو مطالعه کردیم و در ادامه یه فایل html با اسم account_base.html ساختیم و تمپلت های لاگین و ثبت نام رو طوری تغییر دادیم که از این تمپلت ارث بری کنن و در ادامه همین کار با مفهوم extends و block هم آشنا شدیم. البته حین اعمال این تغییرات خودم یکم قاطی کردم ولی زود متوجه داستان شدم :)
لینک آپارات:
https://aparat.com/v/Avjl3
لینک یوتیوب:
https://youtu.be/jj_GMTkd9EI
در ابتدای این ویدئو توی سایت w3schools لاگین کردم و پروفایل و بقیه قسمت های دیگه اش رو بررسی کردم. توی این بررسی با مفهوم sub-domain آشنا شدیم. بعد از اون رفتیم توی داکیومنت های جنگو و در مورد template inheritance یا ارث بری تمپلت ها در جنگو مطالعه کردیم و در ادامه یه فایل html با اسم account_base.html ساختیم و تمپلت های لاگین و ثبت نام رو طوری تغییر دادیم که از این تمپلت ارث بری کنن و در ادامه همین کار با مفهوم extends و block هم آشنا شدیم. البته حین اعمال این تغییرات خودم یکم قاطی کردم ولی زود متوجه داستان شدم :)
لینک آپارات:
https://aparat.com/v/Avjl3
لینک یوتیوب:
https://youtu.be/jj_GMTkd9EI
👍3👎1
Forwarded from سید فرندز / برنامه نویسی / هک و امنیت / تکنولوژی (Seyed Mohammad Khoshnava)
📌 مراحل ارسال کد otp و احراز هویت آن
ارسال کد :
شماره تلفن رو چک میکنم که آیا در دیتابیس چنین اکانتی بن/حذف شده یا نه
یک داکیومنت برای otp به شکل زیر در نظر میگیرم
class OTPDocument(Document):
code = fields.StringField()
contact = fields.StringField()
expire_at = fields.LongField()
retry = fields.IntField()
created_at = fields.DateTimeField(default=datetime.datetime.utcnow)
فیلد کد : حاوی کدی که قراره ارسال کنم
فیلد کانتکت : حاوی ایمیل یا شماره تلفنی که قراره بهش کد ارسال کنم
فیلد تاریخ انقضا : زمان منقضی شدن کد
فیلد تعداد تلاش : تعداد دفعاتی که کد برای ورود چک میشه و اشتباه زده شده
فیلد تاریخ ساخت : جهت حذف خودکار توسط مونگو (بعد از یک ساعت توسط ایندکس expireAfterSeconds دلیتش میکنم)
چرا بعد یکساعت منقضی میکنم ؟ که اگر تعداد تلاش رفته باشه بالا بازم بعد یکساعت بتونه درخواست بده(صفر بشه یعنی)
اگر هنگام درخواست داکیومنت موجود باشه و هنوز منقضی نشده باشه کد قبلی نمیتونه درخواست کد جدید بده
کد رو برای کاربر ارسال میکنم (پیامک یا ایمیل) و بهش ایدی دیتابیس (مونگو یک ایدی ۳۲ کاراکتری داره)
اگر دیتابیس مونگو نیست یا نیاز به امنیت بیشتر هست یک فیلد بزارید و یک کد ۳۲ کاراکتری جنریت کنید و بدید دست کاربر
تو مرحله بعدی کاربر اون کد جنریت شده مرحله قبل یا ایدی دیتابیس مونگو رو ازش میگیریم و کد هم دریافت میکنیم (با شماره سرچ نمیزنیم توی دیتابیس . با اون کد چک میکنیم)
احراز هویت کد :
اگر کد جنریت شده (۳۲ کاراکتری ) اشتباه باشه درخواستش رو رد میکنم
اگر کد جنریت شده درست باشه ولی با کد otp اشتباه داده بشه توی دیتابیس تعداد retry رو میبرم بالا
اگر تعداد تلاش بیشتر از لیمیت کانفیگم باشه و همچنین به زمان اکسپایر نرسیده باشیم. درخواستش رد میکنم
اگر زمان اکسپایر گذشته باشه درخواستش رد میکنم
باقی مراحل مربوط به ساخت توکن یا سشن جهت ورود …
⚠️ تعداد درخواست در هر ساعت روی این متد ها لیمیت میشه بر اساس ای پی و ایدی دیوایس
🚫 از نظر من امنه. خوشحال میشم اگر باگی بگید
🖥 @SEYED_BAX
ارسال کد :
شماره تلفن رو چک میکنم که آیا در دیتابیس چنین اکانتی بن/حذف شده یا نه
یک داکیومنت برای otp به شکل زیر در نظر میگیرم
class OTPDocument(Document):
code = fields.StringField()
contact = fields.StringField()
expire_at = fields.LongField()
retry = fields.IntField()
created_at = fields.DateTimeField(default=datetime.datetime.utcnow)
فیلد کد : حاوی کدی که قراره ارسال کنم
فیلد کانتکت : حاوی ایمیل یا شماره تلفنی که قراره بهش کد ارسال کنم
فیلد تاریخ انقضا : زمان منقضی شدن کد
فیلد تعداد تلاش : تعداد دفعاتی که کد برای ورود چک میشه و اشتباه زده شده
فیلد تاریخ ساخت : جهت حذف خودکار توسط مونگو (بعد از یک ساعت توسط ایندکس expireAfterSeconds دلیتش میکنم)
چرا بعد یکساعت منقضی میکنم ؟ که اگر تعداد تلاش رفته باشه بالا بازم بعد یکساعت بتونه درخواست بده(صفر بشه یعنی)
اگر هنگام درخواست داکیومنت موجود باشه و هنوز منقضی نشده باشه کد قبلی نمیتونه درخواست کد جدید بده
کد رو برای کاربر ارسال میکنم (پیامک یا ایمیل) و بهش ایدی دیتابیس (مونگو یک ایدی ۳۲ کاراکتری داره)
اگر دیتابیس مونگو نیست یا نیاز به امنیت بیشتر هست یک فیلد بزارید و یک کد ۳۲ کاراکتری جنریت کنید و بدید دست کاربر
تو مرحله بعدی کاربر اون کد جنریت شده مرحله قبل یا ایدی دیتابیس مونگو رو ازش میگیریم و کد هم دریافت میکنیم (با شماره سرچ نمیزنیم توی دیتابیس . با اون کد چک میکنیم)
احراز هویت کد :
اگر کد جنریت شده (۳۲ کاراکتری ) اشتباه باشه درخواستش رو رد میکنم
اگر کد جنریت شده درست باشه ولی با کد otp اشتباه داده بشه توی دیتابیس تعداد retry رو میبرم بالا
اگر تعداد تلاش بیشتر از لیمیت کانفیگم باشه و همچنین به زمان اکسپایر نرسیده باشیم. درخواستش رد میکنم
اگر زمان اکسپایر گذشته باشه درخواستش رد میکنم
باقی مراحل مربوط به ساخت توکن یا سشن جهت ورود …
⚠️ تعداد درخواست در هر ساعت روی این متد ها لیمیت میشه بر اساس ای پی و ایدی دیوایس
🚫 از نظر من امنه. خوشحال میشم اگر باگی بگید
🖥 @SEYED_BAX
👍1🙏1