جنگولرن
3.82K subscribers
287 photos
74 videos
31 files
557 links
آموزش Django و بستگان
Download Telegram
شاید برای شما هم اتفاق بیافتد!!!
چند روز پیش یکی از دوستان بعد از اینکه یوزر جنگو رو کاستوم کرده بود. توی حذف کاربرها مشکل داشت.
همین که وارد صفحه حذف میشد پیغام خطای متد str می اومد.
من ریموت زدم و مستقیم رفتم سراغ مدل کاستوم شده اش. اما همه چی اوکی بود.
بالاخره مجبور شدم دیباگ کنم و متوجه شدم توی متد str به username اشاره کرده و چون خودش صراحتا None کرده بود. لکن خطا میداد...!
برای اینکه خوب متوجه بشید، خطارو شبیه سازی کردم و یه ویدئو ازش گرفتم. (دیر وقت بود و نمیشد صحبت کنم بیصدا ببینید 🙂)
البته خود جنگو خطاهارو معمولا خوب نشون میده. آخر ویدئو مشخصه
نسخه جنگو 4.0.6 و پایتون 3.10.5
ویدئو 👇🏻👇🏻👇🏻👇🏻
This media is not supported in your browser
VIEW IN TELEGRAM
ویدئوی خطای str که بالاتر توضیح دادم. صدا نداره
👍8
یه اکشن هایی توی کد هستن که گاهی نیازه یا همه با هم انجام بشن یا هیچ کدوم.
که توی جنگو ما از #transaction_atomic واسه هندل کردنش استفاده میکنیم.
و این فقط مربوط به بخش های مالی پروژه نمیشه.
چون معروف ترین مثالی که واسه اش زده میشه مثال حساب بانکیه.
ولی شما فرض کنید که یک موجودیت teacher دارید که یک نوع از User هستش. شما واسه ساخت موجودیت تیچر ؛ اول یوزر رو میسازید ؛ بعد از اون هم تیچر رو. توی خط کد های پشت سر هم.
حالا در نظر بگیرید برنامه خط اول رو پشت سر میذاره ؛ یوزر داخل مدل یوزر ساخته میشه اما قبل از این که همین یوزر داخل مدل تیچر هم ساخته بشه ؛ کد کرش میکنه یا هر نوع اکسپشنی رخ میده.
اینجاست که شما با اطلاعات ورودی یک دیتای ناقص در دیتابیس تعریف کردید.
میخوام بگم استفاده از #transaction_atomic ها مختص شرایط خیلی خاصی نیست.
فقط کافیه یه کم راجع به ترنزکشن ها توی دیتابیس بدونید و روش استفاده ازش رو مطالعه کنید.
از لینکدین fateme Akrami
👍3
به نظر شما دلیل خطا چیه؟
کدها همین هستن و بیشتر از این نیست.
نیم ساعت درگیرش بودم (درگیر ۴ خط کد) 🤦🏻‍♂️
👍1
📌 چنل برنامه نویسی سید و رفقا

کانالی پر از تجربه ها، اخبار و موارد فان برنامه نویسی هستش

🖥 @SEYED_BAX

عضو کانالش بشید. بیشتر مطالبش برنامه نویسیه 😁
حالا در کنارش شاید آموزش آشپزی، یا روش نقد کردن چک بی محل، یا ... هم یاد بگیرید.
4👍1
تا حالا به api versioning توجه کردید؟
متاسفانه برخی از اشخاصی که drf آموزش میدن به این مسئله اشاره نمیکنن و دوستامون تو محیط کار بخاطر ساختار اشتباهی که برای پیاده سازی پروژشون انتخاب کردن چاه اولو برا خودشون و دومیو برا شخصی که قراره جایگزینشون بشه میکَنن.
فرض کنید در حال پیاده سازی پروژه ی صرافی هستید .
پروژتون طبق معمول یکسری app داره که ما رو یکیش focus میکنیم ،
مثلا payment app.
اشتباهی که بسیار رایجه پیاده سازی کلاس های drf تو views.py ساخته شده داخل payment app هست !
در حالی که با ساختن یه پوشه به اسم api
میتونیم کنترل بیشتری تو پیاده سازی داشته باشیم
و هر ورژن رو تو پوشه ی خودش و فایلای خودش پیاده سازی کنیم تا شرکت هایی که از خدمات صرافیمون استفاده میکنن بتونن بین ورژن ها برحسب شرایطشون قدرت انتخاب داشته باشن .
با این ساختار یه پروژه ی حرفه ای تر و پخته تر داریم . برای درک بهتر عکس رو ببینید .
از لینکدین Erfan Aliaghdam
👍11
image_2022-07-18_22-25-57.png
497.6 KB
ما به این میگیم Full-Stack Developer
👎8🤯7👏3👍2
🥺 اولین آموزشی که ساختم برای 6 سال پیش بوده 🥺

ربطی به جنگو نداره، با محیط اکلیپس و برنامه نویسی اندروید بود
اون موقع ها اندروید استودیو هنوز خبری ازش نبود
ویدئوها بی صدا هستن و متنی آموزش دادم 😅
اعتماد به نفس صفر بوده

لینک آپارات:
https://www.aparat.com/v/fPxde
7
جنگولرن
Django Testing - Model Testing Introduction https://www.youtube.com/watch?v=GBgRMdjAx_c
✔️ در این ویدیو که مقدمه تست نویسی در جنگو هست، موارد زیر توضیح داده شده (کلا 36 دقیقه اس):
- فولدر بندی تست ها برحسب مدل
- نصب پکیج coverage که این پکیج نشون میده کدهای ما چقدر توسط تست کاور شدن
- ارث بری از کلاس TestCase و ساخت و اجرای یک تست ساده
- پیاده سازی متد setUp در کلاس تست - این متد به ازای هر متد در کلاس تست یکبار اجرا میشه
- پیاده سازی کلاس متد ع setUpTestData این متد یک بار به ازای هر کلاس تست اجرا میشه
- نصب پکیج model-bakery برای ساخت fixture برای ایجاد رکورد اتوماتیکه فیک جهت تست
👍2
شاید همگی با این جمله ی خفن و معروف آشنا باشیم .

"premature optimization is the root of All evil"

بنظر شما رانندگی با ماشین فرمول یک تو خیابون های شهر کار عاقلانه ایه؟
خب مشخصه ، نه .
پس یادمون باشه قبل هر تصمیمی برای ارتقای یک پروژه یه شاخص مهم رو در نظر بگیریم ، این شاخص چیزی نیست جز نیاز مشتری ، باید این نیاز رو پیدا کنیم .
یه سوال
از کجا بفهمیم که نیاز به improvement هست یا نه و یا ساده تر بگم چطور تشخیص بدیم که نیاز داریم ارتقا بدیم یا نه ؟ اینحاست که performance testing مطرح میشه.
بنظر من performance testing ارزش یک برنامه نویس رو نشون میده ، تنها راه مقابله با کمالگرایی بیهوده ، سدیه به نام performance testing.
ما به عنوان یک برنامه نویس قراره ارزشمون رو با پاسخ به یک نیاز نشون بدیم ، نه آب در هاون کوبیدن .
سوال بعدی، خب چطور performance testing انجام بدیم ؟
یکی از روش ها تو پروژه های جنگویی استفاده از locust هست با اینکار میتونین بفهمین که پروژتون چند مرده حلاجه و به بیانی دیگر نیاز به improvement رو تشخیص بدین .

پس یادمون نره کنار هر مهارت خفنی که یاد میگیریم در نظر بگیریم که مدیریت زمانی میکنیم و ارزش اون کار دیده میشه یا نه.

کمالگرایی آفتیه که تو باغ هر برنامه نویسی میوفته ، با locuat آفتکشی کنید .

بازم از لینکدین Erfan Aliaghdam
لینک:
https://www.linkedin.com/posts/erfan-aliaghdam-20a439204_performanceabrtesting-testing-django-activity-6955392499020349440-ktMP?utm_source=linkedin_share&utm_medium=member_desktop_web
👍3
«تا حالا شنیدید که میگن پایتون برای فلان پروژه خوب نیست چون نمیتونه به اندازه کافی سریع باشه؟ من شنیدم. و این جمله کمی ناامید کننده‌س چون که بانک‌های بزرگ، یوتوب، اینستاگرام، و خییلی جاهای دیگه که نسبت به performance حساس هستن هنوز هم میان پایتون رو انتخاب میکنن و از این قضیه راضی هم هستن.»

چرایی این استفاده گسترده از پایتون و چرا پایتون حتی برای جاهایی که performance بالا خیلی ضروری عه مثل بانک‌های بزرگ یوتوب و اینستاگرام، انتخاب خیلی خوبیه رو اینجا بخونید:
https://b2n.ir/k38624
تشکر از @pyeafp
👍8👎1
🧨 شناخت و پیشگیری از یکی از رخنه (Exploit) های متداول وب اپ‌ها: XSS


📃 به عنوان توسعه‌دهنده وب بهتره سعی کنیم تا کدی که توسعه میدیم تا حدامکان #Secure (امن) باشه و در مقابل رخنه‌ها و حملات ساده و متداول آسیب پذیر (#vulnerable) نباشه (و شانس رخنه رو کم کنیم).

استفاده موفق از آسیب پذیری Cross-site-scripting یا XSS باعث میشه اپ شما کد های مخرب یا ناخواسته #Javascript رو برای دیگر کاربران نمایش بده و اجرا کنه.

🎃 کد جاوا اسکریپ مخرب میتونه:
اطلاعات کاربران رو بدزده (یا زمینه‌ساز حملات پیچیده‌تری بشه)
فعالیت هایی رو انجام بده که ناخواسته اند و مورد تایید یا نیاز کاربر نیستند.

یکی از مفروضات این مشکل امنیتی اینه که محتوایی که وب سایت یا اپ ما تولید میکنه "قابل اعتماد” است. پس برای پیشگیری اش منطقیه که هرچیزی که ممکنه این "اعتماد" رو خراب کنه مدنظر بگیریم.

⬅️ به صورت خیلی خلاصه،‌ اگر کد شما هر محتوا یا ورودی که از سمت کاربر بیاد رو بدون "تمیز کردن” و بررسی صحت (#Validation) ذخیره کنه یا نمایش بده،‌ این رخنه میتونه براش اتفاق بیفته.

⚔️ به عنوان اولین لایه پیشگیری، در وب فریمورک #Django ، فرض براینه که هرچه که در context برای رندر شدن در اختیارش میگذارید، "ناامن” است و با کمک متد html.escape() همه کاراکتر های html را به معادلشون تبدیل میکنه.
مثلا:
<img src="https://lnkd.in/eE-enrjb"/>
به
&lt;img src=&quot;https://lnkd.in/eUCsnhnx;
تبدیل میشه.

🌪 اما متاسفانه این کافی نیست:
1- این پیشفرض فقط شامل Django template engine میشود، مثلا اگر Angular یا React یا Vue استفاده میکنید،‌ احتمالا شامل این موضوع نیستید.

2- افزونه یا اپ های شخص ثالثی که استفاده میکنیم ممکنه شامل این آسیب پذیری باشند.

3- اگر از ()mark_safe یا همون "Safe string" ها در متدها و #template ها استفاده میکنید،‌ دیگه خروجی شما شامل این تبدیل نمیشه. (پیشنهاد میکنم تاجایی که میتونید از این متدها استفاده نکنید.)

4- بعضی از attr ها یا روش استفاده ما از متغیرها در template، ممکنه شامل این پیشفرض نشوند یا دورش بزنند،
مثلا:
<img src={{ profile_photo_url }}>
میتونه با سواستفاده تبدیل شه به
<”img src=”/img/home-bg.jpg onload=alert(1)>

5- کاراکتر backtick و همینطور دیتایی که با base64 انکود بشه escape نمیشود، در واقع محتوایی که کاراکترهای quote یا html نداشته باشه چیزی برای escape شدن نداره،‌ مثلا:
<script>spinner.minimum = {{ minimum_price }} ;</script>
میتونه تبدیل شه به:
<script>spinner.minimum = 0; alert(1) ;</script>

سعی میکنم در پست دیگه ای، با جزئیات بیشتری روش‌ها و راههایی که میتونیم تا حد ممکن از XSS در اپ Django مان پیشگیری (#mitigate ) کنیم رو جمع آوری کنم و بنویسم.

لینک مقاله اصلی که ازش الهام گرفتم:
https://lnkd.in/erpqQREc

از لینکدین Alireza Amouzadeh
تشکر از @alireza_amouzadeh

لینک:
https://www.linkedin.com/posts/alireza-amouzadeh_xss-exploitation-in-django-applications-activity-6948679390654291968-6_IX?utm_source=linkedin_share&utm_medium=member_desktop_web
👍8👎1
✔️ «همه‌چیز در پایتون آبجکت است»

همه این رو یبار هم که شده شنیدیم!

ولی این عبارت در CPython و زبانی مثل C که مثل مثلا پایتون شئ‌گرایی و ارث‌بری به اون صورت نداره، چطور پیاده‌سازی شده؟
اصطلاحی مثل Duck typing در سطح کدهای C در CPython چطور اتفاق میوفته؟
در پایه‌ای ترین حالت آبجکت‌های پایتون، چه چیز‌های مشترکی دارن؟
تایپ float و تایپ dict چجوری نوشته شدن با C؟
چه تایپ‌هایی در CPython نشانی از داشتن len دارند؟
تابع len چگونه کار میکنه؟
تابع len چرا چنین، کار میکنه؟
پیچیدگی زمانی تابع len چگونه‌ است؟
تایپ list در CPython چطور نوشته شده است؟

روز یکشبه
ساعت ۷ عصر
اینجا 👈 @SEYED_BAX
🔥4👍2👎1🤯1
سلام به همه
دوستانی که تازه شروع کردید به برنامه نویسی و میخواهید برای استخدام شدن به شرکت ها رزومه بدید.
من میتونم رزومه دات نتی پارسالم رو براتون بفرستم که ازش ایده بگیرید.
این رزومه رو هر جا فرستادم دعوت به مصاحبه شدم 😂
رزومه پایتونی ندارم. چون هنوز در حال یادگیری اش هستم و به کسی که در حال یادگیری هست پول خوب نمیدن
لطفا خصوصی به @miladhzz پیام بدید
👍2👎1
سلام به همه
🤓 لطفا هر گروه یا کانال جنگو می شناسید آدرسش رو برای من بفرستید.
حتی اگه تعداد اعضاش خیلی کم باشه
متشکرم
@miladhzz
👎1
چرا از شی گرایی استفاده کنیم؟
بعد از خوندن این چند خط اگه ایده ای دارید برام کامنت کنید لطفا ❤️
دارم یه دوره برنامه نویسی از پایه می سازم برای مبتدی ها. به فانکشن رسیدم و توی قسمت ۲۲ قراره شی گرایی (مقدماتی) رو شروع کنم.
یادمه سال 85 اولین بار داشتم شی گرایی رو توی سی++ میخوندم. اما حداقل 10 سال طول کشید یکم متوجه بشم داستان چیه 🥸
چرا؟
چون همه آموزش ها شروع میکنن که کلاس تایپ جدید است مثل String که خودمان میسازیم. متد دارد . اشیا را در نظر بگیرید. چند ریختی و وراثت این است کپسوله سازی و... اون سالها واقعا نمیتونستم دلیلش رو متوجه بشم. شاید هنوز هم متوجه نشدم!!!
✔️ حالا اگه بخواهیم به یه نفر توضیح بدیم که چرا از شی گرایی استفاده کنیم باید چطور شروع کنیم؟
توی اینترنت تقریبا همه برنامه نویسی ساخت یافته رو با شی گرا مقایسه کردن. اما این جواب نیست.
خب اولین سوالش قاعدتا اینه که با ساخت یافته که خیلی راحت ترم. چرا شی گرایی؟
این فعلا بهترین جوابی هست که تونستم پیدا کنم:
https://qr.ae/pv57pO
👍1👎1
جنگو 4.1 منتشر شد. این سه تا فیچر از همه مهمترن. خصوصا async در class-based views
البته من تا LTS اش نیاد از آخرین LTS استفاده میکنم.
👍1👎1🔥1