지난 2주 동안 저는 처음부터 Django를 설정하고 간단한 설문 조사 애플리케이션을 구축하는 작업을 해왔습니다. 이 기사에서는 Python 및 Django 설치부터 시작하여 가상 환경 설정, 새 프로젝트 생성, 설문 조사라는 기능적인 앱 구축까지 제가 한 모든 작업을 안내합니다.
1. Python 및 Django 설정
시작하려면 Python이 내 시스템에 설치되어 있는지 확인했습니다. 아직 설치하지 않았다면 python.org에서 다운로드할 수 있습니다.
1단계: Python 설치 및 가상 환경 설정
프로젝트 종속성을 격리된 상태로 유지하고 싶어서 가상 환경을 사용했습니다.
# 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 설치
환경이 활성화된 후 Django를 설치했습니다.
pip install django
그런 다음 다음을 실행하여 설치를 확인했습니다.
django-admin --version
2. 새로운 Django 프로젝트 시작하기: mysite
이제 Django 프로젝트를 만들 차례입니다. 나는 그것을 mysite라고 부르기로 결정했습니다.
django-admin startproject mysite cd mysite
설정 및 구성이 포함된 Django 프로젝트의 기본 구조가 생성되었습니다.
3. 새로운 Django 앱 만들기: polls
프로젝트를 설정한 후 설문 조사 애플리케이션에 대한 모든 논리와 보기가 포함된 설문 조사라는 새 앱을 만들었습니다.
python manage.py startapp polls
mysite/settings.py의 INSTALLED_APPS에 새 앱을 추가했습니다:
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 migrate6. 설문조사 앱에 대한 보기 작성
나는 질문 목록 표시, 질문 세부 정보 표시 및 투표 결과 표시를 처리하기 위해 여러 뷰를 작성했습니다. 이러한 뷰는 Django에 내장된 일반 뷰를 사용하는 클래스 기반입니다.
설문 조사에 대한 보기 만들기
그런 다음 데이터가 사용자에게 표시되는 방식을 제어하는 뷰를 만들었습니다. 나는 일을 단순하게 유지하기 위해 Django의 일반 뷰를 사용했습니다.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}.")
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 템플릿을 만들었습니다. 템플릿은 polls/templates/polls/ 폴더에 있습니다.
index.html
{% if latest_question_list %}
No polls are available.
{% endif %}detail.html
result.html
{{ question.question_text }}
애플리케이션 실행
애플리케이션을 테스트하기 위해 개발 서버를 실행했습니다.
python manage.py runserver
http://127.0.0.1:8000/polls/로 이동하면 설문조사 목록이 표시되며 세부정보를 확인하고 투표하고 결과를 확인할 수 있습니다.
지난 2주 동안 저는 Django를 설정하고, 프로젝트를 만들고, 완벽하게 작동하는 설문조사 앱을 구축하는 방법을 배웠습니다. 모델부터 뷰, 템플릿까지 Django에서 모든 것이 어떻게 연결되는지 보는 것은 흥미로웠습니다. 이것은 정말 좋은 경험이었으며, Django의 강력한 기능에 대해 더 많이 알게 되어 기쁩니다!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3