当前位置: 首页 > news >正文

如何创建一个 Django 应用并连接到数据库

简介

Django 是一个用 Python 编写的免费开源的 Web 框架。这个工具支持可扩展性、可重用性和快速开发。

在本教程中,您将学习如何为一个博客网站建立与 MySQL 数据库的初始基础。这将涉及使用 django-admin 创建博客 Web 应用程序的骨架结构,创建 MySQL 数据库,并将 Web 应用程序连接到数据库。

Django 将为您提供一个开发环境,用于开发博客 Web 应用程序,但在将博客发布到互联网之前,您需要采取更多步骤。

先决条件

要按照本教程操作,您需要:

  • 一个安装了 Ubuntu 22.04 服务器,具有非 root sudo 权限的用户和防火墙。请按照我们的 Ubuntu 22.04 初始服务器设置指南进行设置。
  • 安装 MySQL 以用作数据库。您可以按照我们的教程《在 Ubuntu 22.04 上安装 MySQL》进行设置。
  • 设置 Python 环境。有关此操作,请参阅我们的教程《在 Ubuntu 22.04 上安装 Python 3 并设置编程环境》。

一旦所有内容都安装并设置好,您就可以继续进行第一步。

步骤 1 — 创建数据库

Django 支持多种流行的数据库管理系统,但本指南侧重于将 Django 连接到 MySQL 数据库。为此,您需要在 MySQL 实例上创建一个数据库,以及一个 Django 可以用来连接到数据库的 MySQL 用户配置文件。

要设置这一点,请使用以下命令连接到 MySQL 数据库,作为 root MySQL 用户:

sudo mysql

当提示符更改为以下内容时,您就知道已经进入了 MySQL 服务器:

使用以下命令检查当前数据库:

SHOW DATABASES;

假设您尚未创建任何数据库,您的输出将类似于以下内容:

+--------------------+
| Database       	|
+--------------------+
| information_schema |
| mysql         	|
| performance_schema |
| sys            	|
+--------------------+
4 rows in set (0.00 sec)

默认情况下,您将已经创建了 4 个数据库:information_schemaMySQLperformance_schemasys。您不需要操作这些数据库,因为它们包含了对 MySQL 服务器本身重要的信息。

而是,创建将保存博客数据的初始数据库。

要在 MySQL 中创建数据库,请运行以下命令,为您的数据库使用一个有意义的名称:

CREATE DATABASE blog_data;

成功创建数据库后,您的输出将如下所示:

Query OK, 1 row affected (0.00 sec)

验证数据库现在是否列在可用数据库中:

SHOW DATABASES;

blog_data 数据库现在应该列在输出中包含的数据库中:

+--------------------+
| Database       	|
+--------------------+
| information_schema |
| blog_data      	|
| mysql             	|
| performance_schema |
| sys            	|
+--------------------+
5 rows in set (0.00 sec)

接下来,创建一个单独的 MySQL 用户帐户,Django 将用于操作新数据库。创建特定的数据库和帐户可以从管理和安全的角度支持您。在本指南中,我们将使用名称 djangouser。您可以使用任何您喜欢的名称,但选择一个有描述性的名称可能会有所帮助。

您将创建此帐户,设置密码,并授予其对您创建的数据库的访问权限。首先,通过输入以下命令创建用户并设置其密码。请记住,通过在此示例中替换 password 来为您的数据库选择一个强密码:

CREATE USER 'djangouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

让数据库知道 djangouser 应该完全访问您设置的数据库:

GRANT ALL ON blog_data.* TO 'djangouser'@'localhost';

现在您有了一个专门为 Django 创建的数据库和用户帐户。刷新权限,以便当前的 MySQL 实例知道您所做的最近更改:

FLUSH PRIVILEGES;

完成后,您可以通过输入 EXIT; 或按 CTRL + D 来退出 MySQL 服务器。

步骤 2 — 创建 MySQL 选项文件

与其在 Django 配置文件中指定 MySQL 连接详细信息,不如将它们存储在一个选项文件中。许多 MySQL 程序可以读取选项文件,也称为配置文件,用于存储启动选项或连接详细信息等信息。这样做很方便,因为您只需在一个地方存储数据库登录凭据。

使用您喜欢的文本编辑器打开 my.cnf 配置文件以更新您的 MySQL 凭据。这里我们将使用 nano

sudo nano /etc/mysql/my.cnf

添加以下行并包含您的相关信息:

…[client]
database = blog_data
user = djangouser
password = your_actual_password
default-character-set = utf8

请注意,utf8 被设置为默认编码。这是在 MySQL 中对 Unicode 数据进行编码的常见方式。当您确定您的详细信息是正确的时,保存并关闭文件。如果您使用 nano 编辑文件,您可以按 CTRL + O 保存文件,然后按 CTRL + X 关闭编辑器。

编辑文件后,重新启动 MySQL 以使更改生效:

sudo systemctl daemon-reload
sudo systemctl restart mysql

请注意,重新启动 MySQL 需要几秒钟的时间,请耐心等待。

相关文章:

如何创建一个 Django 应用并连接到数据库

简介 Django 是一个用 Python 编写的免费开源的 Web 框架。这个工具支持可扩展性、可重用性和快速开发。 在本教程中,您将学习如何为一个博客网站建立与 MySQL 数据库的初始基础。这将涉及使用 django-admin 创建博客 Web 应用程序的骨架结构,创建 MyS…...

【算法刷题day44】Leetcode:518. 零钱兑换 II、377. 组合总和 Ⅳ

文章目录 Leetcode 518. 零钱兑换 II解题思路代码总结 Leetcode 377. 组合总和 Ⅳ解题思路代码总结 草稿图网站 java的Deque Leetcode 518. 零钱兑换 II 题目:518. 零钱兑换 II 解析:代码随想录解析 解题思路 先遍历物品,再遍历背包。 代码…...

『51单片机』AT24C02[IIC总线]

存储器的介绍 ⒈ROM的功能⇢ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。 注→在后面发展的ROM是可以可写可…...

Jenkins与Rancher的配合使用

Jenkins和Rancher是两个常用的DevOps工具,可以很好地配合使用来实现持续集成和持续部署。 Jenkins是一个开源的自动化构建工具,可以实现自动化的代码构建、测试和部署等一系列操作。可以通过Jenkins来触发构建任务,例如从代码仓库中拉取最新的…...

GIS入门,常用的多边形平滑曲线算法介绍和JavaScript的多边形平滑曲线算法库chaikin-smooth的实现原理和使用

前言 本章介绍一下常用的多边形平滑曲线算法及其使用案例。 多边形平滑算法通常用于图形处理或计算机图形学中,以使线条或曲线在连接处平滑过渡,而不出现明显的棱角或断裂。多边形平滑算法有多种实现方法,其中一些常见的有下面几种: 贝塞尔曲线插值(Bezier Curve Interpo…...

气膜体育馆内部的采光效果如何?—轻空间

气膜体育馆内部的采光效果如何?这是许多人对这种创新建筑的一个关键关注点。 首先,气膜体育馆的采光性非常好。阳光透过屋顶时以漫射光的方式进入室内,这种透射方式使得室内的光线柔和而均匀。从内部观察,整个屋顶就像一个连续的明…...

矩阵的对称正定性判决(复习)

文章目录 本科学的数学知识忘的太快了 如何判断一个实矩阵是否是对称正定 在线性代数中,一个实对称矩阵是否为正定可以通过以下方法判断: 对称性: 首先,确认矩阵是否对称,即矩阵的转置是否等于其本身。 特征值检查&…...

网络安全之DHCP详解

DHCP:Dynamic Host Configration Protocol 动态主机配置协议 某一协议的数据是基于UDP封装的,当它想确保自己的可靠性时,这个协议要么选确认重传机制,要么选周期性传输。 DHCP是确认重传,【UDP|DHCP】,当DHCP分配完地…...

【Proteus】LED呼吸灯 直流电机调速

1.LED呼吸灯 #include <REGX51.H> sbit LEDP2^0; void delay(unsigned int t) {while(t--); } void main() {unsigned char time,i;while(1){for(time0;time<100;time){for(i0;i<20;i){LED0;delay(time);LED1;delay(100-time);}}for(time100;time>0;time--){fo…...

今天遇到一个GPT解决不了的问题

问题描述 你好&#xff0c;postman的一个post请求&#xff0c;编辑器里面放了一个很长的json数据&#xff0c;报Tokenization is skipped for long lines for performance reasons. This can be configured via editor.maxTokenizationLineLength.&#xff0c;但是同样的数据&a…...

优化SQL的方法

来自组内分享&#xff0c;包含了比较常使用到的八点&#xff1a; 避免使用select * union all代替union 小表驱动大表 批量操作 善用limit 高效的分页 用连接查询代替子查询 控制索引数量 一、避免使用select * 消耗数据库资源 消耗更多的数据库服务器内存、CPU等资源。 消…...

库存管理系统开源啦

软件介绍 ModernWMS是一个针对小型物流仓储供应链流程的开源库存管理系统。该系统的开发初衷是为了满足中小型企业在有限IT预算下对仓储管理的需求。通过总结多年ERP系统研发经验&#xff0c;项目团队开发了这套适用于中小型企业的系统&#xff0c;以帮助那些有特定需求的用户。…...

【java】接口

什么是接口 接口当中存在的是对方法的定义&#xff0c;而不是对方法的具体实现。 为什么不实现这个方法呢&#xff1f; 继承的本质是代码的复用。当一个父类会经常被继承&#xff0c;并且子类都要自己实现方法时&#xff0c;父类中的方法就会显得累赘&#xff0c;并且占用了…...

Java中的类型转换

一、类型转换 对类型转换来说分为向上类型转换和向下类型转换&#xff1a; 向上类型转换是自动完成的&#xff0c;一般是小类型向大类型转换。在引用类型中是子类型向父类型转换。向下类型转换是强制完成的&#xff0c;一般是大类型向小类型转换。在引用类型中是父类型向子类…...

定义范围对PFMEA分析的重要性——SunFMEA软件

在进行PFMEA分析时&#xff0c;定义范围是一个至关重要的步骤。这是因为&#xff0c;通过明确分析的范围&#xff0c;可以确保团队关注到最关键、最可能影响产品质量的过程&#xff0c;从而更有效地识别和解决潜在问题。今天SunFMEA软件和大家一起讨论定义范围对PFMEA操作的重要…...

json返回工具类|世界协调时间(UTC)

一、问题 世界协调时间&#xff08;UTC&#xff09;是一个标准的时间参考&#xff0c;通常被用于跨越不同时区的时间标准。要将 UTC 时间转换为中国时间&#xff08;中国标准时间&#xff09;&#xff0c;你需要将时间加上8个小时&#xff0c;因为中国位于 UTC8 时区。 初中知…...

MySQL·内置函数

目录 函数 日期函数 案例1&#xff1a;创建一张表&#xff0c;记录生日 案例2&#xff1a;创建一个留言表 案例3&#xff1a;请查询在2分钟内发布的帖子 字符串函数 案例1&#xff1a; 获取emp表的ename列的字符集 案例2&#xff1a;要求显示exam_result表中的信息&am…...

vue根据文字动态判断溢出...鼠标悬停显示el-tooltip展示

使用自定义el- tooltip 组件 定义 Tooltip是一种小型弹出框,它显示有关特定页面元素的信息,例如按钮、链接或图标。Tooltip通常以半透明的气泡形式呈现,并出现在页面元素的旁边或下方。 它可以改善用户体验,使用户更容易理解页面元素的功能和意图。用户可以通过将鼠标悬停…...

使用Tkinter实现数据预测工具的GUI界面展示

如果构建好预测模型后&#xff0c;想将预测模型通过一个交互式的页面显示&#xff0c;可以通过下边两种方式实现。 本文中代码有详细解析注释&#xff0c;便不再如往期一样分开讲解了&#xff0c;有需要的朋友可以直接拿去使用&#xff0c;代码可以直接运行&#xff0c;把预测…...

机器学习笔记-22

终章 至此吴恩达老师的机器学习课程已经完成啦&#xff0c;总结一下&#xff1a; 1.监督学习的算法&#xff1a;线性回归、逻辑回归、神经网络和向量机 2.无监督学习的算法&#xff1a;K-Means、PCA、异常检测 3.推荐系统、大规模数据处理、正则化、如何评估算法 4.上限分析、…...

前端开发从入门到精通:Vue3+TypeScript实战教程

一、为什么软件测试从业者要学Vue3TypeScript在软件测试领域&#xff0c;尤其是自动化测试和性能测试方向&#xff0c;懂前端开发技术早已不是加分项&#xff0c;而是必备技能。作为测试从业者&#xff0c;掌握Vue3TypeScript能为你的职业发展带来多重优势&#xff1a;&#xf…...

别再乱设Public了!Minio权限控制实战:从用户、分组到自定义策略的完整配置流程

别再乱设Public了&#xff01;Minio权限控制实战&#xff1a;从用户、分组到自定义策略的完整配置流程 在分布式存储系统的日常运维中&#xff0c;权限配置不当引发的数据泄露事件屡见不鲜。最近某科技公司因对象存储桶误设为公开访问&#xff0c;导致数万份客户资料暴露的案例…...

别再乱接线了!12V手电钻保护板(B+/B-/B1/B2)保姆级接线图解,附万用表检测电池坏点技巧

12V手电钻保护板接线全攻略&#xff1a;从原理到实战的安全操作指南 面对手电钻保护板上密密麻麻的接线端子&#xff0c;即使是经验丰富的DIY爱好者也难免感到困惑。B、B-、B1、B2这些看似简单的标记背后&#xff0c;实际上隐藏着锂电池组安全工作的关键机制。本文将带您深入理…...

深入MCUBoot固件签名与安全启动:以nRF52840的ECDSA硬件加速为例

深入MCUBoot固件签名与安全启动&#xff1a;以nRF52840的ECDSA硬件加速为例 在物联网设备爆炸式增长的今天&#xff0c;固件安全已成为产品生命周期的关键防线。想象一下&#xff0c;当您的智能门锁、工业传感器或医疗设备在凌晨3点自动下载并安装了一个被篡改的固件版本&#…...

Win10下通过桥接网卡实现QEMU虚拟机与宿主机及外网的无缝互联

1. 为什么需要桥接网卡&#xff1f; 在Windows 10环境下使用QEMU创建虚拟机时&#xff0c;很多朋友都会遇到一个头疼的问题&#xff1a;虚拟机虽然能上网&#xff0c;但宿主机和虚拟机之间就是无法互相访问。这种情况我遇到过太多次了&#xff0c;特别是需要调试web服务或者进行…...

嵌入式Linux启动优化实战:从U-Boot到应用的全链路加速

1. 项目概述与优化价值作为一名在嵌入式领域摸爬滚打了十多年的老工程师&#xff0c;我深知产品启动速度对于用户体验和系统性能的“第一印象”有多重要。尤其是在像全志T113这类面向工控、物联网、智能终端的应用处理器平台上&#xff0c;从按下电源键到应用界面就绪&#xff…...

探索未来Web交互:Unity与Vue的梦幻联动

探索未来Web交互&#xff1a;Unity与Vue的梦幻联动 【下载地址】Unity打包成WebGL与Vue交互Demo 本示例仓库演示了如何将Unity开发的游戏或应用打包成WebGL格式&#xff0c;并在基于Vue.js的前端应用中进行集成与交互。通过这个项目&#xff0c;开发者可以学习到Unity与现代Web…...

magic-api Swagger文档自动生成:让API文档维护变得简单

magic-api Swagger文档自动生成&#xff1a;让API文档维护变得简单 【免费下载链接】magic-api magic-api 是一个接口快速开发框架&#xff0c;通过Web页面编写脚本以及配置&#xff0c;自动映射为HTTP接口&#xff0c;无需定义Controller、Service、Dao、Mapper、XML、VO等Jav…...

AM335X核心板开发指南:从硬件选型到Linux系统实战

1. 项目概述&#xff1a;深入解析CoM-335X核心板在工业自动化、边缘计算和智能终端设备领域&#xff0c;开发者常常面临一个核心矛盾&#xff1a;一方面希望采用高性能、功能丰富的处理器平台来支撑复杂的应用逻辑和多样的外设接口&#xff1b;另一方面&#xff0c;又受限于产品…...

拆解Xilinx UltraScale GTH收发器时钟网络:从QPLL/CPLL选择到TXUSRCLK生成的全链路分析

拆解Xilinx UltraScale GTH收发器时钟网络&#xff1a;从QPLL/CPLL选择到TXUSRCLK生成的全链路分析 在高速串行通信领域&#xff0c;时钟网络的稳定性直接决定了系统性能上限。当我们面对25Gbps甚至更高速率的设计需求时&#xff0c;Xilinx UltraScale架构中的GTH收发器便成为工…...