Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
665 - Telegram Web
Telegram Web
جنگولرن
مشکل soft delete برای relation ها اگه این ویدئو رو از کانال @microfrontend_ir دیده باشید. تقریبا همه حالت هارو برای Soft delete هندل کرده. برای اینکه حذف واقعی اتفاق نیافته، متد delete مدل رو override می کنیم و میگیم جای حذف، رکورد رو آپدیت کن و... ولی…
کامنت @Sepehr_e
سلام و درود. من برای این یه راه حلی دیدم از ریپو یکی از دوستان بنظر اومد مربوطه
کاری که کردن اومدن و از 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
👍51
جنگولرن
پستی از لینکدین Mohammad Amin Amjadi فعلا فقط تصمیم گرفته. اما از همین تصمیم اش خیلی چیزارو میشه یاد گرفت 🤣 لینک تصمیم گرفتم برای رشد خودم و جامعه جنگو در ایران شروع کنم به اشتراک گذاشتن تجربیات و مطالب مختلف با تمرکز روی توسعه بک اند جنگو برای تیم‌های…
django001.pdf
347.3 KB
اولین پست از Mohammad Amin Amjadi
لینک
بریم سراغ اشتباهات پروژه جنگو! و اولین پستی که قولش رو داده بودم.
سعی کردم بر اساس کدهای گیت‌هاب و تجربیاتی که داشتم یکسری اشتباهات و مطالب رو باهاتون در میون بذارم.
فرض کنین که بک اند یک فروشگاه اینترنتی به این شکل پیاده شده.
از اونجایی که زودتر شروع کردن رو به یک شروع بی نقص ترجیح می‌دم قطعا اشتباهات و ایرادات زیادی بهم وارد هست.
ممنون میشم با دقت مطالعه کنین و هر نظر و سوالی داشتین باهام در میون بذارین.
امیدارم که مفید باشه و حمایت فراموش نشه.
👍136
یه دوره رایگان در مکتب خونه با عنوان تحلیل و طراحی سیستم

توضیحاتش:
یکی از اهداف اصلی تعیین شده برای فارغ التحصیلان رشته مهندسی کامپیوتر، تسلط به مراحل توسعه سیستم‌های نرم‌افزاری بزرگ و پیچیده می‌باشد. به همین دلیل، دروس طراحی سیستمهای شئ‌گرا، مهندسی نرم افزار 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


پ ن: این دوره ها رو با حواس جمع ببینید و از نکات بسیار خوبی که گفته میشه نهایت استفاده رو ببرید.
👍20👎4
آموزش پیاده سازی جنگو در پلتفرم های مختلف لیارا، هم روش و وی پی اس
از علی بیگدلی

در این وبینار تلاش بر این است تا مدل های مختلف پیاده سازی را به دوستان ارائه کنیم تا بتوانند بدون ترس و با خطا های کمتر گزینه های مناسب را برای پیاده سازی انتخاب کنند. از جمله مواردی که در این وبینار بررسی خواهد شد نحوه تبدیل و تغییر layout یک پروژه برای پیاده سازی در هر متد است و در ادامه به ویژگی هایی اشاره خواهد که به شما در تصمیم گیری انتخاب خواهد کرد.

همچنین در هر مورد می توانید هزینه ها و کیفیت سرویس را بررسی کنین از جمله ، پیاده سازی ها با CICD و همچنین بکاپ گیری های مداوم.

لینک آپارات:
https://www.aparat.com/v/lRu59
لینک سایت علی بیگدلی:
لینک
👍11
جنگولرن
سری مهندسی نرم‌افزار: پست 6 از لینکدین Saeed Shahrivari Joghan زوج طلایی طراحی: سادگی + تفکیک دغدغه‌ها اگه پست ۵ رو خونده باشید به اینجا رسیدیم که برای طراحی و تولید یه نرم‌افزار (باز هم تاکید می‌کنم دامنه نرم‌افزار شامل کد، داده و مستنداته🙂) که قابلیت تغییر،…
سری مهندسی نرم‌افزار: پست 7
از لینکدین Saeed Shahrivari Joghan
توسعه چابک نرم‌افزار: سرعت یا انطباق؟

حوالی سال ۲۰۰۱ میلادی تعدادی از افراد شناخته شده حوزه نرم‌افزار طی بیانیه‌ای اعلام کردند که به راه‌های بهتری برای توسعه نرم‌افزار نسبت به دهه ۹۰ میلادی رسیدند و عنوان این بیانیه رو گذاشتند «توسعه نرم‌افزار به صورت چابک». بر خلاف روش‌های کلاسیک اجایل ارز‌ش‌های جدیدی رو تاکید می‌کرد:
۱- ارزش بیشتر افراد و تعاملات نسبت به فرآیند‌ها و ابزار
۲- ارزش بیشتر نرم‌افزاری که کار می‌کنه نسبت به مستندات مفصل
۳- ارزش بیشتر تعامل با مشتری نسبت به مذاکره قرارداد
۴- ارزش بیشتر پاسخ به تغییر نسبت به پایبندی به برنامه قبلی
زیر بیانیه هم یه نکته نوشته شده که معمولاً کسی نمی‌خونه: «آيتم‌های آخری بی‌ارزش نیستند بلکه آیتم‌های اولی ارزش بیشتری دارند.»

من همیشه اعتقاد داشتم که اجایل بودن به معنی سریع بودن نیست بلکه ذات فلسفه اجایل «پاسخ و واکنش مناسب به تغییراته». به قول فرنگیا که میگن embracing change یعنی فراتر از پذیرش تغییرات اونها رو در آغوش بکشیم. سوال مهم اینه که «چرا باید انقدر در مقابل تغییرات منعطف باشیم؟» من در پاسخش دو تا نکته دارم:
۱- در فرآیند تولید نرم‌افزار مخصوصا شناسایی دقیق نیازمندی کاربر ما درگیر یه پروسه غیر قطعی، تکاملی و اکتشافی هستیم. یعنی ما به مرور متوجه نیازمندی دقیق کاربر میشیم و خیلی مواقع این نیازمندی‌ها تغییر می‌کنند پس ما باید به جای جنگیدن با تغییر اونها رو کامل بپذیریم. یکی از راهکار اصلی چابکی برای هضم تغییرات فرآیند تکرار‌شونده و افزایشی هست.
۲- از دید من چابکی و هضم تغییرات در راستای بقای کسب‌وکار تعریف میشه. یعنی مثل روال طبیعت اگه با تغییرات بیشتر خودت رو وفق بدی، بیشتر بقا پیدا می‌کنی. در واقع مثال خوب برای چابکی یوزپلنگ نیست که با اینکه خیلی سریعه ولی همه جا در حال انقراضه بلکه مثال خوب میتونه حضرت کروکدیل باشه که ده‌ها میلیون سال روی زمین بقا داشته. پس معمولاً شرکتی که چابکتر باشه به تغییرات واکنش بهتری نشون میده و در بازار بقای بیشتری پیدا می‌کنه.

در زمینه چابکی حرف زیاده ولی تو این پست بیشتر از این اطاله کلام نمی‌کنم و در پست‌های بعدی بیشتر توضیح میدم. برای یادآوری هم که شده بد نیست نگاهی مجدد به بیانیه چابکی بندازیم:
https://agilemanifesto.org/
اگه میخواهید توی جنگو از Preprocessor ع 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 و ...) ،از لحاظ تایمینگ چطور ، و یا حتی تعداد کوئری‌هامون و ...

به این موضوع شکل گرفته در ذهن ما در دنیای مهندسی نرم افزار پروفایلینگ میگن

پروفایلینگ در توسعه نرم افزار به فرآیند تجزیه و تحلیل رفتاری زمان اجرای یک سیستم یا برنامه میگیم ،تا ازین طریق بتوان نقاط ضعف و مورد دار سیستم رو پیدا کنیم و در جهت بهبود اون اقدام به بازنویسی موارد مدنظرمون کنیم


انواع مختلف پروفایلینگ به دسته بندی های زیر تقسیم میشه
۱-پروفایلینگ زمان:
مقدار زمان صرف شده بخش‌های مختلف کد رو اندازه گیری میکنیم


۲-پروفایلینگ حافظه:
تحلیل نحوه استفاده از حافظه توسط یک برنامه (مدیریت ناکارآمد، مصرف غیر ضروری و ...)

۳-پروفایلینگ cpu:
نحوه استفاده از پردازنده، شناسایی عملیات‌های محدود به cpu و نقاطی که بهینه سازی شود


۴-پروفایلینگ i/o:
دسترسی به فایلها یا کوئری‌های دیتابیس،شناسایی نقاط محدود کننده و بهبود آن

۵-پروفایلینگ پوششی کد:
کدام بخش کد در طول یک جریان ،اجرا شدند کمک به تست و شناسایی کدام بخش کد اجرا نشده است


۶-پروفایلینگ فراخوانی تابع:
ردیابی فراوانی و مدت زمان فراخوانی تابع، درک سلسله مراتب فراخوانی و شناسایی توابع با تاثیر بالا
نکته قابل توجه:
پروفایلینگ نباید در دسترس غیر توسعه دهندگان قرار گیرد ،این رویکرد و ابزارهای آن تنها مورد استفاده تیم توسعه جهت شناسایی ضعف سیستم و کدها در جهت بهبود آن می باشد نه بیشتر
در فریمورک جنگو هم دو پکیج محبوب وجود دارد django-debug-toolbar و django-silk می باشد


خب بیاید django-silk رو پیکربندی و نصب کنیم


نصب
pip install django-silk
تنظیمات در settings.py
INSTALLED_APPS = [
...
'silk'
]


MIDDLEWARE = [
...
'silk.middleware.SilkyMiddleware',
]
در urls اصلی پروژه
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 تعریف کنید، به عنوان مثال:

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
👍81👎1
✔️ سوال: best practice‌ها و ابزارات مورد نیاز برای توسعه یه بسته، لایبرری یا نرم‌افزار پایتونی چیه؟

ابزارهای زیادی واسه این‌کارا وجود داره که بر اساس تجربه و چیزی که از 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/
6👍1🔥1
poetry.pdf
223.7 KB
برای یه پروژه برنامه نویسی قطعا مدیریت پکیج‌ها یکی از مهم‌ترین نکات و مواردی هست که باید بهش حواسمون باشه.

✔️فایل pdf رو مطالعه کنید.

مطلبی از لینکدین Mohammad Amin Amjadi
برای یه پروژه برنامه نویسی قطعا مدیریت پکیج‌ها یکی از مهم‌ترین نکات و مواردی هست که باید بهش حواسمون باشه.
اگر پکیج‌ها آپدیت نباشن می‌تونه باعث مشکلات امنیتی و ... بشه.
از اون طرف اگر مدیریت پکیج‌هامون نادرست باشه میتونه جلوی امکان بیلد پروژه رو هم بگیره حتی.


توی این پست سعی کردم برای پروژه‌های پایتونی نکاتی رو پیرامون pip بگم که چرا نباید ازش استفاده کنیم و در ادامه نحوه استفاده از poetry رو برای ستاپش، استفاده، dockerfile و pre-commit رو هم آوردم.

امیدوارم که مفید باشه.
👍72🔥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 برای این منظور استفاده کنیم:

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
👏5👍2🔥2
اگه میخواهید توی ادمین جنگو کلیدهای خارجی به صورت drop down نباشن از raw_id_fields استفاده کنید. یه آیکون جستجو کنار فیلد اضافه میکنه.

✔️سرعت لود صفحه بیشتر میشه. چون دیگه لازم نیست drop down لود بشه.
✔️توی فرم جدیدی که باز میشه میتونیم جستجو هم انجام بدیم.
👍236
Forwarded from Python Hints
#تجربه

دوره کتابخوانی خودمون
کتاب خوانی با چندتا از همکارای شرکت
مقاله خوانی و ...

باعث شد یک چیزی رو مطمئن بشم؛ ۹۸٪ کتاب خواندن رو بلد نیستیم
البته حق هم داریم، دانشگاه و مدرسه و ... باعث و بانی این موضوع بوده و البته اینکه هیچ کس بهمون یاد نداد یا بهمون نگفت که داریم اشتباه می‌خونیم.

شخصاً این مشکل رو داشتم.

برای مثال: اول هفته با یکی از همکاران شرکت شروع به خواندن یک کتاب کردیم (بخش تحقیقات)
من دیروز کتاب رو تموم کردم و شروع کردم به کد زدن (با اینکه من جاهای دیگه هم کار می‌کنم) وقتی 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)
هست و بعد سعی میکنی همین رو درک کنی حالا اگر نویسنده کتاب زحمت کشیده ی مثال هم زده و شما بلد نیستی نباید برات مهم باشه

چون اون مثال میشه حاشیه برای شما؛ چون تو اصلا بکند دولوپر نیستی.
👍11
پکیج django-axes برای مدیریت و کنترل ورود به سیستم در جنگو

✔️امکاناتش:
-تعیین محدودیت برای تلاش‌های ورود ناموفق به سیستم
-قابلیت بلاک کردن آی‌پی‌های مشکوک و حمله‌ کننده 😂
-امکان تنظیم تعداد تلاش‌های ناموفق برای ورود به سیستم و زمان‌های مجاز برای تلاش مجدد
-قابلیت ارسال ایمیل هشدار به مدیر سیستم در صورت امنیت کاهش یافته
-امکان تنظیم و سفارشی‌سازی پیام خطا برای صفحه ورود به سیستم

خودم فقط یکم داکیومنتش رو خوندم و یه ویدئو هم ازش دیدم. ولی تست اش نکردم.
اگه تجربه استفاده ازش دارید کامنت کنید لطفا
👍16
Forwarded from Abolfazl 🤘
الگوی طراحی facade ( فِساد خونده میشه)

یکی از الگوهای بسیار پر کاربرد که برای کاهش کاپلینگ بین کلاس ها ( یا حتی sub system ها ) استفاده میشه.
به طور کلی ما زمانی از الگوی فساد استفاده میکنیم که کلاس های مختلفی داریم و میخوایم این کلاس ها از طریق یک کلاس دیگه بدون دسترسی مستقیم به هم اطلاعات رد و بدل کنن.
مثال : ما دو کلاس food و drink داریم و یک کلاسorder
واضحه که ما میخوایم غذا یا نوشیدنی یا هر دو رو به هر حال سفارش بدیم.
یه راه اشتباه استفاده مستقیم از از این دو کلاس داخل کلاس order هست.
اما یه راه درست اینه که کلاس order اطلاعی از داخل اون دو کلاس نداشته باشه. یعنی یک interface تعریف شه و کلاس order از طریق اون interface کارشو انجام بده.


مثال دوم یه مثال از ریپازیتوری گیتهاب خودمه که تا حد قابل توجهی حق مطلب رو ادا میکنه
👍5😁3👎1
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
👍108👎3
2025/07/13 11:09:11
Back to Top
HTML Embed Code: