السلام عليكم يا جماعة بعد فترة من التعلم، حبيت أشارككم أول مشروع متكامل ليا باستخدام Django المشروع اسمه Expense Tracker - تطبيق لتتبع المصروفات الشخصية، وفيه: نظام تسجيل دخول وإنشاء حساب (Authentication)
إضافة/تعديل/حذف المصروفات
Dashboard فيها إحصائيات (إجمالي المصروفات، مصروفات الشهر، عدد التصنيفات...)
تصنيف المصروفات (طعام، نقل، فواتير، ترفيه...)
Dark/Light Mode
تصميم responsive باستخدام Bootstrap
لوحة تحكم Admin مخصصة (Django Jazzmin) لإدارة المستخدمين والمصروفات
ملحوظة: المشروع شغال محلي (Local) لحد دلوقتي، ومفيش لينك مباشر للموقع لأن النشر (Deployment) على دومين حقيقي يحتاج استضافة مدفوعة، وأنا لسه في البداية وبتعلم بالتدريج. ممكن أعرف رأيكم في:
أفضل وأرخص طريقة لعمل deploy للمشروع كبداية (PythonAnywhere / Render / Railway)؟ نصائحكم لمطور Django لسه في بداية الطريق؟ أي ملاحظات على الكود أو الفكرة بشكل عام؟
وعليكم السلام ورحمة الله وبركاته بشمهندس رامي،ما شاء الله، بداية قوية وممتازة جداً لمشروع متكامل (Full-Stack) باستخدام Django. اختيارك لـ Jazzmin ممتع بصرياً، وإضافة الـ Dark Mode تظهر اهتمامك بتجربة المستخدم (UX).كمطور Django، إليك إجابات تقنية مباشرة وعميقة على أسئلتك لخطوتك القادمة:1. أفضل وأرخص طريقة للـ Deployment (حل مشكلة التكلفة):لست بحاجة لاستضافة مدفوعة كبداية، يمكنك النشر مجاناً 100%، وأنصحك بـ Render أو Railway وتجنب PythonAnywhere لأنها تقيدك في التحديثات. ولكن انتبه للخطوات التالية لكي ينجح النشر:قاعدة البيانات: لا تستخدم SQLite على السيرفر لأن بياناتها ستمحى تلقائياً عند نوم السيرفر (Ephemeral storage). قم بإنشاء قاعدة بيانات PostgreSQL مجانية على منصة مثل Neon.tech أو Supabase وربطها بملف settings.py عبر مكتبة dj-database-url.الملفات الثابتة: استخدم مكتبة WhiteNoise لكي يقوم Django بتقديم ملفات الـ CSS والـ Bootstrap مباشرة دون الحاجة لسيرفر Nginx مستقل.الأمان: تأكد من تحويل DEBUG = False وفصل الـ SECRET_KEY في ملف .env باستخدام python-dotenv قبل الرفع على GitHub.2. مشكلة تقنية سيواجهها التطبيق مستقبلاً وكيف تحلها:بما أن التطبيق يتتبع حسابات مالية ومصروفات، بمجرد أن يكبر حجم البيانات لكل مستخدم، ستواجه بطئاً كبيراً في تحميل الـ Dashboard أثناء حساب المجاميع والتصنيفات.الحل من الآن: استخدم الـ db_index=True في حقول الـ user والـ category داخل الـ Models لتسريع عمليات الفلترة ($Queries$).اعتمد على الـ Aggregation والـ Annotation من Django ORM لحساب الإجمالي مباشرة داخل قاعدة البيانات بدلاً من حسابها عبر لغتك البرمجية بايثون لتوفير استهلاك الذاكرة.3. نصيحة لمستقبلك في Django:لا تتوقف عند النمط التقليدي (Monolithic). خطوتك القادمة الاحترافية هي تعلم Django Rest Framework (DRF) لتحويل مشروعك هذا إلى (API)، ثم بنائه كـ تطبيق موبايل بـ Flutter أو واجهة بـ React. هذا ما يطلبه سوق العمل حالياً بكثافة.كمطور زميل، لو واجهتك أي مشكلة أثناء ضبط المستودع أو ربط الـ PostgreSQL على Render، يسعدني جداً مساعدتك لتخطيها بنجاح ومتابعة كود المشروع معك. بالتوفيق يا بطل!"