过去两周,我一直致力于从头开始设置 Django 并构建一个简单的投票应用程序。本文将引导您完成我所做的一切,从安装 Python 和 Django 开始,设置虚拟环境,创建新项目,以及构建一个名为 polls 的功能应用程序。
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 项目了。我决定将其命名为“我的网站”。
django-admin startproject mysite cd mysite
这创建了带有设置和配置的 Django 项目的基本结构。
3.创建一个新的 Django 应用程序: polls
设置项目后,我创建了一个名为 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/显示了投票列表,我可以查看详细信息、投票并查看结果。
在过去的两周里,我学习了如何设置 Django、创建项目以及构建功能齐全的民意调查应用程序。看到 Django 中的所有内容(从模型到视图再到模板)如何相互连接,真是令人着迷。这是一次很棒的经历,我很高兴能够了解更多有关 Django 强大功能的信息!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3