جنگولرن
3.82K subscribers
287 photos
74 videos
31 files
556 links
آموزش Django و بستگان
Download Telegram
Forwarded from Python for Data Science
🎯یه مقایسه روی این دوتا روش داشته باشیم
پست ریپلای و این پست

🔺به طور کلی استفاده از تابع فیلتر به همراه lambda می‌تونه سرعت رو بیاره پایین

اما اینجا خبری از lambda نیست پس نتیجه هم احتمالا کند نیست

یه بررسی اجمالی داشتم روی حالت‌های مختلف:
حالتی که خودم توی کانال گذاشتم هم سریع هست هم تمیز اما حالتی که دوستمون نوشتن برای مواردی که رشته طولانی و تعداد splitها زیاد بشه می‌تونه کمی(شاید حدود کمتر از ۲-۳ درصد) سریعتر باشه

🔺 توجه کنید که این یه حالت خاص هست و خود پایتون هم توصیه می‌کنه که اگر نیاز به لیست هست بهتره از list comprehension (روش اول) استفاده بشه

❗️به طور کلی بهتره اگر نیاز به لیست ندارید کد رو طوری بنویسید که با جنریتور(خروجی مستقیم filter,map,...) کار کنه؛ اینطوری حالت ایده‌آل هست!

🔎 @py4ds
👍4
یه مطلب جالب از کانال @py4ds
‼️یکی از قابلیت‌های پایتون این هست که شما میتونید کدهایی با سورس بسته تولید کنید اصطلاحا به این مدل کدها کدهای آبفاسکیت یا مبهم شده میگن

❗️کدی که آبفاسکیت میشه می‌تونه بعد از یک مدت زمان خاص اکسایر بشه و دیگه اجرا نشه یا مثلا فقط از طریق یک ماژول خاص(استارتر) اجرا بشه و ماژول‌های دیگه‌ی اون به تنهایی اجرا نشن

چرا کد نیاز به کد آبفاسکیت داریم؟ دلایل زیادی ممکنه وجود داشته باشه از جمله توسعه دانشهایی که برای یک شرکت درآمدزایی داره و با عمومی شدنش ممکنه به درآمد شرکت ضربه زیادی وارد بشه. دلیل دیگه اینه که ممکنه ویرایش یک کد باعث اختلال توی الگوریتم از پیش تعیین شده بشه پس برای اینکه از تغییرات جلوگیری بشه اونو آبفاسکیت میکنن

در اینکه آیا این کار مفید هست یا نه میشه بحث کرد. شاید یه جایی واقعا آبفاسکیت کردن ضررش بیشتر از سودش باشه!

اما در مورد پروژه
من قبلا با کدهایی کار میکردم که آبفاسکیت بودن و مبهم شدنشون باعث میشد نشه به متدها و خواص داخلی اشیایی که کدشون آبفاسکیت شده دسترسی داشت
در کل برای کسی که داره از یک کد آبفاسکیت شده استفاده می‌کنه هیچ چیزی عذاب آور تر از این نیست که بعد از دات چیزی رو نبینه🤯


این پروژه دقیقا چیه؟
یک قالب هست برای کدهایی که قراره آبفاسکیت بشن و در اختیار دیگران قرار بگیرن🫤

چطوری کار می‌کنه؟
شما باید کدتون رو در قالب یک پکیج پایتونی آماده کنید! یکی از مهمترین بخش‌های این کار هم نوشتن فایل setup.py هست😮

👈کد خودتون رو میتونید توی یه پوشه مشابه چیزی که می‌بینید template/src_pkg بذارید

🫵یادتون باشه که یه پروژه خوب پروژه‌ای هست که بشه متدها و توابع داخلی‌اش رو هم دید پس بهتره که یه پوشه مثل template/stub_pkg هم داشته باشید و توی اون هم یه فایل setup.py برای پکیج stub بذارید

پکیج stub چیه؟
توصیه میکنم برای درک بهتر pep561 رو بخونید.
خلاصه: این یک پکیج شامل فایل‌هایی مشابه با ساختار پروژه هست که هیچ کد قابل اجرایی توش نیست و صرفا یک سری فایل با پسوند .pyi توش هست که نام تمام ساختارهایی مثل توابع و کلاس‌ها و همچنین نام و نوع پارامترهای ورودی و نوع خروجی اونها با استفاده از type hinting تعریف شده!
تمام ‌LSP(Language Server Protocol) ها ابتدا دنبال فایل‌های .pyi میگردن و ساختار پروژه رو از روی اون به کاربر نشون میدن؛ اگر چنین فایلی وجود نداشت میرن سراغ فایل .py
🫴پس اینجا یه امکان خوب داریم تا ساختار پروژه رو(بدون کدهای داخلی) توش نشون بدیم!

من بلد نیستم فایل .pyi رو بنویسم چیکار کنم؟
پکیج mypy توسط بزرگان پایتون از جمله خود آقای روسوم در حال توسعه هست این پکیج ابزاری(stubgen) داره که میتونید باهاش این فایل‌ها رو ایجاد کنید🤗

تهش رو بگو خسته شدیم!
هیچی دیگه این پروژه ۲ تا پکیج whl براتون میسازه یکی پکیج اصلی شما به صورت آبفاسکیت هست و دیگری هم پکیج stub که هر دو رو میشه با pip نصب کرد
🤌خوبیش اینه که حداقل کد آبفاسکیت رو میشه ورژن زد و روی مخزن‌های pipطور، نگهداری کرد و اینکه تغییرات ساختاری اون رو هم با پکیج stub دید!

پکیج pyarmor می‌تونه کدهای جنگو رو هم آبفاسکیت کنه
خیلی جالب هست
در نهایت یک پروژه جنگویی دارید که فقط میشه اجراش کرد و قابلیت تغییر نداره
🔎 @py4ds
🔥10👍8🤣21👎1
یه تیکه از کتاب
Django for APIs
کلا میگه به پکیج ها با دید منفی نگاه نکنید. لازم نیست چرخ رو دوباره اختراع کنیم.
👍19
یه نکته دیگه از کتاب
Django for APIs
احتمالا همه اینو میدونن
وقتی از get_user_model استفاده می کنیم. مطمئنیم که حتی اگه User هم کاستوم شده باشه، به مدل درست اشاره کردیم.
👍18
Forwarded from رقصنده با کد (Ali KhodaieeDoost)
با احترام به همه برنامه نویسان بک‌اند ، لطفا هرزگاهی استانداردهای سرویس‌های Rest رو مرور کنید. چیزی از ارزشهاتون کم نمیکنه.
این دو نمونه سرویس هست که استانداردهای حداقلی ، داخلش رعایت شده :
https://developer.atlassian.com/cloud/trello/rest/
https://www.postman.com/brooks81/workspace/rest-api-testing/request/21662525-93d0542b-e130-45b9-8cdc-6bcd746475e8
هیچ استانداردی الکی بوجود نیومده.
👍10
Forwarded from Sadra Codes
با این وضع نت، چجوری به PyPI دسترسی داشته باشیم؟!

یه سری از بچه ها، عجیب به مشکل خوردن سر دانلود کردن از pypi. حقیقتش میخواستم ببینم اگه واقعا موضوع حاده، یه تریک بزنم سر PythonAnyWhere و بعنوان یه واسط بین ایران و pypi ازش استفاده کنیم حتی با قابلیت کش کردن پکیج ها و بهتون دسترسی بدم به راحتی دانلود کنید ولی خب مثل اینکه زیاد موضوع مهمی نیس.

با این حال، اگه هنوز دسترسی واستون مشکله، تقریبا ۷۰ درصد پکیج های pypi دارن روی گیت هاب توسعه پیدا میکنن یعنی رلیزشون اونجا هم هست. شما اگه دسترسی پایداری به گیت هاب داشته باشین میتونین بدون مشکل پکیج هاتون رو از گیت هاب (به جای pypi) دانلود کنید.

بصورت نرمال اینجوری پکیج نصب میکنیم که از pypi میگیره:

$ pip install requests

اما با این حرکت، مستقیم رلیز رو از گیت هاب بگیرید:

$ pip install "git+https://github.com/psf/requests.git"

حتی میتونید یه رلیز خاص یا یه برنچ خاص رو هم دانلود کنید:

$ pip install "git+https://github.com/psf/[email protected]"

درواقع انگار نوشتیم:

$ pip install requests==2.28.1


با این تفاوت که داریم از github.com میگیریم و نه pypi.org. این تریک روی gitlab.com هم فکر میکنم جواب بده.

به امید روزهای بهتر. امیدوارم این پست مشکل شما رو حل کرده باشه. ❤️
👏33👍5
دو مثال تست نویسی در Django rest framework
من در حال یادگیری DRF و تست نویسی اش هستم. شما چطور؟ 🙃
https://medium.com/sulang/testing-django-rest-framework-d98279a5d3a5

https://medium.com/@ksarthak4ever/test-driven-development-tdd-in-django-and-django-rest-framework-drf-a889a8068cb7
👍8
یه مطلب خلاصه و کاربردی در مورد تست نویسی در جنگو - به همراه best-practices
قسمت اول:
https://realpython.com/testing-in-django-part-1-best-practices-and-examples/
قسمت دوم:
https://realpython.com/testing-in-django-part-2-model-mommy-vs-django-testing-fixtures/
👍5
یه مطلب خوب در مورد Fixtures در جنگو
خیلی خلاصه بخوام بگم. با fixtures میتونیم seed data از روی فایل انجام بدیم. کاربردش توی تست بیشتر به چشم میاد

https://dev.to/hussainislam/django-fixtures-seeding-databases-5ai

تشکر از @BobyCloud
👍3
یه مثال ساده استفاده از پکیج های factory_boy و faker در پروژه هایی که با DRF پیاده سازی شدن
پکیج factory_boy به زبان ساده دیتای فیک برای تست هامون مهیا میکنه
✔️ توی داکیومنت factory_boy گفته که اولین نسخه پکیج ما مختص جنگو بوده. اما الان فریمورک های دیگه رو هم ساپورت میکنن
پکیج faker هم توی این کار میتونه بهش کمک کنه. مثلا fake.name() یه اسم به ما تحویل میده و...
https://ruddra.com/tdd-drf-factory-boy-faker/
👍4
چند تا پست خوب در مورد جنگو از سایت hacksoft
این سایت تمرکزش فقط جنگو نیست. اما نویسنده مطالب جنگو اش واقعا کارش درسته
لینک مطالب جنگو این سایت:
https://www.hacksoft.io/category/django
👍9
Forwarded from BG OPC
https://GitHub.com/wsvincent/awesome-django
ریپو بدرد بخور جنگو
هر چیزی تو جنگو می‌خواستین از جمله cms
و کلی پکیج هایی که مث پلاگین ه
عمل می‌کنه
👍9
Forwarded from 🐍 Python & Raspberry 🐍 (DailyProjects)
✔️ شاید با شنیدن کلمه‌ی ORM همه‌‌مون یاد SQLAlchamy یا Django ORM بیوفتیم، باشه اینا خیلی خوبن ولی لایبرری‌های جدیدی که نوشته میشن دارن از تمام language feature‌های نایس عه پایتون ۳ خصوصا 3.6 به بعد (Type Hints, F strings and async/await)
با قدرت استفاده میکنن و زیبایی خلق میکنن.

پیکولو، یکی از همین کتابخونه‌هاست.
نویسنده‌ی پیکولو چون از اوایل روزهای کاریش غرق در دنیای async بوده این ORM رو به صورت async first مینویسه :))
ولی میشه ازش به صورت sync هم استفاده کرد.

✔️ از دیگر ویژگی‌هاش
• A builtin playground, which makes learning a breeze.

• Tab completion support - works great with iPython and VSCode.

• Batteries included - a User model, authentication, migrations, an admin GUI, and more.

• Modern Python - fully type annotated.

• Make your codebase modular and scalable with Piccolo apps (similar to Django apps) 👌


میتونید ازش به عنوان یه کوئری بیلدر استفاده کنید:
# Select:
await Band.select(
Band.name
).where(
Band.popularity > 100
)

یا مثل یه ORM عادی باهاش رفتار کنید:
# To fetch an object from the database, and update it:

b = await Band.objects().get(Band.name == 'Pythonistas')
b.popularity = 10000
await b.save()


✔️ این ORM بهترین عملکرد رو با postgresql داره ولی از sqlite هم پشتیبانی میکنه و همچنین قسمت زیبای ماجرا اینه که از:
Starlette, FastAPI, BlackSheep, Xpresso and Starlite are currently supported.
هم برای ساختن web app های نایس پشتیبانی میکنه :))

🐙 https://github.com/piccolo-orm/piccolo

#m4hdi
#ORM
#library
#async

©raspberry_python

دنبال کردن هشتگ m4hdi
دنبال کردن هشتگ orm
دنبال کردن هشتگ library
دنبال کردن هشتگ async
🔥9👍2
برای همه دوستان چه تازه کار چه حرفه‌ای (که نحوه عملکرد رو نمی‌دونند)

هرچیزی رو 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