用Django框架创建一个基本的投票应用程序
目录
Django框架:
投票应用构成:
1、一个让人们查看和投票的公共站点
2、一个让管理员能添加,修改和删除投票的管理站点
创建项目
django-admin startproject mysite
mysite:最外层的 mysite/ 根目录只是你项目的容器, 可以将它重命名为任何你喜欢的名称。里面一层的 mysite/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).
mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。 URL调度器
mysite/settings.py:Django 项目的配置文件。 Django 配置
创建投票应用
py manage.py startapp polls
编写视图
视图:一类具有相同功能和模板的网页的集合。 例如:在投票应用中需要下列几个视图: 问题索引页——展示最近的几个投票问题。
问题详情页——展示某个投票的问题和不带结果的选项列表。 问题结果页——展示某个投票的结果。
投票处理器——用于响应用户为某个问题的特定选项投票的操作。
打开 polls/views.py,编写以下代码
from django.http import HttpResponse
from .models import Question,Choice
def index(request):
# (不使用模板)在index()函数里插入新内容,让他能展示数据库里以发布日期排序的最近5个投票问题,以空格分割
latest_question_list=Question.objects.order_by('-pub_date')[:5]
output=', '.join([q.question_text for q in latest_question_list])
return HttpResponse(output)
将 URL 和视图关联
为了将 URL 和视图关联起来,Django 使用了 ‘URLconfs’ 来配置。URLconf 将 URL 模式映射到视图。
在polls目录里新建一个urls.py文件,并把这些视图添加进polls.urls模块里。
polls/urls.py
from django.urls import path
from . import views#.代表views文件与本文件在同一级目录
# 为该应用设置命名空间
app_name='polls'
#path()参数:
#route:是一个匹配 URL 的准则。当 Django 响应一个请求时,它会从 urlpatterns 的第一项开始,按顺序依次匹配列表中的项,直到找到匹配的项。
#view:当 Django 找到了一个匹配的准则,就会调用这个特定的视图函数,并传入一个 HttpRequest 对象作为第一个参数.
#name:为 URL 取名能使在 Django 的任意地方唯一地引用它,尤其是在模板中。
urlpatterns=[path('',views.index,name="index"),
path('<int:question_id>/',views.detail,name='detail'),
path('<int:question_id>/results/',views.results,name='results'),
path('<int:question_id>/vote/',views.vote,name='vote'),
]
在根 URLconf 文件中指定我们创建的 polls.urls 模块,将polls应用本身的url与polls应用内视图的url进行拼接(include())
mysite/urls.py
#在 mysite/urls.py 文件的 urlpatterns 列表里插入一个 include()
from django.contrib import admin
from django.urls import include,path
urlpatterns = [
path('polls/',include('polls.urls')),
path('admin/', admin.site.urls),
]
模板(templates)
页面的设计写死在视图函数的代码里的。如果你想改变页面的样子,你需要编辑 Python 代码。所以需要使用 Django 的模板系统将页面的设计从代码中分离出来。
eg.在polls 目录里创建一个 templates 目录,再在templates 目录里,再创建一个目录 polls,然后在其中新建一个文件index.html。因此,模板文件的路径应该是 polls/templates/polls/index.html
更新一下polls/views.py(使用模板)
from django.http import HttpResponse
from django.template import loader
from .models import Question
def index(request):
# 在index()函数里插入新内容,使其能展示数据库里以发布日期排序的最近5个投票问题。
latest_question_list=Question.objects.order_by('-pub_date')[:5]
#template=loader.get_template('polls/index.html')
context={'latest_list':latest_question_list}
#return HttpResponse(template.render(context,request))
#render:载入模板,填充上下文,再返回由它生成的 HttpResponse 对象
return render(request,'polls/index.html',context)
数据库配置
打开 mysite/settings.py
创建模型(数据库结构设计:创建数据库中的表)
在这个投票应用中,需要创建两个模型:问题 Question 和选项 Choice。Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。
编辑polls/models.py:
#每个模型都被表示为 django.db.models.Model的子类
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('date published')
#增加__str__()方法,django自动生成的admin里也用这个方法来表示对象
def __str__(self):
return self.question_text
class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text=models.CharField(max_length=200)
votes=models.IntegerField(default=0)
def __str__(self):
return self.choice_text
激活模型(保存数据库中的表)
首先需要把polls应用安装到项目里:
我们需要在配置类 INSTALLED_APPS 中添加设置。因为 PollsConfig 类写在文件 polls/apps.py 中,所以它的点式路径是 ‘polls.apps.PollsConfig’。
polls/apps.py:
在文件 mysite/settings.py 中 INSTALLED_APPS 子项添加点式路径。
运行 makemigrations 命令:
Django 会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次 迁移。
py manage.py makemigrations polls
运行migrate命令:
这个 migrate 命令选中所有还没有执行过的迁移(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。
py manage.py migrate
改变模型(创建数据库中的表并保存)需要这三步:
编辑 models.py 文件,改变模型(建表)。
运行 python manage.py makemigrations 为模型的改变生成迁移文件。
运行 python manage.py migrate 来应用数据库迁移。
数据库API(对数据库中的表进行增删改查)
打开python命令行:
py manage.py shell
字段查询:字段查询文档