Django搭建开发‘学习笔记’项目二(创建应用程序)

Django项目由一系列应用程序组成,它们协同工作让项目成为一个整体。

进入目录learn_log,并激活虚拟环境,再执行命令  python3 manage.py startapp learning_logs,创建应用程序

命令startapp appname让Django搭建并创建应用程序所需的基础设施。执行后ls查看目录可看到其中新增了learning_logs文件夹。文件夹中最重要的文件为models.py、admin.py和views.py。其中models.py用来定义要在应用程序中管理的数据,后续介绍admin.py和views.py。

一、定义模型

  打开文件models.py

  

  这里导入了模块models,并让我们创建自己的模型。模型告诉Django如何处理应用程序中存储的数据。在代码层面,模型就是一个类。

  如下表示用户将存储的主题的模型:

from django.db import models


class Topic(models.Model):
    """用户学习的主题"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        """返回模型的字符类型"""
        return self.text

# Create your models here.

  text属性是一个CharField---由字符组成的数据,即文本。需要存储少了文本,如名称、城市、标题时,可使用CharField。定义CharField属性时一定要告诉Django该在数据库中预留多少空间。

  date_added是一个DateTimeField---记录日期和时间的数据。使用实参auto_now_add=True,每当用户创建新主题时,Django都会将这个属性自动设置为当前日期和时间。

二、激活模型

  要使用这些模型,必须让Django将前述应用程序包含到项目中。为此,打开settings.py(位于目录learning_log/learning_log中),其中以下部分告诉Django哪些应用程序被安装到了项目并将协同工作:

   将前面创建的应用程序learning_logs添加到这个列表

   通过将应用程序分组,在项目不断增大,包含更多应用程序是,有助于对应用程序进行跟踪。

  接下来需要修改数据库,使其能够存储与模型Topic相关的信息,为此,在终端窗口中执行命令:python3 manage.py makemigrations learning_logs

   makemigrations让Django确定如何修改数据库,使其能够存储与前面定义的新模型相关联的数据。输出表明Django创建了一个名为0001_initial.py的迁移文件,这个文件将在数据库中未模型Topic创建一个表。

  现在应用这种迁移,让Django修改数据库,执行命令:python3 manage.py migrate

   (每当需要修改管理的数据时,都需要采取这三个步骤,先修改models.py,然后对learning_logs调用makemigrations,然后让Django迁移项目)

  即修改后需要python3 manage.py makemigrations APP_NAME然后python3 manage.py migrate

三、Django管理网站

  1、为网站创建超级用户

    执行命令python3 manage.py createsuperuser,输入用户名密码

  2、向管理网站注册模型

    Django自动在管理网站中添加了一些模型,如User和Group,对于我们创建的模型,需要手工进行注册。

    我们创建应用程序learning_logs时,Django在models.py所在目录中创建了一个名为admin.py文件,进行如下修改:

   models前面的句点是为了让Django在admin.py所在目录查找models.py。admin.site.register(Topic)让Django通过管理网站管理模型.

  访问localhost:8000/admin并输入刚刚创建的超级用户名和密码,就可以看到管理界面

   可以添加一个Chess主题

四、定义模型Entry

  要记录学到的Chess知识,用户必须能够在学习笔记中添加条目。为此需要定义相关的模型,添加模型entry来显示主题下的条目:models.py下新增

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

  添加新模型后需要再次迁移数据库

  依次执行命令:python3 manage.py makemigrations learning_logs、python3 manage.py migrate

六、向管理网站注册Entry

  admin.py修改:

from django.contrib import admin

from .models import Topic, Entry

admin.site.register(Topic)
admin.site.register(Entry)

# Register your models here.

  返回http://127.0.0.1:8000/admin/,将可添加知识,添加知识时选择对应主题

原文地址:https://www.cnblogs.com/huwang-sun/p/14932813.html