18.2python manage.py startapp learning_logs
命令startapp appname让Django创建应用程序所需要的基础设施
18.2.1定义模型
models.py
---------
from django.db import models
#在这里创建模型
class Topic(models.Model): #创建Topic类,继承Django中定义模型基本功能的一个类:Model
text=models.CharField(max_length=200) #CharField是有字符或文本组成的数据。储存少量名称、标题、城市时可以使用。定义它时必须告诉Django在数据库预留多少空间,这里讲max_length设为200个字符。
date_added=models.DateTimeField(auto_now_add=True) #记录日期和时间的数据
def __str__(self):
return self.text #返回储存在属性text中的字符串
18.2.2激活模型
要使用模型,必须让Django将应用程序包含到项目中,为此打开settings.py
--snip--
INSTALLED APPS=(
--snip--
'django.contrib.staticfiles',
#my app
'learning_logs',
)
--snip--
然后需要让Django修改数据库,使他能够储存与模型Topic相关的信息。在终端中执行下列命令:
python manage.py makemigrations learning_logs
命令makemigrations让Django确定如何修改数据库。
然后应用迁移,让Django来修改数据库:
python manage.py migrate
以后在需要修改“学习笔记”管理的数据时,都采取下面的三个步骤:修改models.py;对learning_logs调用migrations;让Django迁移项目。
18.2.3 Django管理网站
1.创建超级用户
终端中输入:python manage.py createsuperuser
2.向管理网站注册模型
admin.py
from django.contrib import admin
#log you own model
form learning_logs.models import Topic,Entry #这些代码导入我们要注册的模型Topic
admin.site.register(Topic) #让Djang通过管理网站管理我们的模型
3.添加主题(略)
18.2.4定义模型Entry
models.py
from django.db import models
class Topic(model.Model):
--snip--
class Entry(models.Model):
#学到的有关某个主题的具体知识
topic=models.ForeignKey(Topic,on_delete=models.CASCADE) #foreign实例
text=models.TextField() #TextField实例,不限制长度
date_add =models.DateTimeField(auto_now_add=True)
class Meta(): #嵌套使用Meta类,用于储存模型的额外信息
verbose_name_plural='entries'
def __str__(self):
return self.text[:50]+"..." #只显示前50个字符
18.2.5迁移模型Entry
python manage.py makemigrations learning_logs
python manage.py migrate
18.2.6向网站注册Entry
from django.contrib import admin
#log you own model
form learning_logs.models import Topic,Entry #这些代码导入我们要注册的模型Topic
admin.site.register(Topic) #让Djang通过管理网站管理我们的模型
admin.site.register(Entry) #让Djang通过管理网站管理我们的模型
18.2.7Django shell
输入数据之后,可以通过交互式终端会话以编程方式查看这些数据了。这种交互式环境称为Django shell,是测试项目和排除其故障的理想之地。具体见python编程从入门到实践P367