参考书籍:《Python编程从入门到实践》—Eric Matthes
-
在虚拟环境中执行命令
python manage.py startapp learning_logs命令让Django建立创建应用程序所需的基础设施。在learning_logs下创建了文件models.py, admin.py, views.py。我们将使用models.py来定义我们要在应用程序中管理的数据。
定义模型
目前在models.py中的内容仅一条语句from django.db import models
我们需要在模块中创建自己的模型。模型的作用是告诉Django如何处理应用程序中存储的数据。在代码层面上,我们把模型抽象为一个类。
添加代码:
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是一个由字符或文本组成的数据-CharField,主要用来存储较少量的文本信息,比如名称、标题和城市等。
- 属性date_added是一个记录日期和时间的数据-DateTimeField。参数auto_now_add=True的意思是每当用户创建新主题时,都会让Django这个属性自动设置为当前时间。w
- _str_()方法会打印出在这个方法中return的内容。在这里打印出属性text的值。
激活模型
- 要使用模型,必须要让Django将应用程序包含到项目中。打开learning_log/learning_log/setting.py文件,显示如下片段:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#my Apps
'learning_logs' #注:需要添加该语句
]
在末行加上'learning_logs'。
-
接下来需要让Django修改数据库,使其能够存储模型Topic的相关信息。
在终端中执行命令:
python manage.py makemigrations learning_logs成功提示:
Migrations for 'learning_logs':
0001_initial.py:
- Create model Topic
-
接下来应用迁移让Django替我们修改数据库
python manage.py migrate成功提示:
Running migrations: Rendering model states... DONE Applying learning_logs.0001_initial... OK
之后每次需要修改管理的数据时,都要经过以上三个步骤。①修改models.py ②调用makemigrations ③让Django迁移项目。
管理网站
创建超级用户
python manage.py createsuperuser
向管理网站注册模型
在创建应用程序时,models.py所在目录下还有一个名为admin.py的文件。
修改admin.py的代码以向管理网站注册我们之前的模型Topic
from django.contrib import admin
# Register your models here.
from learning_logs.models import Topic
admin.site.register(Topic)
添加主题
向管理网站注册Topic后,我们来添加第一个主题。为此,单击Topics进入主题网页,它几乎是空的,这是因为我们还没有添加任何主题。单击Add,你将看到一个用于添加新主题的表单。 在第一个方框中输入Chess,再单击Save,这将返回到主题管理页面,其中包含刚创建的主题。
定义模型Entry
在model.py中增加Entry类
class Entry(models.Model):
"""学到的有关某个主题的具体知识"""
topic = models.ForeignKey(Topic)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
"""返回模型的字符串表示"""
return self.text[:50] + "..."
- 继承了Django基类Model。
- topic是一个ForeignKey(外键)实例,它是一个数据库术语,引用了数据库中的另一条记录。代码将每个条目关联到特定的主题。每个主题创建时都给它分配了一个键(ID)。
- text是一个TextField实例且不受字长限制
- 嵌套的Meta类存储用于管理模型的额外信息。
- __str__返回的是text前50个字符加上一串省略号,用来显示简介。
接下来迁移模型即可
python manage.py makemigrations learning_logs
python manage.py migrate
向管理网站注册Entry
修改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)
返回到http://localhost/admin/,你将看到learning_logs下列出了Entries。单击Entries的Add链接, 或者单击Entries再选择Add entry。你将看到一个下拉列表,让你能够选择要为哪个主题创建条目, 还有一个用于输入条目的文本框。
效果图:

本文介绍如何使用Django框架创建一个学习日志应用,包括在虚拟环境中执行命令创建应用,定义模型,激活模型,管理网站,创建超级用户,以及在管理网站上注册模型。详细讲解了Topic和Entry模型的创建过程。
1360

被折叠的 条评论
为什么被折叠?



