"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إعداد Django وإنشاء تطبيق استطلاع: آخر أسبوعين من العمل

إعداد Django وإنشاء تطبيق استطلاع: آخر أسبوعين من العمل

تم النشر بتاريخ 2024-10-31
تصفح:870

Setting Up Django and Building a Poll App: My Last Two Weeks of Work

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

1. إعداد بايثون وجانغو
للبدء، تأكدت من تثبيت Python على نظامي. إذا لم تكن قد قمت بتثبيته بعد، فيمكنك تنزيله من python.org.

الخطوة 1: تثبيت بايثون وإعداد بيئة افتراضية
أردت أن أبقي تبعيات مشروعي معزولة، لذلك استخدمت بيئة افتراضية.

# Install virtualenv if you don't have it
pip install virtualenv

# Create a virtual environment
virtualenv myenv

# Activate the environment
# On Windows:
myenv\Scripts\activate
# On macOS/Linux:
source myenv/bin/activate

الخطوة 2: تثبيت جانغو
بمجرد تنشيط البيئة، قمت بتثبيت Django.

pip install django

ثم قمت بتأكيد التثبيت عن طريق تشغيل:

django-admin --version

2. بدء مشروع جانغو جديد: mysite
الآن، حان الوقت لإنشاء مشروع Django الخاص بي. قررت أن أسميه موقعي.

django-admin startproject mysite
cd mysite

أدى هذا إلى إنشاء البنية الأساسية لمشروع Django مع الإعدادات والتكوينات.

3. إنشاء تطبيق Django جديد: استطلاعات الرأي
بعد إعداد المشروع، قمت بإنشاء تطبيق جديد يسمى استطلاعات الرأي، والذي سيحتوي على كل المنطق وطرق العرض الخاصة بتطبيق الاستطلاع الخاص بي.

python manage.py startapp polls

لقد أضفت التطبيق الجديد إلى INSTALLED_APPS في mysite/settings.py:

INSTALLED_APPS = [
    # other installed apps
    'polls',
]

4. تحديد النماذج
لقد بدأت بتحديد نموذجين: السؤال والاختيار. يحتوي السؤال على نص سؤال وتاريخ نشر، بينما يحتوي الاختيار على إشارة إلى سؤال ويخزن النص مع عدد الأصوات.

إليك ملفmodels.py الموجود في تطبيق الاستطلاعات:

# models.py
import datetime
from django.db import models
from django.contrib import admin
from django.utils import timezone

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.question_text

    @admin.display(
        boolean=True,
        ordering='pub_date',
        description='Published recently?',
    )
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) 



5. إنشاء قاعدة البيانات وتشغيل عمليات الترحيل
بعد ذلك، قمت بإنشاء قاعدة البيانات وتطبيق عمليات الترحيل:

python manage.py migrate

ثم قمت بإنشاء ملفات الترحيل لتطبيق الاستطلاعات:

python manage.py makemigrations polls
python manage.py migrate

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

إليك ملف view.py:

# views.py
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views import generic
from django.utils import timezone
from .models import Question, Choice

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list'

    def get_queryset(self):
        """Return the last five published questions."""
        return Question.objects.order_by('-pub_date')[:5]

class DetailView(generic.DetailView):
    model = Question
    template_name = 'polls/detail.html'

    def get_queryset(self):
        """Exclude questions that aren't published yet."""
        return Question.objects.filter(pub_date__lte=timezone.now())

class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'

def vote(request, question_id):
    return HttpResponse(f"You're voting on question {question_id}.")

  • IndexView: يعرض قائمة بأحدث الأسئلة.
  • DetailView: يعرض تفاصيل سؤال محدد واختياراته.
  • ResultsView: يعرض نتائج الاستطلاع بعد التصويت. تتولى وظيفة التصويت () إرسال تصويت المستخدم.

7. تكوين عناوين URL
لقد أضفت أنماط URL إلى ملف urls.py في تطبيق الاستطلاعات لربط كل عرض بعنوان URL محدد.

# urls.py
from django.urls import path
from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('/', views.DetailView.as_view(), name='detail'),
    path('/results/', views.ResultsView.as_view(), name='results'),
    path('/vote/', views.vote, name='vote'),
]

8. إنشاء قوالب للطرق العرض
وأخيرًا، قمت بإنشاء قوالب HTML لعرض الأسئلة والنتائج. يتم وضع القوالب في مجلد الاستطلاعات/القوالب/الاستطلاعات/.

index.html

{% if latest_question_list %}
    
{% else %}

No polls are available.

{% endif %}

detail.html

{% csrf_token %}

{{ question.question_text }}

{% if error_message %}

{{ error_message }}

{% endif %} {% for choice in question.choice_set.all %}
{% endfor %}

result.html

{{ question.question_text }}

    {% for choice in question.choice_set.all %}
  • {{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}
  • {% endfor %}
Vote again?

تشغيل التطبيق
لاختبار التطبيق، قمت بتشغيل خادم التطوير:

python manage.py runserver

أدى الانتقال إلى http://127.0.0.1:8000/polls/ إلى عرض قائمة الاستطلاعات، ويمكنني عرض التفاصيل والتصويت ورؤية النتائج.

على مدى الأسبوعين الماضيين، تعلمت كيفية إعداد Django، وإنشاء مشروع، وإنشاء تطبيق استطلاع يعمل بكامل طاقته. كان من الرائع أن نرى كيف يرتبط كل شيء في Django، من النماذج إلى طرق العرض إلى القوالب. لقد كانت هذه تجربة رائعة، وأنا متحمس لمعرفة المزيد عن ميزات Django القوية!

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/swahilipotdevs/setting-p-django-and-building-a-poll-app-my-mo-wo-weeks-of-work-16jl؟1 إذا كان هناك أي انتهاك ، يرجى الاتصال [email protected] لحذفها.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3