جنگولرن
3.82K subscribers
287 photos
74 videos
31 files
557 links
آموزش Django و بستگان
Download Telegram
برای همه دوستان چه تازه کار چه حرفه‌ای (که نحوه عملکرد رو نمی‌دونند)

هرچیزی رو pip install نزنید
هر پکیجی رو استفاده نکنید

این جمله ادامه داره : "برای هر چیزی توی پایتون ی پکیج وجود داره" بله وجود داره ولی ادامه‌اش مهمتره (شما حق نصبش رو ندارید.
انقدر ادامه این جمله استفاده نشده که چندسالی هست ما توی شرکت از Docker و ... برای حتی محیط توسعه استفاده می‌کنیم (به لطف vscode که دیگه راحت‌تر هم شده)

دلیل خوبی هم داریم :
pip (pypi.org)
هیچ چک امنیتی روی کدها نداره و شما هرچیزی رو می‌تونید بعنوان پکیج ارسال کنید
برای همین نباید از هر کتابخونه‌ای استفاده کنید.
اگر کتابخونه معروف نیست (چندنفر توسعه دهنده نداره) حتما سورس کدهاش رو بخونید و ترجیحا خودتون به اندازه نیاز بازنویسی کنید؛ یا اینکه روی همون ورژن خاصی که بررسی کردید بمونید و در زمان نیاز به آپدیت پکیج سورس نسخه جدید رو مجددا بررسی کنید.

(این شرایط برای باقی زبان‌های این تیپی هم وجود داره)
خلاصه که ی پکیج میتونه شامل :
Keylogger, Trojan, ....
هم باشه؛ در صورت نفوذ دولوپر شخصی هست که باید پاسخگو باشه.
👍23🤔3
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهلم - نصب جنگو و اولین پروژه

لینک آپارات:
https://aparat.com/v/Oh1k0
لینک یوتیوب:
https://youtu.be/rdtP_UVLulg
👍8👏1
سلام به همه
در حین بررسی کدهای این ریپازیتوری (https://github.com/miladhzz/DRF-TDD-example) بودم که:
✔️ توی تنظیمات پروژه اش با TEST_RUNNER آشنا شدم.

به صورت کلی بخوام بگم: ما برای اجرای تست ها از ابزار داخلی خود جنگو ( که با دستور manage.py test اجرا میشه ) استفاده میکنیم. اما جنگو این امکان رو به ما میده که از فریمورک های تست دیگه هم استفاده کنیم.

اتفاقا توی همین پروژه با nose آشنا شدم و دارم در مورد تفاوتش با pytest تحقیق میکنم.
در مورد TEST_RUNNER میتونید از لینک زیر بیشتر بخونید (داکیومنت جنگو):
https://docs.djangoproject.com/en/4.1/topics/testing/advanced/#using-different-testing-frameworks

پروژه رو فورک کردم که داشته باشیمش :)
👍9🔥1
Forwarded from Deep Time
در حال حاضر در حال refactoring یکی از سیستم‌های خودمون هستم و گفتم بد نیست توضیحی درباره اهمیت refactoring بدم.

یکی از مهم ترین پادالگوها (anti-patterns) در ایجاد نرم‌افزار Lava Flow (جریان مواد مذاب) هست که به حالتی گفته میشه که Dead Code داریم. در واقع وقتی برنامه‌نویس‌های تیم شما یک کد رو می‌نویسن و میبینن کار هم میکنه (functional هست) احتمالا کار رو تموم شده بدونن و این جریان مذاب کد رو بیخیال بشن که باعث میشه فریز بشه و کلی اذیت کنه بعدا. خصوصا وقتی مدتی از نوشتن کد بگذره نه تنها افراد جدید نمیتونن کد رو بفهمن بلکه خود کسی هم که کد رو نوشته دیگه نمیفهمه و کد قابل نگهداری نخواهد بود.

برای همین تعریف Dead Code کدی هست که اتفاقا میتونه functional هم باشه اما maintainable نیست.

علت چیه:
در تیم شما Refactoring به شکل سخت‌گیرانه انجام نمیشه. دقت کنید که در تمامی متولوژی‌های چابک Refactoring اجباری هست.

راه حل:
ساده‌سازی و refactoring باید در پروژه‌های شما اجبار باشن. دقیقا مثل اون اصل Invent and Simplify در شرکت آمازون. هرچقدر کار بزرگتر بشه اهمیت ساده‌سازی بالاتر خواهد بود. ساده سازی باید به شکل مداوم انجام بشه.

باید دقت کنیم که تعریف Done یا تمام شده یک تعریف بسیار مهم در توسعه چابک و روش‌های agile هست و باید حتما یکسری المان در نظر گرفته بشه. اینکه ددلاین یک تسک نزدیک باشه و کدی که کار میکنه رو تمام شده فرض کنیم و بگیم بعدا برمیگردیم اصلاح میکنیم بزرگترین اشتباه هست.

@deeptimeai
👍9
Media is too big
VIEW IN TELEGRAM
برنامه نویس از پایه قسمت چهل و یکم - ساخت اولین اپلیکیشن جنگو

لینک آپارات:
https://www.aparat.com/v/J3e8C
لینک یوتیوب:
https://youtu.be/ULiyFzLRMGo
👍81
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و دوم - فایل های استاتیک جنگو و متد GET

لینک آپارات:
https://aparat.com/v/VYNl8
لینک یوتیوب:
https://youtu.be/5aqJ8vNbmeA
یه ویدئوی حدودا 20 دقیقه ای که میتونید باهاش کاربرد Faker و facotry_boy رو درک کنید
البته یه Django Command هم میسازه که اونم بد نیست یاد بگیریم. یه پکیج به اسم halo هم معرفی میکنه. اونم باحاله
یکم انگلیسی حرف زدنش رو مخه. اما کلا مفهومه

آپدیت: به عنوانش که گفته react و... کاری نداشته باشید این قسمتش فقط Faker و facotry_boy و... هست

https://www.youtube.com/watch?v=WWowP_8bMR4
👍6
🧐 آیا هات داگ ساندویچه؟
توی این مطلب در مورد فیلد های ManyToMany در جنگو خیلی روان توضیح داده شده
✔️ در مورد through هم توضیح داده که توصیه میکنم حتما این through رو بخونید
https://www.sankalpjonna.com/learn-django/the-right-way-to-use-a-manytomanyfield-in-django
4👍1
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و سوم - لاگین با استفاده از متد GET

توی این ویدئو اول از همه. تغییراتی که ابوذر داده بود رو اعمال کردیم. بعدش با دیباگ و breakpoint آشنا شدیم و باهاش تونستیم کدمون رو دیباگ کنیم. با استفاده از متد GET اطلاعات ارسالی از فرم رو توی view مون نمایش دادیم و با استفاده از متد authenticate و متد login تونستیم توی جنگو لاگین کنیم. بعد از لاگین هم با متد redirect به صفحه ادمین رفتیم.

لینک آپارات:
https://aparat.com/v/M2kTr
لینک یوتیوب:
https://youtu.be/NopA_0axBFI
👍5
در هر متد تست فقط یک assertion باید انجام داد...!

توی کتاب Art of Unit Testing صراحتا جمله بالا رو تاکید کرده.
اما همونطوری که می بینید خودش یه جایی این اصل رو نقض کرده 🧐 (کد سی شارپه. ولی توی این موضوع زبان مهم نیست)
البته توی چند خط پایین تر توضیح داده که چه مواقعی میشه چندتا assert توی یه تست داشته باشیم.
✔️ به صورت کلی هر تست باید یک رفتار (behavior) رو بررسی کنه و اگه یه رفتار داریم، ولی نیاز به چندتا assert باشه، مجازه.
توضیحات تکمیلی رو توی مطلب زیر میتونید ببینید (منابع جالبی رو هم معرفی کرده)

https://pierodibello.medium.com/one-assertion-per-test-732cc2a7d3d
👍5
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و چهارم - لاگین با استفاده از متد POST

در این ویدئو ابتدا یکم در مورد CSRF و middleware های جنگو توضیح میدم. بعدش میریم و چندتا عکس توی گوگل در مورد این attack می بینیم. و در حین این توضیحات یکم با cookie ها آشنا میشیم. و بالاخره با csrf_token جنگو و نحوه کارکردش آشنا میشیم و با فرمی که داریم لاگین می کنیم. این ویدئو به مشکل عجیبی خوردیم که باعث شد حدودا ۲۲ دقیقه بشه :)

لینک آپارات:
https://aparat.com/v/hsbai
لینک یوتیوب:
https://youtu.be/JOZpNeLZJ4E
👍3
قطعا تا حالا توی فیلدهای مدل تون از choices استفاده کردید. مثلا برای مشخص کردن (مرد/زن)
توی عکس شماره 1 حالت عادی این روش هست
و عکس شماره 2 همین کارو با ارث بری از TextChoices پیاده سازی کرده.

لینک زیر در این مورد بیشتر توضیح داده:
https://adamj.eu/tech/2020/01/27/moving-to-django-3-field-choices-enumeration-types/
👍12
دیتاکلاس در پایتون چیه؟ و چه استفاده ای توی جنگو میتونه داشته باشه؟!!!

✔️ با استفاده از dataclass پایتون که در نسخه 3.7 معرفی شد میتوانید بخش بزرگی از ساخت کلاس را به پایتون بسپارید (کلاس هایی که پیچیدگی نداشته باشن و از تکرار کدها جلوگیری کنیم).

لینک های زیر از مونگارد و یکی هم از ویرگول در مورد دیتاکلاس ها توضیح دادن:
https://www.mongard.ir/one_part/160/python-dataclass/
https://vrgl.ir/CGI7W

✔️ و داکیومنت DRF یه پکیج معرفی کرده که با این dataclass می تونیم کدهای تکراری کمتری برای سریالایزر هامون بنویسیم
https://github.com/oxan/djangorestframework-dataclasses
👍8
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و پنجم - ارث بری از Form جنگو


توی این ویدئو با ولیدیشن های client side آشنا شدیم. بعدش رفتیم سراغ فرم ها در جنگو و با ارث بری از کلاس Form یک فرم جنگو ایجاد کردیم. در ادامه با متد is_valid آشنا شدیم و با breakpoint کد رو trace کردیم. در انتهای آموزش یکم با مزیت های فرم های جنگو آشنا شدیم و قرار شد جلسه بعدی استایل فرم جنگو رو درست کنیم.

لینک آپارات:
https://www.aparat.com/v/T6yVo
لینک یوتیوب:
https://youtu.be/pDrCMRWs1gQ
4👍2
یه کانال خوب برای یادگیری پایتون - جنگو و خیلی چیزای دیگه توی همین حوزه
استادش دکتر رحیمی هستن. کانال تازه راه افتاده و همین اولش هم مثال های خوبی ارائه کرده.

🌹🌹مدرسه برنامه نویسی🌺🌺
دوستان خود را به کانال ما دعوت کنید تا از آموزش های رایگان "مدرسه برنامه نویسی" استفاده کنند.
کانال تلگرام:
t.iss.one/programmingschool2
وب سایت آموزشی:
https://programmingschool.ir
4
Media is too big
VIEW IN TELEGRAM
برنامه نویسی از پایه قسمت چهل و ششم - استایل دهی به فرم جنگو

در ابتدای این ویدئو با ویجت های جنگو و PasswordInput آشنا شدیم. بعدش رفتیم سراغ کاستوم کردن ظاهر فرم های جنگو با راهنمایی گرفتم از داکیومنت Django. در ادامه آموزش یاد گرفتیم که چطور attr به widget ها اضافه کنیم و با این روش class برای input ها اضافه کردیم تا استایل دهی انجام بشه. همچنین یاد گرفتیم توی جنگو چطور کدهای html رو کامنت کنیم. در خلال آموزش با مفهوم context هم آشنا شدیم و در ادامه هم با حلقه for در template های جنگو کار کردیم. در انتهای ویدئو هم ایراد کدهامون رو پیدا کردیم و تونستیم خطاهای فرم رو نمایش بدیم. برای نمایش خطاهای فرم از novalidate در فرم ها استفاده کردیم.

لینک آپارات:
https://www.aparat.com/v/Jzne6
لینک یوتیوب:
https://youtu.be/zCS0Exuby0c
👍5
https://youtu.be/bKboIvNb_fY

دوستان اولین قسمت دوره آموزش مقدماتی DRF یا همون Django rest framework منتشر شد 🤩.
تو این دوره شما از صفر تا ۷۰ درصد DRF رو یاد خواهید گرفت بعد از این دوره میتونید هر برنامه ای که میخایید به صورت API و با استفاده از DRF توسعه بدید.
تو این دوره سعی میکنم علاوه بر یادگیری خود DRF با مفاهیم محیط کار و ابزار هاش هم آشنا بشید، مثل لینوکس، postman و ....

امیدوارم از این دوره چیزها مفید و باحالی یاد بگیرید❤️🫵

با معرفی دوره به دوستانتون باعث حمایت و در نتیجه دوره و آموزش ها بیشتر بشید🥹❤️‍🔥

مرسی از @AlirezaWDX برای تامبنیل ویدیو ❤️‍🔥🫵

💬 join -> @TorhamDevCH
👍112
Forwarded from  behrad
دوتا مفهوم داریم ، که خیلیا اینارو باهم اشتباها قاطی میکنن...
XSS : Cross Site Scripting
CSRF/XSRF : Cross Site Request Forgery

=+=+=+=+=+=+=+=+=+=+=+=+=+

من سعی میکنم جدا جدا توضیح بدم ، و بگم چیه...

=+=+=+=+=+=+=+=+=+=+=+=+=+

قبل از اینکه شروع کنم یه مفهومی هست که پیشنیازه توضیح بدم، بهش میگن:
SOP : Same Origin Policy

یه پالیسی (سیاست/قانون/عرف..) هست که توی وب رعایتش میکنن ، اونم اینه که کلاینتها/سرور ها رکوئستی رو valid میپندارن و معتبر میدونن که دقیقا از منبع درستش (منبع قبلی) باشه.

این اعتبار سنجی هم با چک کردن 3 تا چیز مشخص میشه:
1- پرتکلش همون باشه (مثلا HTTP)
2- آدرس هاست (دامین) همون باشه
3- پورت دقیقا همون باشه

مثلا یکی میاد یه رکوئست رو عوض میکنه به سمت براوزر تو و میگه من گوگلم:
https://hacker.com:80

براوزر تو گوگل رو این میدونه:
https://google.com:80
حالا میاد چک میکنه:
https://hacker.com:80
https://google.com:80
\____/ \______/ \__/
Prtocol Host Port

پروتکل همونه
هاست همون نیست
پورت همونه

یکی از شرطها برقرار نیست پس ارور:
Same Origin Policy
میده و رکوئست دراپ میشه😬

با این پالیسی میشه جلوی خیلی از حمله هارو گرفت ، ولی حملات دیگری هستن که با وجود این پالیسی بازم قابل انجامن مثل
XSS
XSRF/CSRF

که که قراره راجع بهشون حرف بزنیم
👍6