جنگولرن
✅ مشکل soft delete برای relation ها اگه این ویدئو رو از کانال @microfrontend_ir دیده باشید. تقریبا همه حالت هارو برای Soft delete هندل کرده. برای اینکه حذف واقعی اتفاق نیافته، متد delete مدل رو override می کنیم و میگیم جای حذف، رکورد رو آپدیت کن و... ولی…
کامنت @Sepehr_e
سلام و درود. من برای این یه راه حلی دیدم از ریپو یکی از دوستان بنظر اومد مربوطه
کاری که کردن اومدن و از models.CASCADE استفاده کردن و یه SOFT_CASCADE نوشتن که همه مدلای مربوطه رو سافت دلیت میکنه
https://github.com/mejomba/django_shop_m89_final/blob/main/core/models_on_delete.py
سلام و درود. من برای این یه راه حلی دیدم از ریپو یکی از دوستان بنظر اومد مربوطه
کاری که کردن اومدن و از models.CASCADE استفاده کردن و یه SOFT_CASCADE نوشتن که همه مدلای مربوطه رو سافت دلیت میکنه
from django.db import connections
from django.utils import timezone
from collections import defaultdict
def SOFT_CASCADE(collector, field, sub_objs, using):
collector.data = defaultdict(set)
collector.collect(
sub_objs,
source=field.remote_field.model,
source_attr=field.name,
nullable=field.null,
fail_on_restricted=False,
)
collector.data = defaultdict(set)
for item in sub_objs:
item.is_deleted = True
item.delete_date = timezone.now()
item.save()
if field.null and not connections[using].features.can_defer_constraint_checks:
collector.add_field_update(field, None, sub_objs)
https://github.com/mejomba/django_shop_m89_final/blob/main/core/models_on_delete.py
👍5❤1
جنگولرن
✅پستی از لینکدین Mohammad Amin Amjadi فعلا فقط تصمیم گرفته. اما از همین تصمیم اش خیلی چیزارو میشه یاد گرفت 🤣 لینک تصمیم گرفتم برای رشد خودم و جامعه جنگو در ایران شروع کنم به اشتراک گذاشتن تجربیات و مطالب مختلف با تمرکز روی توسعه بک اند جنگو برای تیمهای…
django001.pdf
347.3 KB
✅اولین پست از Mohammad Amin Amjadi
لینک
بریم سراغ اشتباهات پروژه جنگو! و اولین پستی که قولش رو داده بودم.
سعی کردم بر اساس کدهای گیتهاب و تجربیاتی که داشتم یکسری اشتباهات و مطالب رو باهاتون در میون بذارم.
فرض کنین که بک اند یک فروشگاه اینترنتی به این شکل پیاده شده.
از اونجایی که زودتر شروع کردن رو به یک شروع بی نقص ترجیح میدم قطعا اشتباهات و ایرادات زیادی بهم وارد هست.
ممنون میشم با دقت مطالعه کنین و هر نظر و سوالی داشتین باهام در میون بذارین.
امیدارم که مفید باشه و حمایت فراموش نشه.
لینک
بریم سراغ اشتباهات پروژه جنگو! و اولین پستی که قولش رو داده بودم.
سعی کردم بر اساس کدهای گیتهاب و تجربیاتی که داشتم یکسری اشتباهات و مطالب رو باهاتون در میون بذارم.
فرض کنین که بک اند یک فروشگاه اینترنتی به این شکل پیاده شده.
از اونجایی که زودتر شروع کردن رو به یک شروع بی نقص ترجیح میدم قطعا اشتباهات و ایرادات زیادی بهم وارد هست.
ممنون میشم با دقت مطالعه کنین و هر نظر و سوالی داشتین باهام در میون بذارین.
امیدارم که مفید باشه و حمایت فراموش نشه.
👍13❤6
✅یه دوره رایگان در مکتب خونه با عنوان تحلیل و طراحی سیستم
توضیحاتش:
یکی از اهداف اصلی تعیین شده برای فارغ التحصیلان رشته مهندسی کامپیوتر، تسلط به مراحل توسعه سیستمهای نرمافزاری بزرگ و پیچیده میباشد. به همین دلیل، دروس طراحی سیستمهای شئگرا، مهندسی نرم افزار 1 (در سرفصل جدید بنام تحلیل و طراحی سیستم)، پایگاه دادهها و مهندسی نرمافزار 2 (در سرفصل جدید بنام مهندسی نرم افزار) و چند درس مرتبط دیگر در این رشته قرار داده شدهاند.
درس تحلیل و طراحی سیستم یا همان مهندسی نرم افزار 1 اساسیترین درس برای شروع یادگیری مراحل توسعه سیستمهای نرم افزاری است و مهمترین پیشنیاز آن درس برنامهنویسی شئگرا میباشد.
در این دوره آموزشی، مفاهیم اساسی و اصول اولیه تحلیل و طراحی سیستمهای نرم افزاری با رویکرد شئ گرا و بر مبنای متدولوژی RUP تشرح شده است. در جلسات اول مفاهیم اساسی تحلیل و طراحی سیستمها بیان شده است. در ادامه مراحل توسعه نرمافزارها بر اساس متدولوژی RUP تدریس شده و برای تسلط کامل دانشجو بر مفاهیم طراحی، ابتدا ابتکارات طراحی شئگرا و در ادامه اصول اساسی SOLID و در نهایت الگوهای طراحی به تفصیل بیان شده است و در نهایت قسمتهایی از مراحل تحلیل و طراحی یک سیستم نمونه آورده شده است.
لینک
توضیحاتش:
یکی از اهداف اصلی تعیین شده برای فارغ التحصیلان رشته مهندسی کامپیوتر، تسلط به مراحل توسعه سیستمهای نرمافزاری بزرگ و پیچیده میباشد. به همین دلیل، دروس طراحی سیستمهای شئگرا، مهندسی نرم افزار 1 (در سرفصل جدید بنام تحلیل و طراحی سیستم)، پایگاه دادهها و مهندسی نرمافزار 2 (در سرفصل جدید بنام مهندسی نرم افزار) و چند درس مرتبط دیگر در این رشته قرار داده شدهاند.
درس تحلیل و طراحی سیستم یا همان مهندسی نرم افزار 1 اساسیترین درس برای شروع یادگیری مراحل توسعه سیستمهای نرم افزاری است و مهمترین پیشنیاز آن درس برنامهنویسی شئگرا میباشد.
در این دوره آموزشی، مفاهیم اساسی و اصول اولیه تحلیل و طراحی سیستمهای نرم افزاری با رویکرد شئ گرا و بر مبنای متدولوژی RUP تشرح شده است. در جلسات اول مفاهیم اساسی تحلیل و طراحی سیستمها بیان شده است. در ادامه مراحل توسعه نرمافزارها بر اساس متدولوژی RUP تدریس شده و برای تسلط کامل دانشجو بر مفاهیم طراحی، ابتدا ابتکارات طراحی شئگرا و در ادامه اصول اساسی SOLID و در نهایت الگوهای طراحی به تفصیل بیان شده است و در نهایت قسمتهایی از مراحل تحلیل و طراحی یک سیستم نمونه آورده شده است.
لینک
👍13
Forwarded from یادگیری ماشین با چاشنی صنعت (Abolfazl 🤘)
معرفی چند دورهی جامع با لود بالا خاص کسانی که میخواهند در زمینه مهندسی نرم افزار به شکل حرفه ای چه در صنعت و چه به شکل پژوهشی کار کنند:
۱. متدولوژیهای ایجاد نرم افزار :
https://ocw.sharif.edu/course/id/336
۲. الگوها در مهندسی نرم افزار :
https://ocw.sharif.edu/course/id/443
۳. طراحی شی گرای سیستم ها :
https://ocw.sharif.edu/course/id/38
۴. ایجاد چابک نرم افزار:
https://ocw.sharif.edu/course/id/448
پ ن: این دوره ها رو با حواس جمع ببینید و از نکات بسیار خوبی که گفته میشه نهایت استفاده رو ببرید.
۱. متدولوژیهای ایجاد نرم افزار :
https://ocw.sharif.edu/course/id/336
۲. الگوها در مهندسی نرم افزار :
https://ocw.sharif.edu/course/id/443
۳. طراحی شی گرای سیستم ها :
https://ocw.sharif.edu/course/id/38
۴. ایجاد چابک نرم افزار:
https://ocw.sharif.edu/course/id/448
پ ن: این دوره ها رو با حواس جمع ببینید و از نکات بسیار خوبی که گفته میشه نهایت استفاده رو ببرید.
👍20👎4
✅آموزش پیاده سازی جنگو در پلتفرم های مختلف لیارا، هم روش و وی پی اس
از علی بیگدلی
در این وبینار تلاش بر این است تا مدل های مختلف پیاده سازی را به دوستان ارائه کنیم تا بتوانند بدون ترس و با خطا های کمتر گزینه های مناسب را برای پیاده سازی انتخاب کنند. از جمله مواردی که در این وبینار بررسی خواهد شد نحوه تبدیل و تغییر layout یک پروژه برای پیاده سازی در هر متد است و در ادامه به ویژگی هایی اشاره خواهد که به شما در تصمیم گیری انتخاب خواهد کرد.
همچنین در هر مورد می توانید هزینه ها و کیفیت سرویس را بررسی کنین از جمله ، پیاده سازی ها با CICD و همچنین بکاپ گیری های مداوم.
لینک آپارات:
https://www.aparat.com/v/lRu59
لینک سایت علی بیگدلی:
لینک
از علی بیگدلی
در این وبینار تلاش بر این است تا مدل های مختلف پیاده سازی را به دوستان ارائه کنیم تا بتوانند بدون ترس و با خطا های کمتر گزینه های مناسب را برای پیاده سازی انتخاب کنند. از جمله مواردی که در این وبینار بررسی خواهد شد نحوه تبدیل و تغییر layout یک پروژه برای پیاده سازی در هر متد است و در ادامه به ویژگی هایی اشاره خواهد که به شما در تصمیم گیری انتخاب خواهد کرد.
همچنین در هر مورد می توانید هزینه ها و کیفیت سرویس را بررسی کنین از جمله ، پیاده سازی ها با CICD و همچنین بکاپ گیری های مداوم.
لینک آپارات:
https://www.aparat.com/v/lRu59
لینک سایت علی بیگدلی:
لینک
👍11
جنگولرن
سری مهندسی نرمافزار: پست 6 از لینکدین Saeed Shahrivari Joghan زوج طلایی طراحی: سادگی + تفکیک دغدغهها اگه پست ۵ رو خونده باشید به اینجا رسیدیم که برای طراحی و تولید یه نرمافزار (باز هم تاکید میکنم دامنه نرمافزار شامل کد، داده و مستنداته🙂) که قابلیت تغییر،…
✅سری مهندسی نرمافزار: پست 7
از لینکدین Saeed Shahrivari Joghan
توسعه چابک نرمافزار: سرعت یا انطباق؟
حوالی سال ۲۰۰۱ میلادی تعدادی از افراد شناخته شده حوزه نرمافزار طی بیانیهای اعلام کردند که به راههای بهتری برای توسعه نرمافزار نسبت به دهه ۹۰ میلادی رسیدند و عنوان این بیانیه رو گذاشتند «توسعه نرمافزار به صورت چابک». بر خلاف روشهای کلاسیک اجایل ارزشهای جدیدی رو تاکید میکرد:
۱- ارزش بیشتر افراد و تعاملات نسبت به فرآیندها و ابزار
۲- ارزش بیشتر نرمافزاری که کار میکنه نسبت به مستندات مفصل
۳- ارزش بیشتر تعامل با مشتری نسبت به مذاکره قرارداد
۴- ارزش بیشتر پاسخ به تغییر نسبت به پایبندی به برنامه قبلی
زیر بیانیه هم یه نکته نوشته شده که معمولاً کسی نمیخونه: «آيتمهای آخری بیارزش نیستند بلکه آیتمهای اولی ارزش بیشتری دارند.»
من همیشه اعتقاد داشتم که اجایل بودن به معنی سریع بودن نیست بلکه ذات فلسفه اجایل «پاسخ و واکنش مناسب به تغییراته». به قول فرنگیا که میگن embracing change یعنی فراتر از پذیرش تغییرات اونها رو در آغوش بکشیم. سوال مهم اینه که «چرا باید انقدر در مقابل تغییرات منعطف باشیم؟» من در پاسخش دو تا نکته دارم:
۱- در فرآیند تولید نرمافزار مخصوصا شناسایی دقیق نیازمندی کاربر ما درگیر یه پروسه غیر قطعی، تکاملی و اکتشافی هستیم. یعنی ما به مرور متوجه نیازمندی دقیق کاربر میشیم و خیلی مواقع این نیازمندیها تغییر میکنند پس ما باید به جای جنگیدن با تغییر اونها رو کامل بپذیریم. یکی از راهکار اصلی چابکی برای هضم تغییرات فرآیند تکرارشونده و افزایشی هست.
۲- از دید من چابکی و هضم تغییرات در راستای بقای کسبوکار تعریف میشه. یعنی مثل روال طبیعت اگه با تغییرات بیشتر خودت رو وفق بدی، بیشتر بقا پیدا میکنی. در واقع مثال خوب برای چابکی یوزپلنگ نیست که با اینکه خیلی سریعه ولی همه جا در حال انقراضه بلکه مثال خوب میتونه حضرت کروکدیل باشه که دهها میلیون سال روی زمین بقا داشته. پس معمولاً شرکتی که چابکتر باشه به تغییرات واکنش بهتری نشون میده و در بازار بقای بیشتری پیدا میکنه.
در زمینه چابکی حرف زیاده ولی تو این پست بیشتر از این اطاله کلام نمیکنم و در پستهای بعدی بیشتر توضیح میدم. برای یادآوری هم که شده بد نیست نگاهی مجدد به بیانیه چابکی بندازیم:
https://agilemanifesto.org/
از لینکدین Saeed Shahrivari Joghan
توسعه چابک نرمافزار: سرعت یا انطباق؟
حوالی سال ۲۰۰۱ میلادی تعدادی از افراد شناخته شده حوزه نرمافزار طی بیانیهای اعلام کردند که به راههای بهتری برای توسعه نرمافزار نسبت به دهه ۹۰ میلادی رسیدند و عنوان این بیانیه رو گذاشتند «توسعه نرمافزار به صورت چابک». بر خلاف روشهای کلاسیک اجایل ارزشهای جدیدی رو تاکید میکرد:
۱- ارزش بیشتر افراد و تعاملات نسبت به فرآیندها و ابزار
۲- ارزش بیشتر نرمافزاری که کار میکنه نسبت به مستندات مفصل
۳- ارزش بیشتر تعامل با مشتری نسبت به مذاکره قرارداد
۴- ارزش بیشتر پاسخ به تغییر نسبت به پایبندی به برنامه قبلی
زیر بیانیه هم یه نکته نوشته شده که معمولاً کسی نمیخونه: «آيتمهای آخری بیارزش نیستند بلکه آیتمهای اولی ارزش بیشتری دارند.»
من همیشه اعتقاد داشتم که اجایل بودن به معنی سریع بودن نیست بلکه ذات فلسفه اجایل «پاسخ و واکنش مناسب به تغییراته». به قول فرنگیا که میگن embracing change یعنی فراتر از پذیرش تغییرات اونها رو در آغوش بکشیم. سوال مهم اینه که «چرا باید انقدر در مقابل تغییرات منعطف باشیم؟» من در پاسخش دو تا نکته دارم:
۱- در فرآیند تولید نرمافزار مخصوصا شناسایی دقیق نیازمندی کاربر ما درگیر یه پروسه غیر قطعی، تکاملی و اکتشافی هستیم. یعنی ما به مرور متوجه نیازمندی دقیق کاربر میشیم و خیلی مواقع این نیازمندیها تغییر میکنند پس ما باید به جای جنگیدن با تغییر اونها رو کامل بپذیریم. یکی از راهکار اصلی چابکی برای هضم تغییرات فرآیند تکرارشونده و افزایشی هست.
۲- از دید من چابکی و هضم تغییرات در راستای بقای کسبوکار تعریف میشه. یعنی مثل روال طبیعت اگه با تغییرات بیشتر خودت رو وفق بدی، بیشتر بقا پیدا میکنی. در واقع مثال خوب برای چابکی یوزپلنگ نیست که با اینکه خیلی سریعه ولی همه جا در حال انقراضه بلکه مثال خوب میتونه حضرت کروکدیل باشه که دهها میلیون سال روی زمین بقا داشته. پس معمولاً شرکتی که چابکتر باشه به تغییرات واکنش بهتری نشون میده و در بازار بقای بیشتری پیدا میکنه.
در زمینه چابکی حرف زیاده ولی تو این پست بیشتر از این اطاله کلام نمیکنم و در پستهای بعدی بیشتر توضیح میدم. برای یادآوری هم که شده بد نیست نگاهی مجدد به بیانیه چابکی بندازیم:
https://agilemanifesto.org/
✅اگه میخواهید توی جنگو از Preprocessor ع SASS استفاده کنید.
تا بهتر بتونید کدهای css پروژه تون مدیریت کنید.
میتونید از پکیج django-sass-processor استفاده کنید.
توی فروشگاه اوپن سورس Django-SHOP از این پکیج هم استفاده شده.
لینک:
https://pypi.org/project/django-sass-processor/
❔نمیدونید SASS چیه؟ این لینک یکم در موردش گفته و چندتا مثال هم داره
تا بهتر بتونید کدهای css پروژه تون مدیریت کنید.
میتونید از پکیج django-sass-processor استفاده کنید.
توی فروشگاه اوپن سورس Django-SHOP از این پکیج هم استفاده شده.
لینک:
https://pypi.org/project/django-sass-processor/
❔نمیدونید SASS چیه؟ این لینک یکم در موردش گفته و چندتا مثال هم داره
❤3🔥1
Forwarded from CodeCrafters (Behzad Azadi)
پروفایل کردن چیست؟؟؟
در طی طراحی یک برنامه همیشه این سوال برامون پیش میاد که کد و کوئری ما بهینه هست یا نه ،چقدر منابع مصرف میکنه(حافظه ، cpu ، i/o و ...) ،از لحاظ تایمینگ چطور ، و یا حتی تعداد کوئریهامون و ...
به این موضوع شکل گرفته در ذهن ما در دنیای مهندسی نرم افزار پروفایلینگ میگن
پروفایلینگ در توسعه نرم افزار به فرآیند تجزیه و تحلیل رفتاری زمان اجرای یک سیستم یا برنامه میگیم ،تا ازین طریق بتوان نقاط ضعف و مورد دار سیستم رو پیدا کنیم و در جهت بهبود اون اقدام به بازنویسی موارد مدنظرمون کنیم
انواع مختلف پروفایلینگ به دسته بندی های زیر تقسیم میشه
خب بیاید django-silk رو پیکربندی و نصب کنیم
نصب
این پکیج امکانات بیشتری به شما میدهد که با خوندن صفحه گیتهاب اون میتونید بیشتر باهاش آشنا بشید
@code_crafters
در طی طراحی یک برنامه همیشه این سوال برامون پیش میاد که کد و کوئری ما بهینه هست یا نه ،چقدر منابع مصرف میکنه(حافظه ، cpu ، i/o و ...) ،از لحاظ تایمینگ چطور ، و یا حتی تعداد کوئریهامون و ...
به این موضوع شکل گرفته در ذهن ما در دنیای مهندسی نرم افزار پروفایلینگ میگن
پروفایلینگ در توسعه نرم افزار به فرآیند تجزیه و تحلیل رفتاری زمان اجرای یک سیستم یا برنامه میگیم ،تا ازین طریق بتوان نقاط ضعف و مورد دار سیستم رو پیدا کنیم و در جهت بهبود اون اقدام به بازنویسی موارد مدنظرمون کنیم
انواع مختلف پروفایلینگ به دسته بندی های زیر تقسیم میشه
۱-پروفایلینگ زمان:نکته قابل توجه:
مقدار زمان صرف شده بخشهای مختلف کد رو اندازه گیری میکنیم
۲-پروفایلینگ حافظه:
تحلیل نحوه استفاده از حافظه توسط یک برنامه (مدیریت ناکارآمد، مصرف غیر ضروری و ...)
۳-پروفایلینگ cpu:
نحوه استفاده از پردازنده، شناسایی عملیاتهای محدود به cpu و نقاطی که بهینه سازی شود
۴-پروفایلینگ i/o:
دسترسی به فایلها یا کوئریهای دیتابیس،شناسایی نقاط محدود کننده و بهبود آن
۵-پروفایلینگ پوششی کد:
کدام بخش کد در طول یک جریان ،اجرا شدند کمک به تست و شناسایی کدام بخش کد اجرا نشده است
۶-پروفایلینگ فراخوانی تابع:
ردیابی فراوانی و مدت زمان فراخوانی تابع، درک سلسله مراتب فراخوانی و شناسایی توابع با تاثیر بالا
پروفایلینگ نباید در دسترس غیر توسعه دهندگان قرار گیرد ،این رویکرد و ابزارهای آن تنها مورد استفاده تیم توسعه جهت شناسایی ضعف سیستم و کدها در جهت بهبود آن می باشد نه بیشتردر فریمورک جنگو هم دو پکیج محبوب وجود دارد django-debug-toolbar و django-silk می باشد
خب بیاید django-silk رو پیکربندی و نصب کنیم
نصب
pip install django-silkتنظیمات در settings.py
INSTALLED_APPS = [در urls اصلی پروژه
...
'silk'
]
MIDDLEWARE = [
...
'silk.middleware.SilkyMiddleware',
]
from django.contrib import adminدر نهایت
from django.urls import path, include
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
]
if settings.DEBUG:
urlpatterns += [path('silk/', include('silk.urls', namespace='silk'))]
python manage.py makemigrationsحالا کافیه به مرورگر خود برید یکم داخل اپلیکیشن بگردید ویوهای مختلف رو ببینید و قسمتهای مختلف برنامه رو بالا پایین کنید و در نهایت به آدرس
python manage.py migrate
python manage.py collectstatic
python manage.py runserver
http://localhost:8000/silkمیتوانید خروجی پروفایلینگ کارهای مختلف و رفتارها رو ببینید
این پکیج امکانات بیشتری به شما میدهد که با خوندن صفحه گیتهاب اون میتونید بیشتر باهاش آشنا بشید
@code_crafters
👍15
Forwarded from محمد خشنوا / برنامه نویسی (Reza Amin)
#django
#python
Django Lifecycle
این پکیج چیه کاربردش چیه؟
تفاوت اصلی میان Django Lifecycle و سیگنالها (Signals) در Django این است که Django Lifecycle یک رویکرد ساختارمندتر و اصولیتر را برای مدیریت چرخه عمر اجزا فراهم میکند. با استفاده از Django Lifecycle، شما میتوانید کدهای مربوط به هر مرحله از چرخه عمر را به صورت مستقیم در کلاسهای مدل یا دیگر اجزا تعریف کنید و این اجزا را به یک مدل متصل کنید. این اجازه را به شما میدهد که کدهای مربوط به هر مرحله را در یک مکان مرتبط و خوانا نگه دارید و از تفکیک بخشها بهرهمند شوید.
مثالی از این بخش:
به عنوان مثال، فرض کنید که میخواهید هر زمان که یک مدل از نوع Post ایجاد یا بهروزرسانی میشود، یک عملیات خاصی انجام دهید. با استفاده از Django Lifecycle، میتوانید این عملیات را به صورت مستقیم در مدل Post تعریف کنید، به عنوان مثال:
در این مثال، یک مدل به نام Post تعریف شده است که از کلاس LifecycleModel ارثبری کرده است. با استفاده از دکوراتور hook، یک عملیات update_history برای مدل تعریف شده است. این عملیات هر زمان که محتوای یک نمونه از مدل تغییر میکند، یک رکورد جدید به جدول History اضافه میکند که تاریخچه تغییرات محتوا را ثبت میکند.
اطلاعات بیشتر راجبش:
https://github.com/rsinger86/django-lifecycle
@SEYED_BAX
#python
Django Lifecycle
این پکیج چیه کاربردش چیه؟
تفاوت اصلی میان Django Lifecycle و سیگنالها (Signals) در Django این است که Django Lifecycle یک رویکرد ساختارمندتر و اصولیتر را برای مدیریت چرخه عمر اجزا فراهم میکند. با استفاده از Django Lifecycle، شما میتوانید کدهای مربوط به هر مرحله از چرخه عمر را به صورت مستقیم در کلاسهای مدل یا دیگر اجزا تعریف کنید و این اجزا را به یک مدل متصل کنید. این اجازه را به شما میدهد که کدهای مربوط به هر مرحله را در یک مکان مرتبط و خوانا نگه دارید و از تفکیک بخشها بهرهمند شوید.
مثالی از این بخش:
به عنوان مثال، فرض کنید که میخواهید هر زمان که یک مدل از نوع Post ایجاد یا بهروزرسانی میشود، یک عملیات خاصی انجام دهید. با استفاده از Django Lifecycle، میتوانید این عملیات را به صورت مستقیم در مدل Post تعریف کنید، به عنوان مثال:
from django.db import models
from django_lifecycle import LifecycleModel, hook
class Post(LifecycleModel):
title = models.CharField(max_length=100)
content = models.TextField()
@hook(BEFORE_UPDATE, when="content", has_changed=True)
def update_history(cls, old_instance, instance, field_name):
History.objects.create(
post=instance,
old_content=old_instance.content,
new_content=instance.content
)
post = Post.objects.create(title="Title", content="Content")
post.content = "Updated Content"
post.save()
در این مثال، یک مدل به نام Post تعریف شده است که از کلاس LifecycleModel ارثبری کرده است. با استفاده از دکوراتور hook، یک عملیات update_history برای مدل تعریف شده است. این عملیات هر زمان که محتوای یک نمونه از مدل تغییر میکند، یک رکورد جدید به جدول History اضافه میکند که تاریخچه تغییرات محتوا را ثبت میکند.
اطلاعات بیشتر راجبش:
https://github.com/rsinger86/django-lifecycle
@SEYED_BAX
👍8❤1👎1
Forwarded from 🧑💻PythonDev🧑💻
✔️ سوال: best practiceها و ابزارات مورد نیاز برای توسعه یه بسته، لایبرری یا نرمافزار پایتونی چیه؟
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
همچنین
1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
اگر عادت دارید کدهای خودتون رو
1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
https://m.youtube.com/watch?v=FxSsnHeWQBY
https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
وبسایت pre commit:
https://pre-commit.com/
ابزارهای زیادی واسه اینکارا وجود داره که بر اساس تجربه و چیزی که از 80 درصد پروژه های معروف و بزرگ دیدم، سعی میکنم بهتریناش رو معرفی کنم:
Dependency Management System
برای مدیریت وابستگی های یک پروژه بزرگ (یا نسبتا بزرگ)، پیشنهاد میکنم از
Poetry
استفاده کنید، چون ابزار بسیار قدرتمندی هست، کار باهاش بسیار راحته (خیلی شبیه به Cargo
در زبان Rust
هست)، کامیونیتی بزرگی داره، به راحتی محیط dev
و prod
رو میتونید مدیریت کنید، مستندات بسیار خوب و روانی داره، در سریع ترین زمان ممکن میتونید پروژه رو در PyPI
منتشر کنید و همچنین پروژههای معروفی از جمله Rich (کتابخونهای که خود pip
هم ازش برای رنگی کردن progress bar
ها استفاده میکنه) از اون استفاده میکنن، که همین نشون میده چقدر کاربردی هست.همچنین
build
و run
هم توسط Poetry
انجام میشه-
منابع آموزشی:1. آشنایی و شروع به کار با Poetry
https://realpython.com/dependency-management-python-poetry/
2. جزیات عمیق درباره هر قابلیت و نحوه استفاده
https://python-poetry.org/docs
3. نحوه انتشار یک package پایتونی در PyPI به کمک Poetry
https://johnfraney.ca/blog/create-publish-python-package-poetry/
Linting & Type Checking
برای
Linting
ابزارهای flake8
و pylint
از معروف ترینها هستن، هر یک رو میتونید شدت سخت گیریشون رو تنظیم کنید، به راحتی همراه با Poetry
تنظیماتشون در یک فایل قرار میگیره و نیاز به نگه داشتن فایلهای متفاوت برای هر کدوم ندارید. به نظرم خود flake8
به تنهایی نیازتون رو برطرف میکنه. اگر از PyCharm
استفاده کنید یک Linter
به صورت Built-in
در اختیارتون میذاره که خوبه و کارتون رو راه میندازه.اگر عادت دارید کدهای خودتون رو
Annotate
کنید و زیاد از Type Hint
ها استفاده میکنید، استفاده از MyPy
به عنوان یک static type checker
به شما کمک میکنه ایرادات موجود در کلاس ها، توابع و ... رو پیدا کنید و بتونید type
های دقیق تری استفاده کنید. همچنین ابزار Pyright
که توسط مایکروسافت توسعه داده میشه، در VSCode
به صورت integrated
با افزونه Pylance
کار میکنه و اگر از VSCode
استفاده میکنید پیشنهاد میکنم حتما افزونه Pylance
رو نصب کنید. PyCharm
هم یک Type Checker
داره ولی هنوز توانمندی Pylance
و MyPy
رو نداره.-
منابع آموزشی:1. داکیومنت Flake8
https://flake8.pycqa.org/en/latest/user/invocation.html
2. داکیومنت MyPy
https://mypy.readthedocs.io/en/stable/getting_started.html
Code Formatting
برای مرتب و
organize
کردن import
ها از isort
استفاده کنید، هم به صورت CLI
در دسترس هست و هم یک API
داره که میتونید در کد پایتون استفاده کنید. یک code formatter
بسیار معروف که در اکثر پروژهها استفاده میشه Black
هست، زیر نظر PSF
(یا Python Software Foundation
) و برنامه نویسای با تجربه و کار کشته ای همچون آقای Łukasz Langa
(ریلیس منیجر پایتون 3.9) توسعه داده میشه، با دیگر ابزار ها مثل isort
سازگار هست، با PEP8
سازگاره و کلی قابلیت مزیت دیگه داره که حقیقتا اینجا جا نمیشن :)-
منابع آموزشی:1. داکیومنت isort
https://pycqa.github.io/isort/
2. داکیومنت Black
https://black.readthedocs.io/en/stable/getting_started.html
3. یک ویدیو از PyCon 2019 درباره Black
https://youtu.be/esZLCuWs_2Y
* این ابزارها همگی داکیومنت ساده و خوانایی دارن و به نظرم بهترین منبع همین داکیومنتهاشون هست.
Testing
دو کتابخونه
Pytest
و unittest
(در stdlib
موجود هست) در تست نویسی پروژه ها استفاده میشن، برای تست کردن پروژه در environment
های متفاوت از ابزار tox
استفاده میشه و باهاش میتونید در نسخه های متفاوتی از پایتون کدتون رو تست کنید.-
منابع آموزشی:1. یک مقاله جامع درباره تست نویسی، انواع آن و روشهای مورد استفاده در پایتون
https://realpython.com/python-testing/
2. ویدیو درباره unittest در پایتون
-
آقای ned batchelder:https://m.youtube.com/watch?v=FxSsnHeWQBY
-
آقای Corey Schafer:https://www.youtube.com/watch?v=6tNS--WetLI
* همچنین اگر از
Git
در پروژه خودتون استفاده میکنید، پیشنهاد میکنم از pre-commit
حتما استفاده کنید و تمام این ابزارهای گفته شده رو automate
کنید تا در هربار commit
کردن، قبل از اینکه commit
انجام بشه، این ابزارها روی کدتون اجرا بشن و اگر اشکالی در کدتون وجود داره پیدا بشه و اون رو برطرف کنید و دوباره commit کنید.وبسایت pre commit:
https://pre-commit.com/
GitHub
GitHub - Textualize/rich: Rich is a Python library for rich text and beautiful formatting in the terminal.
Rich is a Python library for rich text and beautiful formatting in the terminal. - Textualize/rich
❤6👍1🔥1
poetry.pdf
223.7 KB
✅برای یه پروژه برنامه نویسی قطعا مدیریت پکیجها یکی از مهمترین نکات و مواردی هست که باید بهش حواسمون باشه.
✔️فایل pdf رو مطالعه کنید.
مطلبی از لینکدین Mohammad Amin Amjadi
برای یه پروژه برنامه نویسی قطعا مدیریت پکیجها یکی از مهمترین نکات و مواردی هست که باید بهش حواسمون باشه.
اگر پکیجها آپدیت نباشن میتونه باعث مشکلات امنیتی و ... بشه.
از اون طرف اگر مدیریت پکیجهامون نادرست باشه میتونه جلوی امکان بیلد پروژه رو هم بگیره حتی.
توی این پست سعی کردم برای پروژههای پایتونی نکاتی رو پیرامون pip بگم که چرا نباید ازش استفاده کنیم و در ادامه نحوه استفاده از poetry رو برای ستاپش، استفاده، dockerfile و pre-commit رو هم آوردم.
امیدوارم که مفید باشه.
✔️فایل pdf رو مطالعه کنید.
مطلبی از لینکدین Mohammad Amin Amjadi
برای یه پروژه برنامه نویسی قطعا مدیریت پکیجها یکی از مهمترین نکات و مواردی هست که باید بهش حواسمون باشه.
اگر پکیجها آپدیت نباشن میتونه باعث مشکلات امنیتی و ... بشه.
از اون طرف اگر مدیریت پکیجهامون نادرست باشه میتونه جلوی امکان بیلد پروژه رو هم بگیره حتی.
توی این پست سعی کردم برای پروژههای پایتونی نکاتی رو پیرامون pip بگم که چرا نباید ازش استفاده کنیم و در ادامه نحوه استفاده از poetry رو برای ستاپش، استفاده، dockerfile و pre-commit رو هم آوردم.
امیدوارم که مفید باشه.
👍7❤2🔥1
Forwarded from محمد خشنوا / برنامه نویسی (Reza Amin)
#python
#django
Generic relations
جنریک ریلیشن در جنگو یک رابطه خاصی است که به شما اجازه می دهد یک رابطه (کلید خارجی) را با هر مدلی که در پروژه جنگویی خود نصب کرده اید برقرار کنید. وقتی شما می خواهید یک سیستمی را پیاده سازی کنید که بتواند با اشیای مختلفی ارتباط برقرار کند. ب
رای مثال، یک سیستم نظر دهی که بتواند نظرات را برای پست ها، پروفایل های کاربری، تصاویر و حتی نظرات دیگر ذخیره کند.
برای استفاده از generic relations در جنگو، شما باید از بسته contenttypes استفاده کنید که به شما اجازه می دهد از مدل ContentType استفاده کنید. این مدل اطلاعاتی درباره مدل های نصب شده در پروژه شما را ذخیره می کند و شما می توانید با استفاده از سه فیلد زیر یک رابطه عمومی با هر مدلی برقرار کنید:
یک فیلد ForeignKey که به مدل ContentType اشاره می کند (معمولا با نام content_type نامگذاری می شود).
یک فیلد PositiveIntegerField که کلید اصلی شیء مرتبط را ذخیره می کند (معمولا با نام object_id نامگذاری می شود).
یک فیلد GenericForeignKey که با استفاده از دو فیلد قبلی یک رابطه با شیء مرتبط ایجاد می کند (معمولا با نام content_object نامگذاری می شود).
مثلا فرض کنید ما یک مدل Comment داریم که می خواهیم بتواند به هر مدلی نظر دهد. ما می توانیم از generic relations برای این منظور استفاده کنیم:
خوب حالا اینطور می توانیم برای یک پست نظر ثبت کنیم :
اگر بخواهیم برای هر مدل دیگری هم که داریم مانند دوره آموزشی و مقاله یا هر مدل دیگری می توان از همین طریق نظر ثبت کرد .
@SEYED_BAX
#django
Generic relations
جنریک ریلیشن در جنگو یک رابطه خاصی است که به شما اجازه می دهد یک رابطه (کلید خارجی) را با هر مدلی که در پروژه جنگویی خود نصب کرده اید برقرار کنید. وقتی شما می خواهید یک سیستمی را پیاده سازی کنید که بتواند با اشیای مختلفی ارتباط برقرار کند. ب
رای مثال، یک سیستم نظر دهی که بتواند نظرات را برای پست ها، پروفایل های کاربری، تصاویر و حتی نظرات دیگر ذخیره کند.
برای استفاده از generic relations در جنگو، شما باید از بسته contenttypes استفاده کنید که به شما اجازه می دهد از مدل ContentType استفاده کنید. این مدل اطلاعاتی درباره مدل های نصب شده در پروژه شما را ذخیره می کند و شما می توانید با استفاده از سه فیلد زیر یک رابطه عمومی با هر مدلی برقرار کنید:
یک فیلد ForeignKey که به مدل ContentType اشاره می کند (معمولا با نام content_type نامگذاری می شود).
یک فیلد PositiveIntegerField که کلید اصلی شیء مرتبط را ذخیره می کند (معمولا با نام object_id نامگذاری می شود).
یک فیلد GenericForeignKey که با استفاده از دو فیلد قبلی یک رابطه با شیء مرتبط ایجاد می کند (معمولا با نام content_object نامگذاری می شود).
مثلا فرض کنید ما یک مدل Comment داریم که می خواهیم بتواند به هر مدلی نظر دهد. ما می توانیم از generic relations برای این منظور استفاده کنیم:
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.TextField()
date = models.DateTimeField(auto_now_add=True)
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey()
خوب حالا اینطور می توانیم برای یک پست نظر ثبت کنیم :
post = Post.objects.get(pk=1)
comment = Comment.objects.create(user=user, text="Nice post!", content_object=post)
اگر بخواهیم برای هر مدل دیگری هم که داریم مانند دوره آموزشی و مقاله یا هر مدل دیگری می توان از همین طریق نظر ثبت کرد .
@SEYED_BAX
👍6
Forwarded from Abolfazl 🤘
سلام دوستان عزیز
همراه شما هستم با یه موضوع زیبا و جذاب به نام دیزاین پترن یا الگوهای طراحی که امروزه تمام برنامه نویس ها و مهندسین نرم افزار باید بدوننش.
دیزاین پترن چیست؟
یه سری اشکالات رایج در برنامه نویسی و دیزاین وجود داشتن و دارن. اون اشکالات دائم تکرار میشن. حالا اگر ما بخوایم به شیوه code and fix مثل اون چیزی که تو مبانی برنامه نویسی میخوندیم بریم جلو بعد از مدتی کدمون کاملا بلا استفاده میشه . به بیان دیگه maintainability به شدت افت میکنه و کار کثیف در میاد.
جدا از اون، ما نیازه که قبل از پیاده سازی دیزاین رو انجام بدیم دیگه که بعد کدش رو بنویسیم.
رو این حساب کارکشته های حوزه برنامه نویسی اومدن برای حل این مشکلات اومدن و یه سری الگو پیشنهاد دادن.
یکی از مهمترین منابع کتاب GoF هست که خوندنش رو به همه عزیزان توصیه میکنم.
این ریپازیتوری گیتهاب رو چند مدت پیش ساختم برای پیاده سازی دیزاین پترن های پر استفاده بدون پیچیدگی خاص و بدون نیاز به درک زبان UML به زبان پایتون
https://github.com/abolfazl8131/python_design_patterns
همراه شما هستم با یه موضوع زیبا و جذاب به نام دیزاین پترن یا الگوهای طراحی که امروزه تمام برنامه نویس ها و مهندسین نرم افزار باید بدوننش.
دیزاین پترن چیست؟
یه سری اشکالات رایج در برنامه نویسی و دیزاین وجود داشتن و دارن. اون اشکالات دائم تکرار میشن. حالا اگر ما بخوایم به شیوه code and fix مثل اون چیزی که تو مبانی برنامه نویسی میخوندیم بریم جلو بعد از مدتی کدمون کاملا بلا استفاده میشه . به بیان دیگه maintainability به شدت افت میکنه و کار کثیف در میاد.
جدا از اون، ما نیازه که قبل از پیاده سازی دیزاین رو انجام بدیم دیگه که بعد کدش رو بنویسیم.
رو این حساب کارکشته های حوزه برنامه نویسی اومدن برای حل این مشکلات اومدن و یه سری الگو پیشنهاد دادن.
یکی از مهمترین منابع کتاب GoF هست که خوندنش رو به همه عزیزان توصیه میکنم.
این ریپازیتوری گیتهاب رو چند مدت پیش ساختم برای پیاده سازی دیزاین پترن های پر استفاده بدون پیچیدگی خاص و بدون نیاز به درک زبان UML به زبان پایتون
https://github.com/abolfazl8131/python_design_patterns
👏5👍2🔥2
Forwarded from Python Hints
#تجربه
دوره کتابخوانی خودمون
کتاب خوانی با چندتا از همکارای شرکت
مقاله خوانی و ...
باعث شد یک چیزی رو مطمئن بشم؛ ۹۸٪ کتاب خواندن رو بلد نیستیم
البته حق هم داریم، دانشگاه و مدرسه و ... باعث و بانی این موضوع بوده و البته اینکه هیچ کس بهمون یاد نداد یا بهمون نگفت که داریم اشتباه میخونیم.
شخصاً این مشکل رو داشتم.
برای مثال: اول هفته با یکی از همکاران شرکت شروع به خواندن یک کتاب کردیم (بخش تحقیقات)
من دیروز کتاب رو تموم کردم و شروع کردم به کد زدن (با اینکه من جاهای دیگه هم کار میکنم) وقتی
خیلی ساده ببینید که آیا شما کتاب خواندن رو بلد هستید یا خیر، اگر مدل خواندن شما برای شرایط زیر فرق میکنه میشه امیدوار بود :
۱- خواندن برای آزمون تئوری (مثلاً LPIC)
۲- خواندن برای آزمون عملی (مثلاً RHCSA)
۳- خواندن برای یادگیری نکتهای (fluent python)
۴- خواندن برای یادگیری دقیق ( fastapi documentation )
اگر توی همه این موارد فرمول خواندن شما یکسان هست، اگر موقع خواندن (حتی دیجیتال) ورق و قلم بغل دستت نداری
متأسفانه باید بگم که شما کتاب خواندن درست رو بلد نیستید، و همین داره وقتتون رو میگیره یا شمارو خسته میکنه.
دوره کتابخوانی خودمون
کتاب خوانی با چندتا از همکارای شرکت
مقاله خوانی و ...
باعث شد یک چیزی رو مطمئن بشم؛ ۹۸٪ کتاب خواندن رو بلد نیستیم
البته حق هم داریم، دانشگاه و مدرسه و ... باعث و بانی این موضوع بوده و البته اینکه هیچ کس بهمون یاد نداد یا بهمون نگفت که داریم اشتباه میخونیم.
شخصاً این مشکل رو داشتم.
برای مثال: اول هفته با یکی از همکاران شرکت شروع به خواندن یک کتاب کردیم (بخش تحقیقات)
من دیروز کتاب رو تموم کردم و شروع کردم به کد زدن (با اینکه من جاهای دیگه هم کار میکنم) وقتی
pull request
زدم و درخواست peer review
دادم، بهم گفت که تازه ۱٫۳ کتاب رو خوانده.خیلی ساده ببینید که آیا شما کتاب خواندن رو بلد هستید یا خیر، اگر مدل خواندن شما برای شرایط زیر فرق میکنه میشه امیدوار بود :
۱- خواندن برای آزمون تئوری (مثلاً LPIC)
۲- خواندن برای آزمون عملی (مثلاً RHCSA)
۳- خواندن برای یادگیری نکتهای (fluent python)
۴- خواندن برای یادگیری دقیق ( fastapi documentation )
اگر توی همه این موارد فرمول خواندن شما یکسان هست، اگر موقع خواندن (حتی دیجیتال) ورق و قلم بغل دستت نداری
متأسفانه باید بگم که شما کتاب خواندن درست رو بلد نیستید، و همین داره وقتتون رو میگیره یا شمارو خسته میکنه.
👍13
Forwarded from Python Hints
روی این مورد از من راهکار خواستن (جلوتر مثال میزنم برای توضیح)
همین اول کار بگم یک فرمول ثابت برای همه وجود نداره هرکسی گفت وجود داره کلاش هست .اگر فرمولش ثابت بود؛ برای همه بچه مدرسهای ها و دانشجوها استفاده میکردن که همه بتونند به درستی از تمام ظرفیت هوش و استعدادشون استفاده کنند.
گفتند مشکل رو نشون دادن بدون راهحل فایده نداره.
من خودم گفتم؛ چندسال مسئله خودم این بود که اصلا نمیدونستم نحوه خوندم اشتباه هست؛ آدم وقتی به اشتباه پیمیبره تازه از اونجا دنبال راهکار میگرده
کدوم یک از شما تو کدی که باگ و مشکل نداره؛ دنبال تغییر الگوریتم هستید ؟ پس پیدا کردن مشکل خودش ۷۰-۸۰٪ رسیدن به راهحل هست.
درنهایت من با این مثال توضیج دادم؛ فکر کردم شاید مفید باشه هرچند یک جلسه لایو ویدئویی میتونست بهتر باشه :
مثلا:
فرض کن داکیومنت
FastAPI
رو داری میخونی؛ نمیری بشینی توضیح نحوه نوشته شدن
generator
رو بخونی؛ موارد مهم رو میخونی مثل get, post, route, authentication , ...
یعد میای میبینی نوشته
Async
و تو میدونی لازم داری توی تمام پروژههات مهم هست
چیکار میکنی از روی دامکیومنت Fastapi میخونی ؟
قطعا نه؛ میری یک کتاب یا یک دوره براش پیدا میکنی که هدفش فقط همین باشه
حالا فرض کن کتاب Async رو میخوای بخونی؛ توی ۳ فصل اول هم مقدمات پایتون هست
میشینی از اول بخونی ؟
نه فقط نگاه به سرفصل میکنی و اگر همرو میشناختی حذف میکنی و از فصل ۴ شروع میکنی
یک مثال دیگه کتاب fluent هست؛ این کتاب و کتابهای مشابه هر فصل یک هدفی داره
شاید داخل یک فصل اومده مثلا فریمورک django رو مثال زده
اینجا بر خلاف مثال قبلی
Async , FastAPI
شما نباید بری django رو بخونی اول به هدف فصل نگاه میکنی مثلا
mixin (multiple inheritance)
هست و بعد سعی میکنی همین رو درک کنی حالا اگر نویسنده کتاب زحمت کشیده ی مثال هم زده و شما بلد نیستی نباید برات مهم باشه
چون اون مثال میشه حاشیه برای شما؛ چون تو اصلا بکند دولوپر نیستی.
همین اول کار بگم یک فرمول ثابت برای همه وجود نداره هرکسی گفت وجود داره کلاش هست .اگر فرمولش ثابت بود؛ برای همه بچه مدرسهای ها و دانشجوها استفاده میکردن که همه بتونند به درستی از تمام ظرفیت هوش و استعدادشون استفاده کنند.
گفتند مشکل رو نشون دادن بدون راهحل فایده نداره.
من خودم گفتم؛ چندسال مسئله خودم این بود که اصلا نمیدونستم نحوه خوندم اشتباه هست؛ آدم وقتی به اشتباه پیمیبره تازه از اونجا دنبال راهکار میگرده
کدوم یک از شما تو کدی که باگ و مشکل نداره؛ دنبال تغییر الگوریتم هستید ؟ پس پیدا کردن مشکل خودش ۷۰-۸۰٪ رسیدن به راهحل هست.
درنهایت من با این مثال توضیج دادم؛ فکر کردم شاید مفید باشه هرچند یک جلسه لایو ویدئویی میتونست بهتر باشه :
مثلا:
فرض کن داکیومنت
FastAPI
رو داری میخونی؛ نمیری بشینی توضیح نحوه نوشته شدن
generator
رو بخونی؛ موارد مهم رو میخونی مثل get, post, route, authentication , ...
یعد میای میبینی نوشته
Async
و تو میدونی لازم داری توی تمام پروژههات مهم هست
چیکار میکنی از روی دامکیومنت Fastapi میخونی ؟
قطعا نه؛ میری یک کتاب یا یک دوره براش پیدا میکنی که هدفش فقط همین باشه
حالا فرض کن کتاب Async رو میخوای بخونی؛ توی ۳ فصل اول هم مقدمات پایتون هست
میشینی از اول بخونی ؟
نه فقط نگاه به سرفصل میکنی و اگر همرو میشناختی حذف میکنی و از فصل ۴ شروع میکنی
یک مثال دیگه کتاب fluent هست؛ این کتاب و کتابهای مشابه هر فصل یک هدفی داره
شاید داخل یک فصل اومده مثلا فریمورک django رو مثال زده
اینجا بر خلاف مثال قبلی
Async , FastAPI
شما نباید بری django رو بخونی اول به هدف فصل نگاه میکنی مثلا
mixin (multiple inheritance)
هست و بعد سعی میکنی همین رو درک کنی حالا اگر نویسنده کتاب زحمت کشیده ی مثال هم زده و شما بلد نیستی نباید برات مهم باشه
چون اون مثال میشه حاشیه برای شما؛ چون تو اصلا بکند دولوپر نیستی.
👍11
✅پکیج django-axes برای مدیریت و کنترل ورود به سیستم در جنگو
✔️امکاناتش:
-تعیین محدودیت برای تلاشهای ورود ناموفق به سیستم
-قابلیت بلاک کردن آیپیهای مشکوک و حمله کننده 😂
-امکان تنظیم تعداد تلاشهای ناموفق برای ورود به سیستم و زمانهای مجاز برای تلاش مجدد
-قابلیت ارسال ایمیل هشدار به مدیر سیستم در صورت امنیت کاهش یافته
-امکان تنظیم و سفارشیسازی پیام خطا برای صفحه ورود به سیستم
خودم فقط یکم داکیومنتش رو خوندم و یه ویدئو هم ازش دیدم. ولی تست اش نکردم.
اگه تجربه استفاده ازش دارید کامنت کنید لطفا
✔️امکاناتش:
-تعیین محدودیت برای تلاشهای ورود ناموفق به سیستم
-قابلیت بلاک کردن آیپیهای مشکوک و حمله کننده 😂
-امکان تنظیم تعداد تلاشهای ناموفق برای ورود به سیستم و زمانهای مجاز برای تلاش مجدد
-قابلیت ارسال ایمیل هشدار به مدیر سیستم در صورت امنیت کاهش یافته
-امکان تنظیم و سفارشیسازی پیام خطا برای صفحه ورود به سیستم
خودم فقط یکم داکیومنتش رو خوندم و یه ویدئو هم ازش دیدم. ولی تست اش نکردم.
اگه تجربه استفاده ازش دارید کامنت کنید لطفا
👍16
Forwarded from Abolfazl 🤘
الگوی طراحی facade ( فِساد خونده میشه)
یکی از الگوهای بسیار پر کاربرد که برای کاهش کاپلینگ بین کلاس ها ( یا حتی sub system ها ) استفاده میشه.
به طور کلی ما زمانی از الگوی فساد استفاده میکنیم که کلاس های مختلفی داریم و میخوایم این کلاس ها از طریق یک کلاس دیگه بدون دسترسی مستقیم به هم اطلاعات رد و بدل کنن.
مثال : ما دو کلاس food و drink داریم و یک کلاسorder
واضحه که ما میخوایم غذا یا نوشیدنی یا هر دو رو به هر حال سفارش بدیم.
یه راه اشتباه استفاده مستقیم از از این دو کلاس داخل کلاس order هست.
اما یه راه درست اینه که کلاس order اطلاعی از داخل اون دو کلاس نداشته باشه. یعنی یک interface تعریف شه و کلاس order از طریق اون interface کارشو انجام بده.
مثال دوم یه مثال از ریپازیتوری گیتهاب خودمه که تا حد قابل توجهی حق مطلب رو ادا میکنه
یکی از الگوهای بسیار پر کاربرد که برای کاهش کاپلینگ بین کلاس ها ( یا حتی sub system ها ) استفاده میشه.
به طور کلی ما زمانی از الگوی فساد استفاده میکنیم که کلاس های مختلفی داریم و میخوایم این کلاس ها از طریق یک کلاس دیگه بدون دسترسی مستقیم به هم اطلاعات رد و بدل کنن.
مثال : ما دو کلاس food و drink داریم و یک کلاسorder
واضحه که ما میخوایم غذا یا نوشیدنی یا هر دو رو به هر حال سفارش بدیم.
یه راه اشتباه استفاده مستقیم از از این دو کلاس داخل کلاس order هست.
اما یه راه درست اینه که کلاس order اطلاعی از داخل اون دو کلاس نداشته باشه. یعنی یک interface تعریف شه و کلاس order از طریق اون interface کارشو انجام بده.
مثال دوم یه مثال از ریپازیتوری گیتهاب خودمه که تا حد قابل توجهی حق مطلب رو ادا میکنه
👍5😁3👎1
جنگولرن
الگوی طراحی facade ( فِساد خونده میشه) یکی از الگوهای بسیار پر کاربرد که برای کاهش کاپلینگ بین کلاس ها ( یا حتی sub system ها ) استفاده میشه. به طور کلی ما زمانی از الگوی فساد استفاده میکنیم که کلاس های مختلفی داریم و میخوایم این کلاس ها از طریق یک کلاس دیگه…
✅بقیه توضیحاتش رو از کانال @tobecomesoftwareengineer بخونید 😁
لینک بقیه اش:
https://www.tgoop.com/tobecomesoftwareengineer/89
https://www.tgoop.com/tobecomesoftwareengineer/90
لینک بقیه اش:
https://www.tgoop.com/tobecomesoftwareengineer/89
https://www.tgoop.com/tobecomesoftwareengineer/90
👍2
Forwarded from محمد خشنوا / برنامه نویسی (SeYeD.Dev)
آموزش برنامهنویسی از صفر تا بینهایت به صورت کاملا رایگان، در این دوره قصد داریم هر آنچه که در بازار کار نیاز است را به شما آموزش دهیم. هدف این دوره، تبدیل شدن به یک برنامهنویس فول استک است.
مرحله ۱: مبانی و زبانهای برنامهنویسی
1. مقدمه به برنامهنویسی
2. زبان برنامهنویسی پایتون
3. زبان برنامهنویسی جاوا اسکریپت
4. مفاهیم برنامهنویسی شیگرا
مرحله ۲: توسعه وب و فریمورکها
5. فریمورک Django
6. فریمورک FastAPI
7. فریمورک VueJS
8. فریمورک gRPC
9. استفاده از بوتاسترپ، HTML، CSS و فریمورکهای CSS معتبر
مرحله ۳: دیتابیس
10. دیتابیس SQL
11. دیتابیس MongoDB
12. آشنایی با دیتابیس Neo4J
13. استفاده از ردیس، ربیت ام کیو، سلری
مرحله ۴: تکنولوژیهای متنوع
14. مفاهیم داکر
15. آشنایی با لینوکس
16. اجرای دیپلویمنت خودکار و CI/CD
مرحله ۵: امنیت و تستها
17. تکنیکهای تست نویسی
18. استفاده از گیت
19. مفاهیم امنیت در وب
مرحله ۶: مفاهیم پیشرفته
20. مفاهیم مالتیتردینگ و مالتیپروسسینگ و Async
21. آشنایی با معماری میکروسرویس
مرحله ۷: مهارتهای مساعدتی
22. آموزش ساخت رزومه
23. راهنمایی در مسیر کاریابی
24. فرایندهای توسعه نرمافزار Agile/Scrum
روش ارائه:
- کلاسها به صورت لایو در دیسکورد برگزار خواهند شد.
- کلاسها به صورت شبانه ارائه خواهند شد.
زمان شروع و مدت دوره:
- شروع دوره از پس از تعطیلات نوروز و تا حدود ۶ ماه به طول خواهد انجامید.
مدرس دوره:
- سید و همکاران ایشان افتخار دارند این دوره را برگزار نمایند.
کانال تلگرام سید و رفقا:
زمان دقیق شروع دوره و لینک دیسکورد در کانال سید و رفقا اطلاع رسانی داده خواهد شد
https://www.tgoop.com/seyed_bax
مرحله ۱: مبانی و زبانهای برنامهنویسی
1. مقدمه به برنامهنویسی
2. زبان برنامهنویسی پایتون
3. زبان برنامهنویسی جاوا اسکریپت
4. مفاهیم برنامهنویسی شیگرا
مرحله ۲: توسعه وب و فریمورکها
5. فریمورک Django
6. فریمورک FastAPI
7. فریمورک VueJS
8. فریمورک gRPC
9. استفاده از بوتاسترپ، HTML، CSS و فریمورکهای CSS معتبر
مرحله ۳: دیتابیس
10. دیتابیس SQL
11. دیتابیس MongoDB
12. آشنایی با دیتابیس Neo4J
13. استفاده از ردیس، ربیت ام کیو، سلری
مرحله ۴: تکنولوژیهای متنوع
14. مفاهیم داکر
15. آشنایی با لینوکس
16. اجرای دیپلویمنت خودکار و CI/CD
مرحله ۵: امنیت و تستها
17. تکنیکهای تست نویسی
18. استفاده از گیت
19. مفاهیم امنیت در وب
مرحله ۶: مفاهیم پیشرفته
20. مفاهیم مالتیتردینگ و مالتیپروسسینگ و Async
21. آشنایی با معماری میکروسرویس
مرحله ۷: مهارتهای مساعدتی
22. آموزش ساخت رزومه
23. راهنمایی در مسیر کاریابی
24. فرایندهای توسعه نرمافزار Agile/Scrum
روش ارائه:
- کلاسها به صورت لایو در دیسکورد برگزار خواهند شد.
- کلاسها به صورت شبانه ارائه خواهند شد.
زمان شروع و مدت دوره:
- شروع دوره از پس از تعطیلات نوروز و تا حدود ۶ ماه به طول خواهد انجامید.
مدرس دوره:
- سید و همکاران ایشان افتخار دارند این دوره را برگزار نمایند.
کانال تلگرام سید و رفقا:
زمان دقیق شروع دوره و لینک دیسکورد در کانال سید و رفقا اطلاع رسانی داده خواهد شد
https://www.tgoop.com/seyed_bax
👍10❤8👎3