002_创建应用程序
/* 一: 应用程序: 1 创建程序 2 注册程序 3 定义模型 : topics 4 注册模型 5 数据库迁移 6 创建admin 二 定义模型 1 定义模型 : Entry 2 注册模型 3 登录查看 */
一: 应用程序:
1 创建程序
1 : 输入命令: python manage.py startapp learning_logs
''' python manage.py startapp learning_logs 在 Django 中的作用是创建一个新的应用(app)。 在 Django 中,一个项目(Project)可以包含多个应用(App),每个应用通常都包含一组独立的功能,比如用户认证、评论系统或者博客等。
这样的设计让代码更加模块化,可以方便地在多个项目之间复用代码。 '''
''' 命令会在当前项目的目录下创建一个名为 learning_logs 的新目录,这个目录结构如下: __init__.py:一个空文件,告诉 Python 这个目录应该被视为一个 Python 包。 admin.py:一个用于定义 Django 管理界面的地方。 apps.py:应用的配置文件。 migrations/:存储 Django 数据库迁移文件的地方。 models.py:定义你的数据模型,即数据库的结构。 tests.py:应用的测试文件。 views.py:处理请求和响应的地方,即网页的逻辑。 '''
2 注册程序
1 : 填写Code: "learning_logs",
注意不要忘记最后逗号。
3 定义模型
# 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
''' 定义了一个数据模型 Topic。数据模型是 Django 的一个核心概念,它的主要作用是描述你的数据,并且定义了存储数据的格式和行为。 在这个 Topic 模型中: 1 text 是一个字符字段,可以存储最长为200的文本信息,用来记录用户学习的主题名称。 2 date_added 是一个日期时间字段,记录了主题被创建的时间。 3 auto_now_add=True 参数表示当用户创建一个新主题时,这个字段会自动设置为当前的时间。 4 __str__() 方法定义了当需要呈现模型实例的信息时,应该显示什么。在这里,我们让它返回存储在字段 text 中的字符串。 '''
''' models.CharField(max_length=200) 是在定义一个 Django 数据模型字段。 1 CharField 是 Django 模型字段的一种类型,表示一个字符字段,用于存储短文本字符串或者字符数据。 2 max_length=200 参数定义了这个字符字段的最大长度为 200 个字符。这意味着在这个字段中,你可以存储最多 200 个字符的文本数据 '''
''' models.DateTimeField(auto_now_add=True) 是 Django 中用来表示日期和时间的字段。 1 在 Django 的数据模型中,DateTimeField 用来存储日期和时间的数据。 2 参数 auto_now_add=True 是一个选项,当你设置为 True 的时候,它的意思是,当你创建一个新的记录(也就是在数据库中新增一行数据)的时候,
这个 date_added 字段会自动设置为当前的日期和时间。也就是说,你不需要手动去设置这个字段的值,Django 会自动帮你完成。 '''
4 注册模型
from django.contrib import admin # Register your models here. from .models import Topic admin.site.register(Topic)
from .models import Topic 是导入了当前应用下的 models.py 文件中定义的 Topic 数据模型。 admin.site.register(Topic) 是把 Topic 模型注册到 Django 的后台管理系统中。
注册后,你可以在 Django 的后台管理界面上看到 Topic 模型,并且可以进行增加、修改、删除等操作。
5 数据库迁移
1 : 输入命令: python manage.py makemigrations learning_logs
''' 含义: 创建对应的数据库迁移文件。 如果你新建了一个模型,Django 就会在数据库中创建一个对应的表;如果你修改了模型的字段,Django 就会修改数据库表的结构。 所以,每当你修改了模型后,都需要运行 python manage.py makemigrations 来创建迁移文件. '''
1 : 输入命令: python manage.py migrate
''' 执行数据迁移文件。 '''
6 创建admin
1 : 输入命令: python manage.py createsuperuser
''' 创建管理员账户 '''
1 : 输入地址: http://127.0.0.1:8000/admin/
2 : 输入用户和密码。
1 : 可以看见创建的项目: LEARNING_LOGS
2 : 可以看见创建的模型: Topics
二 定义模型
1 定义模型 : Entry
# 定义模型 class Entry(models.Model): ''' 学到的有关某个主题的具体知识 ''' 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 f"{self.text[:50]}..."
''' 在 Entry 类中定义了三个字段: 1 topic 字段:它是一个 ForeignKey 类型,意味着每个 Entry 对象都关联着一个 Topic 对象。on_delete=models.CASCADE 表示当关联的 Topic 对象被删除时,
所有关联的 Entry 对象也会被自动删除。 2 text 字段:它是一个 TextField 类型,用于存储大量文本信息。 3 date_added 字段:它是一个 DateTimeField 类型,会自动设置为创建 Entry 对象的时间(只在对象首次创建时设定,之后不会再变)。auto_now_add = True 表示自动设置当前时间。 class Meta: 在这里定义了一些元数据。 verbose_name_plural = 'entries':这个选项是用来指定该模型的复数形式是什么。默认情况下,Django 会自动在模型名后面加一个 's' 来形成复数,
但有些情况下这样的规则不适用,比如这里的 "entry" 的复数形式应该是 "entries",而不是 "entrys",所以需要我们手动指定。 def __str__(self): 定义了当打印 Entry 对象时的输出格式。在这里,我们让它返回 text 字段的前 50 个字符,并在后面添加三个点 '...'。如果 text 字段的长度不足 50 个字符,
那么就返回 text 字段的全部内容。 '''
# 数据迁移 1 输入命令: python manage.py makemigrations learning_logs 2 输入命令: python manage.py migrate
2 注册模型
from .models import Topic, Entry admin.site.register(Topic) admin.site.register(Entry)
3 登录查看
1 : 输入地址: http://127.0.0.1:8000/admin/
2 : 可以新创建的模型: Entry