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,就可以看到问题列表,

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

相关推荐
春日见4 分钟前
5分钟入门强化学习之动态规划算法与实现
大数据·人工智能·python·算法·机器学习·计算机视觉
DeniuHe35 分钟前
sklearn 中所有交叉验证数据集划分方式完整总结
人工智能·python·sklearn
DeniuHe39 分钟前
sklearn中不同交叉验证方法的场景适配
人工智能·python·sklearn
隐于花海,等待花开1 小时前
16.Python 常用第三方库概览 深度解析
python
我材不敲代码1 小时前
Python 函数核心:位置参数与关键字参数详解
java·前端·python
风落无尘1 小时前
第十一章《对齐与安全》 完整学习资料
python·安全·机器学习
Kratzdisteln1 小时前
【无标题】
前端·python
hakesashou2 小时前
python文件操作需要导入模块吗
python
wuxinyan1232 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
SunnyDays10112 小时前
Python操作Excel批注:从基础添加到高级自定义的完整指南
开发语言·python·excel