创建第一个应用
接着上一篇博文Django学习-02来创建第一个应用,我是按照官方文档来进行学习的,可能内容都会和文档差不多,大家可以自己去看官方文档。
在manage.py所在的目录下,输入命令python manage.py startapp polls
来创建第一个应用
将会创建一个polls目录,目录结构如下:
一、创建第一个视图
在polls/views.py里加入以下代码:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
如果想看见视图的效果,那么需要一个URL映射,则在polls目录下创建urls.py文件,在里面加入以下代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
在Hello/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),
]
通过命令python manage.py runserver
验证是否可以正常工作,正常运行会的到如下结果,因为我们前面在index视图中进行定义了的
二、数据库配置
数据库这里,我们需要安装合适的数据库,然后改变设置文件中的DATABASES’default’中的一些键值:
ENGINE的值可以选择:
- ‘django.db.backends.postgresql’
- ‘django.db.backends.mysql’
- ‘django.db.backends.sqlite3’
- ‘django.db.backends.oracle’
在INSTALLED_APPS默认包括了以下Django的自带应用,这些应用被默认启动是为了给常规项目提供方便。
'django.contrib.admin', # 管理员站点
'django.contrib.auth', # 认证授权系统
'django.contrib.contenttypes', #内容类型框架
'django.contrib.sessions', #会话框架
'django.contrib.messages', #消息框架
'django.contrib.staticfiles', #管理静态文件的框架
默认开启的某些应用需要至少一个数据表,所以使用以下的命令进行创建python manage.py migrate
,目前我也不知这个里面创建的表是否都需要,不过如果自己想添加其他的表,则可以在INSTALLED_APPS里进行设置,后续再深聊应该如何创建。
三、创建模型
在这个应用中,需创建两个模型:问题 Question 和选项 Choice。Question 模型包括问题描述和发布时间。Choice 模型有两个字段,选项描述和当前得票数。每个选项属于一个问题。
在polls/models.py文件中加入以下代码
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200) #字符字段
pub_date = models.DateTimeField('date published') #日期时间字段
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
四、激活模型
上面的一小段用于创建模型的代码给了 Django 很多信息,通过这些信息,Django 可以:
- 为这个应用创建数据库 schema(生成 CREATE TABLE 语句)。
- 创建可以与 Question 和 Choice 对象进行交互的 Python 数据库 API。
但是首先得把 polls 应用安装到我们的项目里。
为了工程中包含这个应用,需在配置类 INSTALLED_APPS中添加设置。因为 PollsConfig 类写在文件polls/apps.py中,所以它的点式路径是 ‘polls.apps.PollsConfig’。在文件 Hello/settings.py 中 INSTALLED_APPS 子项添加点式路径后,如下:
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
emmmm,现在Django项目会包含polls应用,运行下面的命令:python manage.py makemigrations polls
然后我得到了以下的输出:
通过运行 makemigrations 命令,Django 会检测我们对模型文件的修改(在这种情况下,我们已经取得了新的),并且把修改的部分储存为一次迁移。
我们看看迁移命令会执行哪些 SQL 语句。sqlmigrate 命令接收一个迁移的名称,然后返回对应的 SQL:python manage.py sqlmigrate polls 0001
,会得到如下的输出:
试试运行 python manage.py check
这个命令帮助检查项目中的问题,并且在检查过程中不会对数据库进行任何操作。
再次运行python manage.py migrate
命令,在数据库里创建新定义的模型的数据表:
数据库中得到了以下这些表
改变模型需要以下三步:
1、编辑 models.py 文件,改变模型。
2、运行 python manage.py makemigrations 为模型的改变生成迁移文件。
3、运行 python manage.py migrate 来应用数据库迁移。
五、初试API
运行以下命令python manage.py shell
我们通过编辑Question模型的代码(位于 polls/models.py 中)来修复这个问题。给Question 和 Choice 增加 __ str __() 方法。
from django.db import models
class Question(models.Model):
# ...
def __str__(self):
return self.question_text
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
Django 自动生成的 admin 里也使用__ str __() 方法来表示对象
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
保存文件然后通过 python manage.py shell
命令再次打开 Python 交互式命令行