برنامه نویسی

راه اندازی جنگو و ساختن یک برنامه نظرسنجی: دو هفته آخر کار من

Summarize this content to 400 words in Persian Lang
در دو هفته گذشته، من روی راه اندازی جنگو از ابتدا و ساختن یک برنامه نظرسنجی ساده کار کرده ام. این مقاله شما را با تمام کارهایی که انجام دادم، از نصب پایتون و جنگو، راه‌اندازی یک محیط مجازی، ایجاد یک پروژه جدید و ساختن یک اپلیکیشن کاربردی به نام نظرسنجی، راهنمایی می‌کند.

1. راه اندازی پایتون و جنگوبرای شروع، مطمئن شدم که پایتون روی سیستم من نصب شده است. اگر هنوز آن را نصب نکرده اید، می توانید آن را از 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: جنگو را نصب کنیدپس از فعال شدن محیط، جنگو را نصب کردم.

pip install django

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس نصب را با اجرای:

django-admin –version

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. شروع یک پروژه جنگو جدید: mysiteاکنون زمان ایجاد پروژه جنگو من فرا رسیده بود. تصمیم گرفتم اسمش را mysite بگذارم.

django-admin startproject mysite
cd mysite

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این ساختار اساسی را برای پروژه جنگو با تنظیمات و تنظیمات ایجاد کرد.

3. ایجاد یک برنامه جنگو جدید: نظرسنجیپس از راه اندازی پروژه، یک برنامه جدید به نام polls ایجاد کردم که شامل تمام منطق و نماهای برنامه نظرسنجی من است.

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. نوشتن Views برای برنامه نظرسنجیمن چندین نما نوشتم تا بتوانم لیستی از سؤالات را نشان دهم، جزئیات سؤال را نشان دهم و نتایج رأی گیری را نشان دهم. این نماها مبتنی بر کلاس هستند و از نماهای عمومی داخلی جنگو استفاده می کنند.ایجاد نماها برای نظرسنجیسپس نماهایی را ایجاد کردم که نحوه نمایش داده ها به کاربر را کنترل می کنند. من از دیدگاه های عمومی جنگو برای ساده نگه داشتن چیزها استفاده کردم.

این فایل views.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: نتایج یک نظرسنجی را بعد از رای گیری نمایش می دهد. تابع vote() ارسال رای کاربر را مدیریت می کند.

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. ایجاد قالب برای Viewsدر نهایت، من قالب های HTML را برای نمایش سوالات و نتایج ایجاد کردم. قالب ها در پوشه polls/templates/polls/ قرار می گیرند.

index.html

{% if latest_question_list %}

{% else %}
No polls are available.
{% endif %}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

detail.html

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

result.html

{% 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/ لیست نظرسنجی ها نمایش داده شد و من می توانستم جزئیات را مشاهده کنم، رای بدهم و نتایج را ببینم.

طی دو هفته گذشته، یاد گرفتم که چگونه جنگو را راه اندازی کنم، یک پروژه ایجاد کنم و یک برنامه نظرسنجی کاملاً کارآمد بسازم. دیدن اینکه چگونه همه چیز در جنگو به هم متصل می شود، از مدل ها گرفته تا نماها و قالب ها، جالب بود. این یک تجربه عالی بوده است، و من هیجان زده هستم که درباره ویژگی های قدرتمند جنگو بیشتر بدانم!

در دو هفته گذشته، من روی راه اندازی جنگو از ابتدا و ساختن یک برنامه نظرسنجی ساده کار کرده ام. این مقاله شما را با تمام کارهایی که انجام دادم، از نصب پایتون و جنگو، راه‌اندازی یک محیط مجازی، ایجاد یک پروژه جدید و ساختن یک اپلیکیشن کاربردی به نام نظرسنجی، راهنمایی می‌کند.

1. راه اندازی پایتون و جنگو
برای شروع، مطمئن شدم که پایتون روی سیستم من نصب شده است. اگر هنوز آن را نصب نکرده اید، می توانید آن را از 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: جنگو را نصب کنید
پس از فعال شدن محیط، جنگو را نصب کردم.

pip install django

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس نصب را با اجرای:

django-admin --version

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. شروع یک پروژه جنگو جدید: mysite
اکنون زمان ایجاد پروژه جنگو من فرا رسیده بود. تصمیم گرفتم اسمش را mysite بگذارم.

django-admin startproject mysite
cd mysite

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این ساختار اساسی را برای پروژه جنگو با تنظیمات و تنظیمات ایجاد کرد.

3. ایجاد یک برنامه جنگو جدید: نظرسنجی
پس از راه اندازی پروژه، یک برنامه جدید به نام polls ایجاد کردم که شامل تمام منطق و نماهای برنامه نظرسنجی من است.

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. نوشتن Views برای برنامه نظرسنجی
من چندین نما نوشتم تا بتوانم لیستی از سؤالات را نشان دهم، جزئیات سؤال را نشان دهم و نتایج رأی گیری را نشان دهم. این نماها مبتنی بر کلاس هستند و از نماهای عمومی داخلی جنگو استفاده می کنند.
ایجاد نماها برای نظرسنجی
سپس نماهایی را ایجاد کردم که نحوه نمایش داده ها به کاربر را کنترل می کنند. من از دیدگاه های عمومی جنگو برای ساده نگه داشتن چیزها استفاده کردم.

این فایل views.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: نتایج یک نظرسنجی را بعد از رای گیری نمایش می دهد. تابع vote() ارسال رای کاربر را مدیریت می کند.

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. ایجاد قالب برای Views
در نهایت، من قالب های HTML را برای نمایش سوالات و نتایج ایجاد کردم. قالب ها در پوشه polls/templates/polls/ قرار می گیرند.

index.html

{% if latest_question_list %}
    
{% else %}
    

No polls are available.

{% endif %}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

detail.html



وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

result.html


    {% 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/ لیست نظرسنجی ها نمایش داده شد و من می توانستم جزئیات را مشاهده کنم، رای بدهم و نتایج را ببینم.

طی دو هفته گذشته، یاد گرفتم که چگونه جنگو را راه اندازی کنم، یک پروژه ایجاد کنم و یک برنامه نظرسنجی کاملاً کارآمد بسازم. دیدن اینکه چگونه همه چیز در جنگو به هم متصل می شود، از مدل ها گرفته تا نماها و قالب ها، جالب بود. این یک تجربه عالی بوده است، و من هیجان زده هستم که درباره ویژگی های قدرتمند جنگو بیشتر بدانم!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا