
كيفية برمجة تطبيق تسجيل مصاريف يومية باستخدام Python Django
تتبع المصاريف اليومية يساعد الأفراد على إدارة أموالهم بكفاءة أكبر.
إذا كنت تطمح لتعلم كيفية برمجة تطبيق تسجيل مصاريف يومية بسيط باستخدام
Python Django، فأنت في المكان الصحيح. هذا الدليل الشامل سيأخذك خطوة
بخطوة خلال عملية إنشاء تطبيق ويب سهل الاستخدام لتسجيل وتتبع نفقاتك.
سنتناول كل شيء بدءًا من تصميم واجهة مستخدم بسيطة لإدخال وعرض المصروفات،
مرورًا بتعريف نماذج البيانات لتخزين معلومات المصروفات والفئات والمستخدمين،
وصولًا إلى تمكين المستخدمين من إضافة مصروفات جديدة و حفظ بيانات المصروفات،
وتنفيذ وظائف التصفية حسب التاريخ والفئة، وإنشاء نظام مستخدمين أساسي، وأخيرًا
نشر التطبيق ليصبح متاحًا للاستخدام الشخصي أو مشاركته. انطلق معنا في هذه الرحلة
لتعلم كيفية برمجة تطبيق تسجيل مصاريف يومية باستخدام Python Django بطريقة عملية ومنظمة.
خطوات برمجة تطبيق تسجيل مصاريف يومية باستخدام Python Django
الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django
* تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django:
pip install django
--
* أنشئ مشروع Django جديدًا باسم expense_tracker:
django-admin startproject expense_tracker
cd expense_tracker
--
* أنشئ تطبيقًا داخل المشروع باسم expenses:
python manage.py startapp expenses
--
الخطوة 2: تعريف نماذج البيانات (Models)
في ملف expenses/models.py، سنقوم بتعريف نماذج البيانات الأساسية للمصروفات والفئات:
Python
from django.db import modelsfrom django.contrib.auth.models import Userfrom django.utils.text import slugify
class Category(models.Model): name = models.CharField(max_length=100, unique=True) slug = models.SlugField(max_length=100, unique=True, blank=True)
class Meta: verbose_name_plural = 'Categories'
def __str__(self): return self.name
def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name) super().save(*args, **kwargs)
class Expense(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE) amount = models.DecimalField(max_digits=10, decimal_places=2) description = models.CharField(max_length=255, blank=True, null=True) date = models.DateField() created_at = models.DateTimeField(auto_now_add=True)
class Meta: ordering = ['-date']
def __str__(self): return f"{self.date} - {self.category.name} - {self.amount}"
--
* أضف تطبيق expenses إلى قائمة INSTALLED_APPS في
ملف expense_tracker/settings.py:
Python
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'expenses', # إضافة تطبيق expenses هنا
]
--
* قم بإنشاء التغييرات وتنفيذها :
python manage.py makemigrations expenses
python manage.py migrate
--
الخطوة 3: إنشاء واجهة المستخدم (Templates)
أنشئ مجلدًا باسم templates داخل مجلد تطبيق expenses.
ثم أنشئ ملفات HTML التالية:
* expenses/templates/expenses/expense_list.html:
لعرض قائمة المصروفات ونموذج الإضافة:
HTML
<!DOCTYPE html><html><head> <title>تتبع المصاريف</title></head><body> <h1>مصاريفك اليومية</h1> <ul> {% for expense in expenses %} <li>{{ expense.date }} - {{ expense.category.name }} - {{ expense.amount }} {% if expense.description %} ({{ expense.description }}) {% endif %}</li> {% empty %} <li>لا توجد مصروفات مسجلة حتى الآن.</li> {% endfor %} </ul>
<h2>إضافة مصروف جديد</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">إضافة مصروف</button> </form></body></html>
--
الخطوة 4: إنشاء النماذج (Forms)
في ملف expenses/forms.py (إذا لم يكن موجودًا، قم بإنشائه):
Python
from django import forms
from .models import Expense
class AddExpenseForm(forms.ModelForm):
class Meta:
model = Expense
fields = ['category', 'amount', 'description', 'date']
widgets = {
'date': forms.DateInput(attrs={'type': 'date'})
}
--
الخطوة 5: إنشاء طرق العرض (Views)
* في ملف expenses/views.py :
Python
from django.shortcuts import render, redirectfrom .models import Expensefrom .forms import AddExpenseFormfrom django.contrib.auth.decorators import login_required
@login_requireddef expense_list(request): expenses = Expense.objects.filter(user=request.user).order_by('-date') form = AddExpenseForm() if request.method == 'POST': form = AddExpenseForm(request.POST) if form.is_valid(): expense = form.save(commit=False) expense.user = request.user expense.save() return redirect('expense_list') return render(request, 'expenses/expense_list.html', {'expenses': expenses, 'form': form})
--
الخطوة 6: تعريف مسارات URL (URLs)
في ملف expenses/urls.py (إذا لم يكن موجودًا، قم بإنشائه):
Python
from django.urls import path
from . import views
urlpatterns = [
path('', views.expense_list, name='expense_list'),
]
--
* قم بتضمين مسارات تطبيق expenses في ملف expense_tracker/urls.py :
Python
from django.contrib import admin
from django.urls import path, include
from django.shortcuts import redirect
urlpatterns = [
path('admin/', admin.site.urls),
path('expenses/', include('expenses.urls')),
path('accounts/', include('django.contrib.auth.urls')), # لتسجيل الدخول والخروج
path('', lambda request: redirect('/expenses/')), # إعادة التوجيه إلى قائمة المصروفات عند الوصول إلى الجذر
]
--
تأكد من إضافة 'django.contrib.auth' إلى INSTALLED_APPS في settings.py.
الخطوة 7: إنشاء واجهة إدارة (Django Admin)
لتسهيل إدارة الفئات والمصروفات، قم بتسجيل النماذج في Django Admin في
ملف expenses/admin.py:
Python
from django.contrib import adminfrom .models import Expense, Category
@admin.register(Category)class CategoryAdmin(admin.ModelAdmin): list_display = ('name', 'slug') prepopulated_fields = {'slug': ('name',)}
@admin.register(Expense)class ExpenseAdmin(admin.ModelAdmin): list_display = ('date', 'user', 'category', 'amount', 'description', 'created_at') list_filter = ('user', 'category', 'date') search_fields = ('description',)
--
* قم بإنشاء مستخدم مسؤول إذا لم يكن لديك واحدًا بالفعل:
python manage.py createsuperuser
--
ثم قم بتشغيل خادم التطوير وقم بزيارة http://127.0.0.1:8000/admin/
لتسجيل الدخول وإدارة الفئات والمصروفات.
الخطوة 8: حفظ بيانات المصروفات
يتم حفظ بيانات المصروفات عند تقديم نموذج إضافة المصروف
(AddExpenseForm) في طريقة العرض expense_list. يتم إنشاء كائن
Expense جديد مرتبط بالمستخدم والفئة والمبلغ والتاريخ والوصف.
Django ORM يتولى عملية التفاعل مع قاعدة البيانات وحفظ البيانات بناءً على تعريف النماذج والعلاقات بينها.
الخطوة 9: نشر التطبيق
لنشر تطبيق Django، يمكنك اتباع الخطوات العامة التالية
(باستخدام Gunicorn و Nginx كمثال):
* تثبيت Gunicorn :
pip install gunicorn
--
* اختبار Gunicorn : انتقل إلى مجلد مشروع Django وقم بتشغيل :
gunicorn expense_tracker.wsgi:application
--
* تثبيت Nginx :
sudo apt update
sudo apt install nginx
--
* تكوين Nginx : قم بإنشاء ملف تكوين جديد للموقع الخاص بك في /etc/nginx/sites-available/ (مثل expense_tracker) وقم بربطه بـ /etc/nginx/sites-enabled/.
مثال على التكوين:
Nginx
server {
listen 80;
server_name your_domain_or_IP;
location /static/ {
alias /path/to/your/project/staticfiles/;
}
location / {
proxy_pass [http://127.0.0.1:8000](http://127.0.0.1:8000);
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
--
* استبدل your_domain_or_IP بعنوان نطاقك أو عنوان IP الخاص
بالخادم، و /path/to/your/project/staticfiles/ بالمسار الفعلي لمجلد الملفات الثابتة .
* جمع الملفات الثابتة :
python manage.py collectstatic
--
تكوين نظام إدارة العمليات (مثل systemd) لتشغيل Gunicorn تلقائيًا.
* إعادة تشغيل Nginx :
sudo systemctl restart nginx
--
تأمين الخادم الخاص بك (مثل إعداد جدار حماية وتكوين HTTPS باستخدام Let's Encrypt).
* الخلاصة :
لقد استعرضنا الخطوات الأساسية لبرمجة تطبيق تسجيل مصاريف
يومية بسيط باستخدام Python Django، بدءًا من إنشاء واجهة مستخدم أساسي
ة لعرض وإضافة المصروفات، مرورًا بتعريف نماذج البيانات للمصروفات والفئات،
وصولًا إلى تمكين المستخدمين من إضافة المصروفات و حفظ بياناتها وعرضها وتصفيتها،
وتقديم نظرة عامة على عملية نشر التطبيق. يمكنك الآن تطوير هذا التطبيق بإضافة
المزيد من الميزات مثل عرض رسوم بيانية للمصروفات، وتصدير البيانات، وإضافة أنواع أخرى من الفلاتر،
وتخصيص واجهة المستخدم بشكل أكبر. تذكر دائمًا التركيز على أمان التطبيق وحماية بيانات المستخدمين.