Devobin
48 subscribers
22 photos
3 videos
13 links
Download Telegram
Channel created
#Devocook

⚛️ Atomic Operations در جنگو: وقتی `save()` نجات نمی‌دهد

🧠 قسمت 1: مشکل کجاست؟
با view_count = 10 و دو کاربر همزمان:
product = Product.objects.get(id=1)
product.view_count += 1
product.save()

نتیجه: 11 (باید 12 باشد). Race Condition در محیط همزمان حتمی است.

⚛️ قسمت 2: راه حل اتمیک
استفاده از F expressions:
from django.db.models import F
Product.objects.filter(id=1).update(view_count=F('view_count') + 1)

این کار اتمیک و بدون تداخل است.

🧩 قسمت 3: مثال‌ها
# افزایش موجودی
Product.objects.filter(id=1).update(stock=F('stock') + 5)
# انتقال موجودی
Order.objects.filter(id=1).update(total_price=F('sub_total') + F('tax'))
# شرط مقایسه
Product.objects.filter(stock__gt=F('min_threshold'))


⚠️ قسمت 4: تله مهم – ترکیب با `save()`
#  اشتباه
product.view_count = F('view_count') + 1
product.save() # F آبجکت ذخیره می‌شود، نه مقدار

راه درست:
product.view_count = F('view_count') + 1
product.save(update_fields=['view_count'])
product.refresh_from_db()



❤️ @devobin
2👍1
#devocook

📍 کجا از میکروسرویس با Django استفاده کنیم؟

پروژه خیلی بزرگ شده و چند تیم روی آن کار می‌کنند
نیاز به دیپلوی و مقیاس‌دهی مستقل هر بخش دارید (مثل سرویس پرداخت)
می‌خواهید از فناوری‌های مختلف کنار Django استفاده کنید
خطای یک سرویس نباید کل سیستم را از کار بیندازد
پروژه کوچک یا متوسط است؟ مونولیت هنوز بهترین انتخاب است.

🚀 میکروسرویس با Django: از مونولیت به مقیاس‌پذیری

جنگو به تنهایی فریمورک مونولیتیک است، اما می‌تواند پایه عالی برای میکروسرویس باشد.


رویکرد درست:
هر سرویس یک پروژه Django + DRF مستقل است که:
دیتابیس خودش را دارد
با بقیه سرویس‌ها از طریق REST، gRPC یا Message Broker (RabbitMQ) ارتباط برقرار می‌کند
جداگانه دیپلوی و اسکیل می‌شود
مثال:
سرویس کاربران (Accounts)
سرویس سفارشات (Orders)
سرویس پرداخت (Payments)
ابزارهای کلیدی:
Django REST Framework
JWT برای احراز هویت
RabbitMQ / Redis برای ارتباطات ناهمگام
Docker + Kubernetes برای دیپلوی
API Gateway (Kong یا Traefik)
چالش‌های مهم:
تراکنش‌های توزیع‌شده
لاگ و نظارت متمرکز (ELK + Prometheus + Grafana)

@devobin
1
🚀 آپدیت جدید پروژه Map & Shop Management System

امروز چند قابلیت مهم و کاربردی به پروژه اضافه شد.

متأسفانه به دلیل محدودیت اینترنت نتونستم ویدئوی دمو رو آپلود کنم، اما تصاویر بخش‌های جدید پروژه رو به اشتراک گذاشتم.

تغییرات جدید:

سیستم مسیریابی ارتقا پیدا کرد و از مسیریابی ساده به پیدا کردن نزدیک‌ترین و بهینه‌ترین مسیر تغییر کرد.

هر فروشگاه اکنون می‌تواند فروشگاه آنلاین اختصاصی و کاملاً شخصی‌سازی‌شده خود را داخل پلتفرم داشته باشد.

پروژه به Web App (PWA) تبدیل شد و قابلیت نصب روی موبایل و دسکتاپ را پیدا کرد.

پنل کاربری مشتریان به‌صورت کامل پیاده‌سازی شد.

علاوه بر نمایش فروشگاه‌ها روی نقشه، امکان مشاهده آن‌ها به‌صورت لیست نیز اضافه شد.

امکان خرید همزمان از چند فروشگاه مختلف در یک فرآیند خرید فراهم شد.

لینک پست در لینکدین

https://www.linkedin.com/posts/mobin-hasanghasemi-067154384_django-python-programming-activity-7468375485329252352-gYmS?utm_source=share&utm_medium=member_desktop&rcm=ACoAAF60vE8B6N_WoAxH7cDsv2l-HMFO31av5F4


#FullStackDevelopment
#Programming
#Developer
#Devocook


سیستم تخفیف ناحیه‌ای


1- فرانت به سرور موقعیت کاربر رو میفرسته

2 -بک‌اند (بررسی داخل محدوده بودن)

مدل:
class Offer(models.Model):
polygon_data = models.JSONField() # GeoJSON مثل {"coordinates": [[lat,lng],...]}
discount = models.IntegerField()


منطق بررسی:
def is_point_in_polygon(lat, lng, polygon_coords):
# الگوریتم Ray-Casting
inside = False
n = len(polygon_coords)
for i in range(n):
x1, y1 = polygon_coords[i]
x2, y2 = polygon_coords[(i+1)%n]
if (y1 > lng) != (y2 > lng):
x_intersect = x1 + (lng - y1)*(x2 - x1)/(y2 - y1)
if x_intersect > lat:
inside = not inside
return inside


فیلتر نهایی:
def get_user_offers(user_lat, user_lng):
offers = Offer.objects.all()
result = []
for offer in offers:
coords = offer.polygon_data['coordinates'][0]
if is_point_in_polygon(user_lat, user_lng, coords):
result.append(offer)
return result
1
و به این فرمت به بک اند ارسال میشه
#Devocook
چرا باید فایل‌های بزرگ رو به تیکه‌های کوچیک تقسیم کنیم؟ 📉✂️
اینم یه مثال واقعی از پروژه‌مون:
قبل: چندتا فایل خیلی بزرگ و شلوغ (مثل admin.js که صدها خط کد توش قاطی همه چی شده بود)
بعد: شکستیمشون به فایل‌های تخصصی و مرتب:
admin-core.js
admin-dashboard.js
admin-helpers.js
admin-navigation.js
admin-notifications.js
...
نتیجه چی شد؟
کدخونی خیلی راحت‌تر
پیدا کردن باگ سریع‌تر
کار تیمی بدون درگیری مرج
عملکرد بهتر و نگهداری آسون
دیگه پول نریز تو جیب غول‌های هوش مصنوعی!


با این گرانی وحشتناک توکن‌های GPT، Claude و Gemini، واقعاً شد سخته هر روز کد بزنی و پروژه بچرخونی 😤
ولی خبر خوب اینه: مدل‌های چینی اومدن و دارن همه‌چیو می‌ترکونن!

پیشنهاد من بعد از تست :


من MiMo 2.5 Pro شیائومی رو امتحان کردم → از Claude 4.5 هم بهتر عمل کرد!
بک‌اند: تمیز، سریع، کم‌باگ
فرانت‌اند: عالی
ریسپانسیو کردن و UI/UX: فوق‌العاده

علاوه بر این MiMo، DeepSeek هم توکن‌هاش انقدر ارزونه که انگار مجانیه!

چطوری استفاده کنی؟
فقط کافیه این مدل‌ها رو به OpenCode وصل کنی → یه ایجنت کدنویسی شخصی داری که ۲۴ ساعته برات کار می‌کنه، بدون اینکه حساب بانکی‌ت خالی بشه 💰
اگر به دنبال ایده‌هایی برای توسعه پروژه‌های تمرینی هستید، پیشنهاد می‌کنم فرآیند خود را با الهام‌گیری از ایده‌های دیگران آغاز کنید و سپس به تدریج آن‌ها را بسط و گسترش دهید. این دقیقاً همان روشی است که من نیز پیاده‌سازی کرده‌ام. در ابتدا، ایده‌ای ساده از وب‌سایت Mobbin.com دریافت کردم و آن را با Google Maps API تلفیق کردم. هدف اولیه، ایجاد نقشه‌ای برای یک مسابقه بود که در آن فروشگاه‌ها مشخص شده باشند. اما پس از پایان مسابقه، قابلیت‌های متعددی به آن اضافه شد و امروزه به پروژه‌ای جامع تبدیل شده است که می‌توان با اطمینان گفت نمونه‌های مشابه آن (چه داخلی و چه خارجی) بسیار اندک هستند. نتیجه این تکامل را می‌توانید در لینک زیر مشاهده نمایید:
https://www.linkedin.com/posts/mobin-hasanghasemi-067154384_shopmap-django-ecommerce-activity-7471972775776362496-6F-w?utm_source=share&utm_medium=member_desktop&rcm=ACoAAF60vE8B6N_WoAxH7cDsv2l-HMFO31av5F4
4
قبلاً تو پروژه‌هام برای هر اپ جداگانه، فولدر templates و static می‌ساختم و همه چیز رو داخل همون اپ سرو می‌کردم.
ولی بعد از مدتی فهمیدم این روش برای پروژه‌های در حال رشد دردسر درست می‌کنه.
برای همین تصمیم گرفتم یه اپ اختصاصی به اسم frontend یا core بسازم و تمام فایل‌های تمپلیت، استاتیک، css، js و تصاویر رو اونجا متمرکز کنم.


نتیجه؟

مدیریت استاتیک و تمپلیت خیلی راحت‌تر شد

اضافه کردن و ویرایش فایل‌ها سریع‌تره

سرو کردن و collectstatic خیلی منظم‌تر شد
🔥3👏1
دوستانی که تو جنگو دنبال یادگیری و تمرین هستن تا سطح خودشون رو بالا ببرن میتونن این پروژه رو انجام بدن من ویدیو کارکرد پروژه رو تو لینک زیر میزارم میتونید ببینید و تمرین کنید و اگر هم سوالی داشتید از همونجا بپرسید

ارکان SkillBarter 🚀

ارکان یک پلتفرم مبادله مهارت است که افراد می‌تونن مهارت‌هاشون رو با سیستم اعتباری مبتنی بر زمان معاوضه کنن (بدون نیاز به پول). مثلاً انگلیسی یاد بدی و گیتار یاد بگیری، پایتون درس بدی و عکاسی یاد بگیری و غیره.
ویژگی‌های اصلی پیاده‌سازی شده:
سیستم پیشنهاد و پذیرش هوشمند
چت ریل‌تایم با امکان ارسال فایل
جلسات ویدیویی زنده (همراه با اشتراک صفحه)
سیستم اعتباری هوشمند با تراکنش‌های اتمیک
امتیازدهی و فیدبک متقابل
رابط کاربری زیبا با Tailwind CSS و پس‌زمینه سه‌بعدی Three.js
ساخته شده با: Django 5.2 + DRF + LiveKit + Tailwind CSS + Three.js

https://www.linkedin.com/posts/mobin-hasanghasemi-067154384_aeqaezaeuaepaetaevabraeuaewahyaebahy-aesaewaebaehaevabraewaeq-activity-7475652722831220737-9fWE?utm_source=share&utm_medium=member_desktop&rcm=ACoAAF60vE8B6N_WoAxH7cDsv2l-HMFO31av5F4
2