دليل تفاعلي خطوة بخطوة للمبتدئين تمامًا
مبتدئ الوقت المقدر: 90 دقيقةDjango هو إطار عمل ويب عالي المستوى بلغة Python يشجع على التطوير السريع والتصميم النظيف العملي. إنه يهتم بالكثير من متاعب تطوير الويب، مما يتيح لك التركيز على كتابة التطبيق دون الحاجة لإعادة اختراع العجلة.
يتبع Django فلسفة "شامل المكونات" ويوفر تقريبًا كل ما قد يحتاجه المطورون "جاهزًا للاستخدام". وبما أن كل ما تحتاجه هو جزء من المنتج الواحد، فإنه يعمل بسلاسة، ويتبع مبادئ تصميم متسقة، ويوفر وثائق شاملة ومحدّثة.
يتبع Django نمط العمارة Model-View-Template (MVT)، وهو نسخة معدلة من نمط Model-View-Controller (MVC):
هيكل البيانات وقاعدة البيانات
منطق العمل ومعالجة البيانات
منطق العرض وإظهار المحتوى
التوجيه والتعيين
اختبر فهمك لأساسيات Django:
ما هو النمط المعماري الذي يتبعه Django؟
ما سنقوم ببنائه: في هذا الدرس، سننشئ تطبيق تدوين ملاحظات بسيط حيث يمكن للمستخدمين إنشاء وعرض وقائمة للملاحظات. كل ملاحظة ستحتوي على عنوان ومحتوى.
قبل بدء بناء تطبيق Django، نحتاج إلى إعداد بيئة التطوير. يشمل ذلك تثبيت Python، إنشاء بيئة افتراضية، وتثبيت Django.
Django هو إطار عمل Python، لذا نحتاج أولاً إلى تثبيت Python. يتطلب Django 4.0+ Python 3.8 أو أعلى.
تحقق من التثبيت بفتح الطرفية أو موجه الأوامر وكتابة:
python --versionيجب أن ترى شيئًا مثل Python 3.10.0 (قد يختلف الإصدار لديك).
تتيح لك البيئات الافتراضية وجود بيئات Python معزولة لمشاريع مختلفة حتى لا تتداخل تبعياتها مع بعضها البعض.
افتح الطرفية وانتقل إلى المجلد الذي ترغب في إنشاء مشروعك فيه:
cd path/to/your/projects/folderقم بإنشاء مجلد جديد لمشروعك:
mkdir mynotes
cd mynotesقم بإنشاء بيئة افتراضية:
python -m venv venvpython3 -m venv venvقم بتفعيل البيئة الافتراضية:
venv\Scripts\activatesource venv/bin/activateستعرف أن البيئة الافتراضية مفَعلة عندما ترى (venv) في بداية موجه الأوامر.
مع تفعيل البيئة الافتراضية، قم بتثبيت Django:
pip install djangoتحقق من التثبيت:
python -m django --versionيجب أن ترى رقم إصدار Django، مثل 4.2.1 (قد يختلف الإصدار لديك).
نصيحة احترافية: قم دائمًا بتفعيل بيئتك الافتراضية قبل العمل على مشروعك. إذا أغلقت الطرفية وعدت لاحقًا، ستحتاج إلى إعادة تفعيلها.
لماذا يجب عليك استخدام بيئة افتراضية لمشاريع Django الخاصة بك؟
في Django، يمثل المشروع التطبيق الويب بأكمله، بينما يمثل التطبيق وحدة داخل المشروع تتولى وظيفة محددة. يمكن أن يحتوي المشروع على عدة تطبيقات.
مع تفعيل بيئتك الافتراضية، نفذ الأمر التالي:
django-admin startproject mynotes .
لاحظ النقطة . في النهاية التي تخبر Django بإنشاء المشروع في الدليل الحالي بدلاً من إنشاء مجلد جديد.
الآن، دعونا ننشئ تطبيقًا داخل مشروعنا:
python manage.py startapp notes
افتح ملف mynotes/settings.py وأضف تطبيقك إلى قائمة INSTALLED_APPS:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'notes', # Add this line
]
يستخدم Django الترحيلات لمتابعة التغييرات التي تجريها على النماذج وتحديث مخطط قاعدة البيانات وفقًا لذلك. دعونا نشغل الترحيلات الأولية:
python manage.py migrate
يقوم هذا الأمر بتطبيق الترحيلات المدمجة للتطبيقات الافتراضية المذكورة في INSTALLED_APPS.
دعونا نتأكد من أن كل شيء يعمل عن طريق تشغيل خادم التطوير:
python manage.py runserverافتح متصفح الويب وانتقل إلى http://127.0.0.1:8000/. يجب أن ترى صفحة ترحيب Django.
اضغط على CTRL+C في الطرفية لإيقاف الخادم عند الانتهاء.
ملاحظة: لا تستخدم خادم التطوير في بيئة الإنتاج، فهو غير مصمم ليكون آمنًا أو مستقرًا أو فعالًا.
ما العلاقة بين مشاريع Django والتطبيقات؟
النماذج هي المصدر الوحيد والنهائي للمعلومات حول بياناتك. تحتوي على الحقول الأساسية والسلوكيات الخاصة بالبيانات التي تقوم بتخزينها. في تطبيق تدوين الملاحظات لدينا، نحتاج إلى نموذج يمثل الملاحظة.
افتح ملف notes/models.py وأضف الشيفرة التالية:
from django.db import models
from django.utils import timezone
class Note(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
تقوم هذه الشيفرة بـ:
Note يحتوي على حقول العنوان (title)، المحتوى (content)، ووقت الإنشاء (created_at)created_at ليأخذ القيمة الافتراضية وهي الوقت الحالي__str__ التي تُعيد العنوان عند تحويل الكائن إلى سلسلة نصيةتُستخدم الترحيلات في Django لمتابعة التغييرات التي تجريها على النماذج وتحديث مخطط قاعدة البيانات وفقًا لذلك. أولاً، نقوم بإنشاء ملف ترحيل:
python manage.py makemigrations notes
ينشئ هذا الأمر ملف ترحيل في مجلد notes/migrations/. الآن، قم بتطبيق الترحيل لتحديث قاعدة البيانات:
python manage.py migrateيأتي Django مع واجهة إدارة مدمجة يمكننا استخدامها لإدارة بياناتنا. دعونا نسجل نموذجنا فيها.
افتح ملف notes/admin.py وأضف الشيفرة التالية:
from django.contrib import admin
from .models import Note
admin.site.register(Note)
للوصول إلى واجهة الإدارة، نحتاج إلى إنشاء حساب مدير:
python manage.py createsuperuserاتبع التعليمات لإنشاء اسم مستخدم، بريد إلكتروني، وكلمة مرور.
قم بتشغيل خادم التطوير:
python manage.py runserverزر http://127.0.0.1:8000/admin/ وسجّل الدخول باستخدام بيانات مدير الحساب التي أنشأتها.
يجب أن ترى واجهة إدارة Django مع نموذج Notes مدرج. جرب إضافة بعض الملاحظات للاختبار.
تعريف نموذج Note
إنشاء ملفات الترحيل
تطبيقها على قاعدة البيانات
إنشاء/تحديث الجداول
بعد تغيير نموذج، ما الأمران اللذان يجب تشغيلهما لتحديث قاعدة البيانات؟
الآن بعد أن قمنا بإعداد النموذج، نحتاج إلى إنشاء العروض (views)، القوالب (templates)، وروابط URL لعرض الملاحظات للمستخدمين.
أولاً، قم بإنشاء هيكل دليل للقوالب:
mkdir -p notes/templates/notesيبحث Django عن القوالب في مجلد "templates" داخل كل تطبيق. نضيف مجلد "notes" إضافي داخل مجلد القوالب لتفادي التعارض مع قوالب تطبيقات أخرى.
قم بإنشاء قالب أساسي في notes/templates/notes/base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}My Notes App{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="{% url 'home' %}">My Notes</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{% url 'home' %}">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'note_list' %}">All Notes</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'note_new' %}">New Note</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-4">
{% block content %}
{% endblock %}
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
يتضمن هذا القالب الأساسي Bootstrap للتنسيق ويعرّف الكتل التي ستملأها القوالب الفرعية.
قم بإنشاء الملف notes/templates/notes/home.html:
{% extends 'notes/base.html' %}
{% block title %}Home | My Notes App{% endblock %}
{% block content %}
<div class="jumbotron">
<h1 class="display-4">Welcome to My Notes App</h1>
<p class="lead">A simple Django application to manage your notes.</p>
<hr class="my-4">
<p>Get started by creating a new note or viewing your existing notes.</p>
<a class="btn btn-primary btn-lg" href="{% url 'note_new' %}" role="button">Create New Note</a>
<a class="btn btn-secondary btn-lg" href="{% url 'note_list' %}" role="button">View All Notes</a>
</div>
{% endblock %}
قم بإنشاء الملف notes/templates/notes/note_list.html:
{% extends 'notes/base.html' %}
{% block title %}All Notes | My Notes App{% endblock %}
{% block content %}
<h1>All Notes</h1>
{% if notes %}
<div class="row">
{% for note in notes %}
<div class="col-md-4 mb-4">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{ note.title }}</h5>
<p class="card-text">{{ note.content|truncatechars:100 }}</p>
<p class="text-muted">Created: {{ note.created_at|date:"F j, Y" }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<p>No notes yet. <a href="{% url 'note_new' %}">Create one</a>!</p>
{% endif %}
{% endblock %}
افتح الملف notes/views.py وأضف الشيفرة التالية:
from django.shortcuts import render
from .models import Note
def home(request):
return render(request, 'notes/home.html')
def note_list(request):
notes = Note.objects.all().order_by('-created_at')
return render(request, 'notes/note_list.html', {'notes': notes})
تُنشئ هذه الدوال عرضين: واحد للصفحة الرئيسية وآخر لقائمة الملاحظات.
قم بإنشاء ملف جديد notes/urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('notes/', views.note_list, name='note_list'),
]
افتح الملف mynotes/urls.py وعدله كما يلي:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('notes.urls')),
]
يقوم هذا الأمر بإدراج روابط URL الخاصة بالتطبيق ضمن إعدادات روابط URL للمشروع.
قم بتشغيل خادم التطوير:
python manage.py runserverزر http://127.0.0.1:8000/ لرؤية الصفحة الرئيسية، وhttp://127.0.0.1:8000/notes/ لرؤية قائمة الملاحظات.
ملاحظة: قد لا يعمل رابط "New Note" بعد لأننا لم ننشئ العرض الخاص به بعد. سنقوم بذلك في القسم التالي.
يطلب المستخدم رابط URL
يعالج الطلب
يتفاعل مع قاعدة البيانات
يقوم بعرض HTML
يعيد الاستجابة للمستخدم
ما هو الوسم (tag) المستخدم للوراثة من القالب الأساسي؟
الآن، دعونا ننشئ نموذجاً يسمح للمستخدمين بإضافة ملاحظات جديدة إلى التطبيق.
قم بإنشاء ملف جديد notes/forms.py:
from django import forms
from .models import Note
class NoteForm(forms.ModelForm):
class Meta:
model = Note
fields = ['title', 'content']
widgets = {
'title': forms.TextInput(attrs={'class': 'form-control'}),
'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 5}),
}
يُنشئ هذا النموذج نموذجًا مستندًا إلى نموذج Note يحتوي على حقول العنوان والمحتوى، كما يضيف فئات Bootstrap لتنسيق النموذج.
قم بإنشاء الملف notes/templates/notes/note_form.html:
{% extends 'notes/base.html' %}
{% block title %}New Note | My Notes App{% endblock %}
{% block content %}
<h1>{% if form.instance.id %}Edit Note{% else %}New Note{% endif %}</h1>
<form method="post">
{% csrf_token %}
<div class="mb-3">
<label for="{{ form.title.id_for_label }}" class="form-label">Title</label>
{{ form.title }}
{% if form.title.errors %}
<div class="text-danger">{{ form.title.errors }}</div>
{% endif %}
</div>
<div class="mb-3">
<label for="{{ form.content.id_for_label }}" class="form-label">Content</label>
{{ form.content }}
{% if form.content.errors %}
<div class="text-danger">{{ form.content.errors }}</div>
{% endif %}
</div>
<button type="submit" class="btn btn-primary">Save</button>
<a href="{% url 'note_list' %}" class="btn btn-secondary">Cancel</a>
</form>
{% endblock %}
حدث ملف notes/views.py لإضافة عرض لإنشاء الملاحظات:
from django.shortcuts import render, redirect
from .models import Note
from .forms import NoteForm
def home(request):
return render(request, 'notes/home.html')
def note_list(request):
notes = Note.objects.all().order_by('-created_at')
return render(request, 'notes/note_list.html', {'notes': notes})
def note_new(request):
if request.method == "POST":
form = NoteForm(request.POST)
if form.is_valid():
form.save()
return redirect('note_list')
else:
form = NoteForm()
return render(request, 'notes/note_form.html', {'form': form})
يضيف هذا العرض وظيفة جديدة:
حدث ملف notes/urls.py لإضافة رابط لإنشاء الملاحظات:
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('notes/', views.note_list, name='note_list'),
path('notes/new/', views.note_new, name='note_new'),
]
شغل خادم التطوير:
python manage.py runserverزر http://127.0.0.1:8000/notes/new/ للاطلاع على النموذج الخاص بإنشاء ملاحظة جديدة.
جرب إنشاء ملاحظة جديدة وتحقق من ظهورها في قائمة الملاحظات.
أمن نماذج Django: لا تنسَ أن وسم {% csrf_token %} في قالب النموذج مهم للأمان؛ فهو يضيف رمز حماية من هجمات Cross-Site Request Forgery.
عند إنشاء نموذج بناءً على نموذج بيانات (Model)، من أي فئة يجب أن ترث؟
لقد أدخلنا Bootstrap مسبقًا في القالب الأساسي، لكن دعونا نحسن التنسيق أكثر لجعل التطبيق يبدو أكثر أناقة.
أضف بعض CSS المخصص إلى القالب الأساسي. حدث الملف notes/templates/notes/base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}My Notes App{% endblock %}</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
body {
padding-bottom: 2rem;
background-color: #f8f9fa;
}
.navbar {
margin-bottom: 2rem;
box-shadow: 0 2px 4px rgba(0,0,0,.1);
}
.card {
box-shadow: 0 2px 5px rgba(0,0,0,.1);
transition: all 0.3s ease;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0,0,0,.15);
}
.jumbotron {
background-color: #ffffff;
border-radius: 0.5rem;
padding: 2rem;
box-shadow: 0 2px 5px rgba(0,0,0,.1);
}
.footer {
margin-top: 3rem;
padding-top: 1.5rem;
padding-bottom: 1.5rem;
background-color: #343a40;
color: #ffffff;
}
</style>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container">
<a class="navbar-brand" href="{% url 'home' %}">
<i class="fas fa-sticky-note me-2"></i>My Notes
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="{% url 'home' %}">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'note_list' %}">All Notes</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'note_new' %}">New Note</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container mt-4">
{% block content %}
{% endblock %}
</div>
<footer class="footer mt-auto">
<div class="container text-center">
<p>My Notes App - Built with Django</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/js/all.min.js"></script>
</body>
</html>
يحتوي هذا القالب الأساسي على Bootstrap ويعرّف الكتل التي سيتم تعبئتها من قبل القوالب الفرعية.
قم بتحسين الملف notes/templates/notes/note_list.html:
{% extends 'notes/base.html' %}
{% block title %}All Notes | My Notes App{% endblock %}
{% block content %}
<div class="d-flex justify-content-between align-items-center mb-4">
<h1>All Notes</h1>
<a href="{% url 'note_new' %}" class="btn btn-primary">
<i class="fas fa-plus me-2"></i>New Note
</a>
</div>
{% if notes %}
<div class="row">
{% for note in notes %}
<div class="col-md-4 mb-4">
<div class="card h-100">
<div class="card-header bg-light d-flex justify-content-between align-items-center">
<span class="text-muted">{{ note.created_at|date:"F j, Y" }}</span>
</div>
<div class="card-body">
<h5 class="card-title">{{ note.title }}</h5>
<p class="card-text">{{ note.content|truncatechars:100 }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="alert alert-info">
<i class="fas fa-info-circle me-2"></i>No notes yet. <a href="{% url 'note_new' %}" class="alert-link">Create one</a>!
</div>
{% endif %}
{% endblock %}
قم بتحسين الملف notes/templates/notes/home.html:
{% extends 'notes/base.html' %}
{% block title %}Home | My Notes App{% endblock %}
{% block content %}
<div class="jumbotron text-center">
<h1 class="display-4 mb-4">Welcome to My Notes App</h1>
<p class="lead">A simple Django application to manage your notes</p>
<hr class="my-4">
<div class="row mt-5 justify-content-center">
<div class="col-md-4 mb-4">
<div class="card text-center h-100">
<div class="card-body">
<i class="fas fa-plus-circle fa-4x mb-3 text-success"></i>
<h3 class="card-title">Create</h3>
<p class="card-text">Create new notes with titles and content</p>
<a href="{% url 'note_new' %}" class="btn btn-success">New Note</a>
</div>
</div>
</div>
<div class="col-md-4 mb-4">
<div class="card text-center h-100">
<div class="card-body">
<i class="fas fa-list-ul fa-4x mb-3 text-primary"></i>
<h3 class="card-title">View</h3>
<p class="card-text">View all your saved notes in one place</p>
<a href="{% url 'note_list' %}" class="btn btn-primary">View Notes</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
قم بتحسين الملف notes/templates/notes/note_form.html:
{% extends 'notes/base.html' %}
{% block title %}New Note | My Notes App{% endblock %}
{% block content %}
<div class="card">
<div class="card-header">
<h2>{% if form.instance.id %}Edit Note{% else %}New Note{% endif %}</h2>
</div>
<div class="card-body">
<form method="post">
{% csrf_token %}
<div class="mb-3">
<label for="{{ form.title.id_for_label }}" class="form-label">Title</label>
{{ form.title }}
{% if form.title.errors %}
<div class="text-danger">{{ form.title.errors }}</div>
{% endif %}
</div>
<div class="mb-3">
<label for="{{ form.content.id_for_label }}" class="form-label">Content</label>
{{ form.content }}
{% if form.content.errors %}
<div class="text-danger">{{ form.content.errors }}</div>
{% endif %}
</div>
<div class="d-flex mt-4">
<button type="submit" class="btn btn-primary me-2">
<i class="fas fa-save me-2"></i>Save
</button>
<a href="{% url 'note_list' %}" class="btn btn-secondary">
<i class="fas fa-times me-2"></i>Cancel
</a>
</div>
</form>
</div>
</div>
{% endblock %}
شغل خادم التطوير:
python manage.py runserverزر http://127.0.0.1:8000/ لرؤية التطبيق المُنسَّق.
نصيحة التنسيق: يوفر Bootstrap العديد من المكونات والأدوات بشكل جاهز، ولكن يمكنك دومًا إضافة CSS مخصص لتكييف الشكل حسب احتياجاتك. أضف أنماطك الخاصة في قسم <style> من القالب الأساسي أو في ملف CSS منفصل.
دعونا نتأكد من أن التطبيق يعمل بشكل صحيح ونختبر جميع الميزات التي قمنا بتنفيذها.
قم بتشغيل خادم التطوير:
python manage.py runserverسيبدأ الخادم على http://127.0.0.1:8000/
زر الصفحة الرئيسية وتحقق من عرضها بشكل صحيح مع روابط إنشاء وعرض الملاحظات.
تأكد من أن زري "New Note" و"View Notes" يعملان بشكل صحيح.
انقر على "New Note" وأنشئ ملاحظة بعنوان ومحتوى.
بعد الإرسال، تأكد من إعادة التوجيه إلى صفحة قائمة الملاحظات وظهور الملاحظة الجديدة في القائمة.
زر صفحة قائمة الملاحظات وتحقق من عرض جميع الملاحظات بشكل صحيح.
أنشئ عدة ملاحظات وتأكد من ظهورها جميعًا في القائمة.
تحقق من أن روابط التنقل في الرأس تعمل بشكل صحيح وتنقلك إلى الصفحات المناسبة.
حاول إرسال نموذج الملاحظة مع ترك الحقول فارغة للتأكد من أن التحقق من الصحة يعمل بشكل صحيح.
تحقق من عرض رسائل الخطأ بشكل مناسب.
Django Admin: لا تنسَ أنه يمكنك أيضًا استخدام واجهة الإدارة على http://127.0.0.1:8000/admin/ لإدارة ملاحظاتك. سجّل الدخول باستخدام بيانات مدير الحساب التي أنشأتها مسبقًا.
الاختبار على متصفحات مختلفة: من الأفضل اختبار تطبيقك على متصفحات مختلفة لضمان التوافق. جرّب فتح التطبيق في Chrome، Firefox، Safari، أو Edge للتأكد من أنه يظهر ويعمل بشكل صحيح عبرها.
بعد بناء واختبار تطبيق Django الخاص بك، قد ترغب في نشره لجعله متاحًا للآخرين. إليك نظرة عامة موجزة على خيارات النشر.
قبل النشر، تحتاج إلى إجراء بعض التغييرات على إعداداتك:
# في settings.py
# اضبط DEBUG على False في بيئة الإنتاج
DEBUG = False
# عيّن ALLOWED_HOSTS إلى نطاقك (أو النطاقات الخاصة بك)
ALLOWED_HOSTS = ['yourdomain.com', 'www.yourdomain.com']
# قم بتكوين قاعدة بيانات للإنتاج (مثال: PostgreSQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost',
'PORT': '',
}
}
# تعيين SECRET_KEY آمن
SECRET_KEY = 'your-secret-key' # استخدم المتغيرات البيئية لهذا في الواقع
# تكوين الملفات الثابتة
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
منصة مناسبة للمبتدئين مصممة خصيصًا لتطبيقات Python و Django.
منصة كخدمة (PaaS) تتيح للمطورين بناء وتشغيل التطبيقات وإدارتها.
مزود خدمة سحابة يقدم Droplets (آلات افتراضية) ومنصة التطبيقات.
منصات سحابية كبرى تقدم خدمات متنوعة لنشر التطبيقات الوب.
خيارات متعددة متاحة
python manage.py collectstaticتوصية بالنشر: للمبتدئين، يُعدّ PythonAnywhere أو Heroku خيارات جيدة بفضل سهولة إعدادها وتوفر وثائق مفصلة. مع ازدياد خبرتك، يمكنك استكشاف خيارات أخرى تمنحك سيطرة أكبر على بيئتك.
تهانينا! لقد قمت ببناء تطبيق ويب بسيط باستخدام Django يسمح للمستخدمين بـ:
على طول الطريق، تعلمت:
استخدم هذه القائمة للتأكد من إكمال جميع الخطوات اللازمة:
لقد بنيت تطبيق Django أساسي، ولكن هناك العديد من الطرق لتطويره:
السماح للمستخدمين بالتسجيل وتسجيل الدخول والحصول على ملاحظاتهم الخاصة.
تنفيذ وظائف لتحديث وحذف الملاحظات.
السماح للمستخدمين بتصنيف الملاحظات وتصفية حسب التصنيف.
تنفيذ محرر نص منسق لمحتوى الملاحظة.
السماح للمستخدمين بالبحث في ملاحظاتهم.
إنشاء واجهة برمجة تطبيقات REST لتطبيق الملاحظات باستخدام Django REST framework.
لقد أكملت درس Django وبنيت أول تطبيق ويب خاص بك!
واصل استكشاف Django وبناء تطبيقات أكثر تعقيدًا لتعزيز مهاراتك.