Django入门2--设置数据库 admin

先前我们在django 入门 新建项目把项目跑起来, 新建了一个django项目,这篇笔记我们主要

  1. 创建投票应用
  2. 配置数据库
  3. 配置管理页admin
创建投票应用-

在 Django 中,每个你编写的应用(app)都由一个遵循特定约定的 Python 包组成。Django 提供了一个工具,可以自动生成应用的基本目录结构,这样你就可以专注于编写代码,而无需手动创建目录。

创建应用的步骤:

  1. 确保你当前在与 manage.py 文件相同的目录下。
  2. 然后输入以下命令来创建应用:
bash 复制代码
python manage.py startapp polls

执行完后就自动生成polls文件夹和对应的文件了

polls的目录

markdown 复制代码
mysite/
  ├── polls/
  │   ├── migrations/
  │   ├── __init__.py
  │   ├── admin.py
  │   ├── apps.py
  │   ├── models.py
  │   ├── tests.py
  │   └── views.py

migrations/ :存放数据库迁移文件的目录,用于跟踪模型的变化。

init.py :这个文件告诉 Python 这个目录是一个包,可以作为模块导入。

admin.py :在这里你可以注册你的模型,以便在 Django 管理后台中进行管理。

apps.py :这个文件包含了应用的配置信息,Django 用来识别和配置该应用。

models.py :在这里定义数据模型,即数据库中的数据表结构。

tests.py :在这里可以为你的应用编写测试用例。

views.py:在这里定义视图(视图是处理请求的函数或类),用于处理用户请求并返回响应。

编写第一个视图

让我们来编写第一个视图。打开 polls/views.py 文件,并将以下 Python 代码放入其中:

polls/views.py 复制代码
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

这段代码定义了一个 Django 视图函数,用于处理 HTTP 请求并返回响应。要在浏览器中访问它,我们需要将其映射到一个 URL。 要为投票应用(polls app)定义一个 URL 配置文件,创建一个名为 polls/urls.py 的文件,并写入以下内容:

polls/urls.py 复制代码
from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index"),
]
  • 从 Django 的 urls 模块中导入 path 函数,path 是 Django 用于定义 URL 路由规则的核心函数,用于将 URL 路径与视图函数关联起来。

  • from . import views 的作用是导入当前目录下 views.py 文件中定义的视图函数,让 URL 路由配置能够关联到具体的视图逻辑。这个文件的作用是建立 "URL 路径" 与 "视图函数" 之间的映射关系,是 Django 处理用户请求的重要环节。

下一步是在 mysite 项目中配置全局 URL 配置项,以包含 polls.urls 中定义的 URL 配置项。要做到这一点,需要在 mysite/urls.py 中添加对 django.urls.include 的导入语句,并在 urlpatterns 列表中插入一个 include() 函数调用,最终代码如下:

mysite/urls.py 复制代码
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("polls/", include("polls.urls")),
    path("admin/", admin.site.urls),
]
何时使用 include()

当你要包含其他 URL 模式时,应该始终使用 include() 函数。唯一的例外是 admin.site.urls,它是 Django 为默认管理站点提供的预构建 URL 配置。

访问http://localhost:8000/polls/

我们将设置数据库,创建你的第一个模型,并快速了解一下 Django 自动生成的管理站点。

数据库设置

现在,打开mysite/settings.py文件,这是一个普通的Python模块,其中的模块级变量代表着Django的各项配置。

默认情况下,DATABASES配置使用的是SQLite数据库。如果你是数据库新手,或者只是想尝试一下Django,这是最简单的选择。SQLite包含在Python中,所以你无需安装其他任何东西来支持数据库。不过,当你开始第一个真正的项目时,你可能希望使用像 PostgreSQL 这样更具扩展性的数据库,以避免日后在数据库切换时遇到麻烦。

如果你希望使用其他数据库,请参考相关细节进行定制并让数据库正常运行。 在编辑 mysite/settings.py 文件时,将 TIME_ZONE 设置为你所在的时区。

另外,注意文件顶部的 INSTALLED_APPS 设置。该设置包含了在这个 Django 实例中所有已激活的 Django 应用的名称。应用可以在多个项目中使用,你还可以将它们打包并分发给其他人,供他们在自己的项目中使用。

默认情况下,INSTALLED_APPS 包含以下应用,这些应用均随 Django 一起提供:

  • django.contrib.admin ------ 管理站点。你很快就会用到它。
  • django.contrib.auth ------ 认证系统。
  • django.contrib.contenttypes ------ 内容类型框架。
  • django.contrib.sessions ------ 会话框架。
  • django.contrib.messages ------ 消息框架。
  • django.contrib.staticfiles ------ 静态文件管理框架。

为了方便处理常见情况,这些应用默认包含在内。 不过,其中一些应用至少会使用一个数据库表,因此在使用它们之前,我们需要在数据库中创建这些表。要完成此操作,请运行以下命令:

python 复制代码
python manage.py migrate

这个命令主要用于同步数据库结构与项目中定义的模型(Model)。在 Django 里,模型是对数据库表结构的抽象表示,通过 Python 类来定义。当你在项目中创建、修改或删除模型时,需要将这些更改应用到实际的数据库中,python manage.py migrate 命令就是用来完成这个任务的。

工作原理

Django 采用了迁移(Migration)机制来管理数据库结构的变化。迁移文件是一些 Python 文件,它们记录了模型的更改历史,以及如何将这些更改应用到数据库中。具体步骤如下:

  1. 检测迁移文件 :Django 会检查项目中所有应用的 migrations 目录,查找尚未应用到数据库的迁移文件。
  2. 应用迁移:对于找到的未应用迁移文件,Django 会按照顺序依次执行这些迁移文件中的操作,将模型的更改同步到数据库中。例如,如果在模型中添加了一个新的字段,迁移操作会在对应的数据库表中创建这个新字段。

migrate 命令会查看 INSTALLED_APPS 设置,并根据 mysite/settings.py 文件中的数据库设置以及应用程序中随附的数据库迁移(稍后会讲解)创建必要的数据库表。每次应用迁移时,你会看到相应的消息。如果你感兴趣,可以运行数据库的命令行客户端,输入以下命令来查看 Django 创建的表:

• PostgreSQL:\dt

• MariaDB 或 MySQL:SHOW TABLES;

• SQLite:.tables

• Oracle:SELECT TABLE_NAME FROM USER_TABLES;

正如我们上面所说,默认包含的这些应用是为常见情况准备的,但并非每个人都需要它们。如果你不需要其中的部分或全部应用,可以在运行 migrate 命令之前,随意将 INSTALLED_APPS 中相应的行注释掉或删除。migrate 命令只会为 INSTALLED_APPS 里的应用执行迁移操作。

创建模型

现在我们要定义你的模型了,本质上来说,模型就是你的数据库布局,还附带了额外的元数据

模型的定义与作用 模型是关于你数据的唯一、权威信息源。它包含了你所存储数据的关键字段和行为。Django 遵循"不要重复自己(DRY)"原则。其目标是在一个地方定义你的数据模型,然后自动从中衍生出其他内容。 这其中就包括迁移文件 ------ 例如,与 Ruby On Rails 不同,Django 的迁移文件完全是从你的模型文件中派生出来的,本质上它是一个记录,Django 可以依据这个记录逐步更新你的数据库架构,使其与你当前的模型相匹配。

在投票应用中创建模型 在我们的投票应用里,我们将创建两个模型:Question(问题)和 Choice(选项)。一个 Question 包含一个问题描述和一个发布日期。一个 Choice 有两个字段:选项的文本内容和该选项的投票计数。每个 Choice 都与一个 Question 相关联。 这些概念通过 Python 类来表示。编辑 polls/models.py 文件,使其内容如下:

polls/models.py 复制代码
from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField("date published")

class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

激活模型

这段简单的模型代码为 Django 提供了大量信息。有了它,Django 能够:

• 为这个应用创建数据库模式(CREATE TABLE 语句)。

• 创建一个 Python 数据库访问 API,用于访问 Question 和 Choice 对象。

但在此之前,我们需要告诉我们的项目已经安装了 polls 应用。

Django 应用是"可插拔的":你可以在多个项目中使用一个应用,并且可以分发应用,因为它们不需要绑定到特定的 Django 安装。

为了将应用包含到我们的项目中,我们需要在 INSTALLED_APPS 设置中添加对其配置类的引用。PollsConfig 类 位于 polls/apps.py 文件中,因此它的路径是 'polls.apps.PollsConfig'。编辑 mysite/settings.py 文件,并将该路径添加到 INSTALLED_APPS 设置中。它应该是这样的:

mysite/settings.py 复制代码
INSTALLED_APPS = [
    "polls.apps.PollsConfig",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

现在Django知道包含polls应用了,我们运行另外一个命令

复制代码
python manage.py makemigrations polls

通过运行 makemigrations,你在告诉 Django 你对模型做了一些更改(在本例中是创建了新的模型),并且你希望将这些更改存储为迁移文件。

迁移是 Django 存储模型更改(从而也存储数据库模式更改)的一种方式------它们是磁盘上的文件。如果你愿意,可以阅读新模型的迁移文件;它位于 polls/migrations/0001_initial.py。不用担心,每次 Django 创建迁移时,你不需要都去阅读这些文件,但它们设计为人类可编辑,以防你想手动调整 Django 如何更改内容。

有一个命令可以为你运行迁移,并自动管理数据库模式------这个命令叫做 migrate,稍后我们会介绍。不过在此之前,让我们看看这个迁移会运行什么 SQL。sqlmigrate 命令接受迁移名称,并返回它们的 SQL:

python 复制代码
python manage.py sqlmigrate polls 0001

用于查看某个迁移文件对应的 SQL 语句(而不是实际执行实际执行迁移)。

  • python manage.py:调用 Django 的命令行工具
  • sqlmigrate:命令名称,用于输出迁移对应的 SQL 代码
  • polls:应用名称(你创建的 polls 投票应用)
  • 0001:迁移文件的编号(对应 polls/migrations/0001_initial.py 文件)

现在,再次运行 migrate 命令,以便在你的数据库中创建那些模型对应的表:

Django 将模型更改 分为三步(改模型、创迁移、应用迁移),主要原因:

  1. 分离代码与数据库操作:模型修改是代码层面变更,迁移文件记录变更蓝图,最终通过迁移应用到数据库,实现分层管理。
  2. 可控与灵活:各步骤可独立检查,便于团队协作中同步变更,也能轻松处理问题(如回滚、修改迁移)。
  3. 版本化管理:迁移文件可纳入版本控制,确保开发、测试、生产环境数据库结构一致,避免手动同步差异。
玩转 API

现在,让我们进入互动式 Python Shell,来玩一玩 Django 提供的免费 API。要启动 Python shell,可以使用以下命令:

我们使用 python manage.py shell 而不是直接输入 python,是因为 manage.py 设置了 DJANGO_SETTINGS_MODULE 环境变量,该变量告诉 Django 你的 mysite/settings.py 文件的 Python 导入路径。这样,Django 就能正确加载配置文件并与项目的设置进行交互。

复制代码
python manage.py shell

修改model, 再走一遍数据库生效流程修改模型、创建迁移、应用迁移

python 复制代码
from django.db import models


class Question(models.Model):
    # ...
    def __str__(self):
        return self.question_text


class Choice(models.Model):
    # ...
    def __str__(self):
        return self.choice_text
    votes = models.IntegerField(default=0)
设置django 管理页面

新建了一个 Django 项目 ,默认是没有任何账号密码的。

Django 的管理后台(/admin/)需要你自己先创建一个 超级用户(superuser) 才能登录。

在项目根目录下运行:

bash 复制代码
python manage.py createsuperuser

设置完账号密码后,就可以登录

让投票应用(poll app)在管理后台(admin)中可修改

但是我们的投票应用在哪里呢?它并没有显示在管理后台的首页上。

只需要再做一件事:我们需要告诉管理后台(admin),Question(问题)模型对象拥有一个管理界面。要实现这一点,请打开 polls/admin.py 文件,将其编辑为如下内容:

python 复制代码
from django.contrib import admin

# Register your models here.
from .models import Question
admin.site.register(Question)

再运行python3 manage.py runserver, 就有polls了

点击问题Questions,就可以看到问题列表,

点击问题就可以编辑问题了

相关推荐
张子夜 iiii3 小时前
实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
人工智能·pytorch·python·opencv·计算机视觉
KimLiu3 小时前
LCODER之Python:使用Django搭建服务端
后端·python·django
胡耀超3 小时前
3.Python高级数据结构与文本处理
服务器·数据结构·人工智能·windows·python·大模型
1373i3 小时前
【Python】pytorch安装(使用conda)
pytorch·python·conda
keyinf03 小时前
python网络爬取个人学习指南-(五)
python
kida_yuan4 小时前
【从零开始】12. 一切回归原点
python·架构·nlp
大翻哥哥5 小时前
Python 2025:AI工程化与智能代理开发实战
开发语言·人工智能·python