القائمة الرئيسية

الصفحات

كيفية برمجة تطبيق محفظة مالية باستخدام Python Django

How-to-code-financial-wallet-app-in-Python-Django، How to code financial wallet app using Python and Django، تطبيق محفظة مالية، برمجة تطبيق محفظة مالية، Python Django، برمجة تطبيق محفظة مالية باستخدام Python Django، برمجة تطبيق محفظة مالية Django، تطوير تطبيق إدارة مالية Python، إنشاء تطبيق تتبع إنفاق Django، واجهة مستخدم تطبيق محفظة Django، نماذج Django للمعاملات والحسابات، عرض الرصيد والمعاملات Django، إضافة معاملات جديدة Django، حفظ بيانات المعاملات Django، نشر تطبيق محفظة Django، إعداد Django لتطبيق مالي، إنشاء مشروع Django للمحفظة، نماذج Django للحسابات، نماذج Django للمعاملات، علاقات Django ForeignKey، قوالب Django لعرض الرصيد، قوالب Django لعرض المعاملات، نماذج Django Forms لإضافة المعاملات، طرق عرض Django لقائمة الحسابات، طرق عرض Django لتفاصيل الحساب، طرق عرض Django لإضافة المعاملات، مسارات URL Django لتطبيق المحفظة، Django Admin لإدارة الحسابات والمعاملات، مصادقة المستخدم Django، أمان تطبيقات Django المالية، نشر تطبيقات Django باستخدام Gunicorn و Nginx، كيفية برمجة تطبيق محفظة مالية باستخدام Python Django، برمجة تطبيق محفظة مالية Django، تطوير تطبيق إدارة مالية Python، نشر تطبيقات Django باستخدام Gunicorn و Nginx،



كيفية برمجة تطبيق محفظة مالية باستخدام Python Django



في عصرنا الرقمي، أصبحت تطبيقات المحافظ المالية أداة أساسية لإدارة أموالنا بكفاءة.
 إذا كنت تطمح لتعلم كيفية برمجة تطبيق محفظة مالية باستخدام 
Python Django، فأنت في المكان الصحيح. هذا الدليل الشامل سيأخذك 
خطوة بخطوة خلال عملية إنشاء تطبيق بسيط ولكنه فعال لتتبع وإدارة المعاملات المالية.
 سنتناول كل شيء بدءًا من تصميم واجهة مستخدم سهلة الاستخدام لعرض
 الأرصدة والمعاملات، مرورًا بتعريف نماذج البيانات لتخزين معلومات الحسابات 
والمعاملات، وصولًا إلى تمكين المستخدمين من إضافة معاملات جديدة و حفظ بيانات المعاملات، 
وأخيرًا نشر التطبيق ليصبح متاحًا للاستخدام. انطلق معنا في هذه الرحلة لتعلم كيفية
 برمجة تطبيق محفظة مالية باستخدام Python Django بطريقة منظمة وآمنة.


خطوات برمجة تطبيق محفظة مالية باستخدام Python Django



الخطوة 1: إعداد بيئة التطوير وإنشاء مشروع Django

* تأكد من تثبيت Python و pip على جهازك. ثم قم بتثبيت Django:
pip install django
--
* أنشئ مشروع Django جديدًا باسم financial_wallet:
django-admin startproject financial_wallet
cd financial_wallet
--
* أنشئ تطبيقًا داخل المشروع باسم wallet:
python manage.py startapp wallet
--

الخطوة 2: تعريف نماذج البيانات (Models)

في ملف wallet/models.py، سنقوم بتعريف نماذج البيانات الأساسية للحسابات والمعاملات:


    Python

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Account(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    balance = models.DecimalField(max_digits=15, decimal_places=2, default=0.00)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.name} ({self.user.username})"

class Transaction(models.Model):
    TRANSACTION_TYPES = [
        ('income', 'إيداع'),
        ('expense', 'سحب'),
    ]

    account = models.ForeignKey(Account, on_delete=models.CASCADE, related_name='transactions')
    transaction_type = models.CharField(max_length=10, choices=TRANSACTION_TYPES)
    amount = models.DecimalField(max_digits=15, decimal_places=2)
    description = models.CharField(max_length=255, blank=True, null=True)
    transaction_date = models.DateTimeField(default=timezone.now)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.get_transaction_type_display()} - {self.amount} ({self.account.name})"

    def save(self, *args, **kwargs):
        if self.transaction_type == 'income':
            self.account.balance += self.amount
        elif self.transaction_type == 'expense':
            self.account.balance -= self.amount
        self.account.save()
        super().save(*args, **kwargs)



* أضف تطبيق wallet إلى قائمة INSTALLED_APPS في
 ملف financial_wallet/settings.py:
Python

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'wallet', # إضافة تطبيق wallet هنا
]
--

* قم بإنشاء التغييرات وتنفيذها:
python manage.py makemigrations wallet
python manage.py migrate
--

الخطوة 3: إنشاء واجهة المستخدم (Templates)

أنشئ مجلدًا باسم templates داخل مجلد تطبيق wallet. ثم أنشئ ملفات HTML التالية:
* wallet/templates/wallet/account_list.html: لعرض قائمة الحسابات والرصيد:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>محفظتي المالية</title>
</head>
<body>
    <h1>حساباتي</h1>
    <ul>
        {% for account in accounts %}
            <li>
                <h2>{{ account.name }}</h2>
                <p>الرصيد: {{ account.balance }}</p>
                <p><a href="{% url 'account_detail' account.id %}">عرض التفاصيل</a></p>
            </li>
        {% empty %}
            <li>لا يوجد لديك حسابات حاليًا.</li>
        {% endfor %}
    </ul>
    <p><a href="{% url 'add_transaction' %}">إضافة معاملة جديدة</a></p>
</body>
</html>
--

* wallet/templates/wallet/account_detail.html: 




لعرض تفاصيل الحساب والمعاملات:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>{{ account.name }}</title>
</head>
<body>
    <h1>{{ account.name }}</h1>
    <p>الرصيد الحالي: {{ account.balance }}</p>

    <h2>المعاملات</h2>
    <ul>
        {% for transaction in account.transactions.all %}
            <li>
                {{ transaction.get_transaction_type_display }} - {{ transaction.amount }}
                {% if transaction.description %}
                    ({{ transaction.description }})
                {% endif %}
                ({{ transaction.transaction_date }})
            </li>
        {% empty %}
            <li>لا توجد معاملات لهذا الحساب حتى الآن.</li>
        {% endfor %}
    </ul>
    <p><a href="{% url 'add_transaction' %}">إضافة معاملة جديدة</a></p>
    <p><a href="{% url 'account_list' %}">العودة إلى قائمة الحسابات</a></p>
</body>
</html>
--

* wallet/templates/wallet/add_transaction.html: 
نموذج لإضافة معاملة جديدة:

HTML

<!DOCTYPE html>
<html>
<head>
    <title>إضافة معاملة</title>
</head>
<body>
    <h1>إضافة معاملة جديدة</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">حفظ المعاملة</button>
    </form>
    <p><a href="{% url 'account_list' %}">العودة إلى قائمة الحسابات</a></p>
</body>
</html>
--

الخطوة 4: إنشاء النماذج (Forms)

في ملف wallet/forms.py (إذا لم يكن موجودًا، قم بإنشائه)، 
سنقوم بإنشاء نموذج لإضافة المعاملات:


   Python

from django import forms
from .models import Transaction, Account

class AddTransactionForm(forms.ModelForm):
    account = forms.ModelChoiceField(queryset=Account.objects.none())
    transaction_type = forms.ChoiceField(choices=Transaction.TRANSACTION_TYPES)
    amount = forms.DecimalField(max_digits=15, decimal_places=2)
    description = forms.CharField(max_length=255, required=False)
    transaction_date = forms.DateTimeField(widget=forms.DateTimeInput(attrs={'type': 'datetime-local'}))

    class Meta:
        model = Transaction
        fields = ['account', 'transaction_type', 'amount', 'description', 'transaction_date']

    def __init__(self, user, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['account'].queryset = Account.objects.filter(user=user)


الخطوة 5: إنشاء طرق العرض (Views)

في ملف wallet/views.py، سنقوم بإنشاء طرق العرض التي
 تتحكم في منطق التطبيق وتعرض القوالب:


    Python

from django.shortcuts import render, redirect, get_object_or_404
from .models import Account, Transaction
from .forms import AddTransactionForm
from django.contrib.auth.decorators import login_required

@login_required
def account_list(request):
    accounts = Account.objects.filter(user=request.user)
    return render(request, 'wallet/account_list.html', {'accounts': accounts})

@login_required
def account_detail(request, account_id):
    account = get_object_or_404(Account, id=account_id, user=request.user)
    return render(request, 'wallet/account_detail.html', {'account': account})

@login_required
def add_transaction(request):
    if request.method == 'POST':
        form = AddTransactionForm(request.user, request.POST)
        if form.is_valid():
            transaction = form.save(commit=False)
            transaction.user = request.user # قد لا تحتاجها إذا كان الحساب مرتبطًا بالمستخدم
            transaction.save()
            return redirect('account_list')
    else:
        form = AddTransactionForm(request.user)
    return render(request, 'wallet/add_transaction.html', {'form': form})


الخطوة 6: تعريف مسارات URL (URLs)

* في ملف wallet/urls.py (إذا لم يكن موجودًا، قم بإنشائه):
Python

from django.urls import path
from . import views

urlpatterns = [
    path('', views.account_list, name='account_list'),
    path('account/<int:account_id>/', views.account_detail, name='account_detail'),
    path('transaction/add/', views.add_transaction, name='add_transaction'),
]
--

* قم بتضمين مسارات تطبيق wallet في ملف financial_wallet/urls.py:
Python

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('wallet/', include('wallet.urls')),
    path('accounts/', include('django.contrib.auth.urls')), # لتسجيل الدخول والخروج
    path('', redirect('/wallet/')), # إعادة التوجيه إلى قائمة الحسابات عند الوصول إلى الجذر
]
--

الخطوة 7: إنشاء واجهة إدارة (Django Admin)

لتسهيل إدارة الحسابات والمعاملات، قم بتسجيل النماذج في 
Django Admin في ملف wallet/admin.py :


    Python

from django.contrib import admin
from .models import Account, Transaction

@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
    list_display = ('name', 'user', 'balance', 'created_at')
    list_filter = ('user',)
    search_fields = ('name', 'user__username')

@admin.register(Transaction)
class TransactionAdmin(admin.ModelAdmin):
    list_display = ('account', 'transaction_type', 'amount', 'transaction_date', 'created_at')
    list_filter = ('account', 'transaction_type')
    search_fields = ('description', 'account__name')



* قم بإنشاء مستخدم مسؤول إذا لم يكن لديك واحدًا بالفعل:
python manage.py createsuperuser
--
ثم قم بتشغيل خادم التطوير وقم بزيارة http://127.0.0.1:8000/admin/ لتسجيل الدخول وإدارة الحسابات والمعاملات.

الخطوة 8: حفظ النقاط (بيانات الحسابات والمعاملات)

يتم حفظ بيانات الحسابات والمعاملات تلقائيًا في قاعدة البيانات عند إنشائها
 وتعديلها من خلال واجهة Django Admin أو من خلال تفاعلات المستخدمين
 مع النماذج في الواجهة الأمامية (مثل إضافة معاملة). لاحظ أننا قمنا بتضمين
 منطقًا في طريقة حفظ نموذج Transaction لتحديث رصيد الحساب المرتبط تلقائيًا.
 Django ORM يتولى عملية التفاعل مع قاعدة البيانات وحفظ البيانات بناءً على تعريف النماذج والعلاقات بينها.

الخطوة 9: نشر التطبيق

لنشر تطبيق Django، يمكنك اتباع الخطوات العامة التالية 
(باستخدام Gunicorn و Nginx كمثال):
* تثبيت Gunicorn:
pip install gunicorn
--
اختبار Gunicorn: انتقل إلى مجلد مشروع Django وقم بتشغيل:
gunicorn financial_wallet.wsgi:application
--
* تثبيت Nginx:
sudo apt update
sudo apt install nginx
--
* تكوين Nginx: قم بإنشاء ملف تكوين جديد للموقع الخاص بك في
 /etc/nginx/sites-available/ (مثل financial_wallet) وقم بربطه
 بـ /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;
        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، بدءًا من إنشاء واجهة المستخدم لعرض الحسابات 
والمعاملات، مرورًا بتعريف نماذج البيانات و النماذج لتمكين المستخدمين من
 إضافة المعاملات، وصولًا إلى حفظ هذه البيانات في قاعدة البيانات وتقديم نظرة 
عامة على عملية نشر التطبيق. يمكنك الآن تطوير هذا التطبيق بإضافة المزيد 
من الميزات مثل دعم أنواع مختلفة من الحسابات، وتقارير الإنفاق، والمزيد من التحليلات المالية.
 تذكر دائمًا التركيز على أمان التطبيق المالي وحماية بيانات المستخدمين.



جدول المحتويات