4.创建应用程序
2022/1/9大约 3 分钟pythonweb框架
4.创建应用程序
python manage.py startapp learning_logs # 应用名:learning_logs, 会生成一个 learning_logs 的目录
看看 learning_logs/ 目录下有些什么东西:其实这些东西就是 Django 建立创建应用程序所需的基础设施。
- admin.py 管理模型(Model)
- migrations.py
- models.py 可以定义我们在应用程序中管理的数据,(要在这个文件里写代码了)
- test.py
- views.py
- init.py
定义首个数据模型 Topic(主题)
在 learning_logs/models.py 中定义一个 Topic 模型。告诉 Django 如何处理应用程序 (learning_logs) 中的数据
from django.db import models
# Create your models here.
class Topic(models.Model):
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.text
- text 是一个 Django 数据模型中的 CharFiled 实例,用来存放有限字符长度的数据,在后续 web 上新增一个 Topic 时,指定 Topic 名称
- date_added 是一个时间字段实例,在被创建 Topic 实例,自动添加创建的时间
- 改写
__str__
方法,创建好的 Topic 需要显示在 admin 页面上,就是返回 text 的内容
安装 application
在 Django 项目目录 learning_log/ 中,修改 settings.py,将 learning_logs 这个应用加进去
# --ship--
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# My apps
'learning_logs',
]
# --ship--
迁移模型 Topic 至数据库
接下来,让 Django 修改数据库,使其能够存储与模型 Topic 相关的信息
先用 manage.py 的 makemigrations 命令,让 Django 确认该如何修改数据,再通过 migrate 确认执行这种迁移
python manage.py makemigrations learning_logs
python manage.py migrate
python manage.py runserver
以后每当要修改 learning_logs 管理的数据时,都要走这三个步骤:
- 执行命令
manage.py makemigrations learning_logs
- 执行命令
manage.py migrate
- 重启 web server
manage.py runserver
向管理网站注册模型 Topic
登陆 admin 后台之后,可以看到有两个默认存在的两个模型,User 和 Group。在之前创建的模型,必须在 learning_logs/admin.py 中调用 admin.site.register() 来注册
from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic
admin.site.register(Topic)
再刷新 http://localhost:8000/admin ,发现多了 learning_logs 这个应用,并且下面跟着 Topic 模型

再定义另一个数据模型 Entry(条目)
继续在 learning_logs/models.py 加一个 Entry 类
class Entry(models.Model):
"""specific entries"""
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
return self.text[:50] + "..."
- topic 字段是一个外键实例,关联 Topic 模型,这样在新增一个 Entry 时,就可以在界面上从一个 Topic 列表中选择一个 Topic
- text 字段是一个 Django TextField 实例,就是用来存不限字数的文本
- date_added 如上面的 Topic 类一样,在被创建 Entry 实例时,自动添加创建的时间
- 添加一个 Meta 类,并指定 verbose_name_plural ,是为了告诉 Django,在 admin 页面上显示 Entries (Django 默认在单词后加 s ,就会显示 Entrys)
- 改写
__str__
方法,在创建完成一个 Entry 实例后,在管理页面上只会显示前50个字符,加上 ... 三个字符,统一所有 Entry 实例的显示长度
再迁移模型 Entry 至数据库
python manage.py makemigrations learning_logs
python manage.py migrate
python manage.py runserver
再向管理网站注册模型 Entry
修改 learning_logs/admin.py
from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic, Entry
admin.site.register(Topic)
admin.site.register(Entry)