从零创建一个 Django 项目
1. 准备环境
在开始之前,确保你的开发环境满足以下要求:
- 安装了 Python (推荐 3.8 或更高版本)。
- 安装
pip
包管理工具。 - 如果要使用 MySQL 或 PostgreSQL,确保对应的数据库已安装。
创建虚拟环境
在项目目录中创建并激活虚拟环境,保证项目依赖隔离:
# 创建虚拟环境
python -m venv env# 激活虚拟环境
# Windows
env\Scripts\activate
# Linux/Mac
source env/bin/activate
2. 安装 Django 和数据库驱动
在激活的虚拟环境中安装 Django:
pip install django
如果使用 MySQL 或 PostgreSQL,还需要安装相应的驱动:
- MySQL: 安装
mysqlclient
:pip install mysqlclient
- PostgreSQL: 安装
psycopg2
:pip install psycopg2-binary
如果只是使用 SQLite,Django 默认支持,无需额外安装。
3. 创建 Django 项目
使用 django-admin
创建一个新的项目:
django-admin startproject myproject
项目结构
创建后,项目的基本结构如下:
myproject/manage.py # 项目管理脚本myproject/__init__.py # 包标识settings.py # 项目设置urls.py # URL 配置asgi.py # ASGI 配置wsgi.py # WSGI 配置
4. 配置数据库
打开 myproject/myproject/settings.py
,找到 DATABASES
配置项,根据数据库类型修改配置:
默认的 SQLite 配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
使用 MySQL
如果你使用 MySQL,修改为:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'your_database_name','USER': 'your_database_user','PASSWORD': 'your_database_password','HOST': 'localhost', # 数据库主机地址,通常是 localhost'PORT': '3306', # MySQL 默认端口}
}
使用 PostgreSQL
如果你使用 PostgreSQL,修改为:
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql','NAME': 'your_database_name','USER': 'your_database_user','PASSWORD': 'your_database_password','HOST': 'localhost', # 数据库主机地址,通常是 localhost'PORT': '5432', # PostgreSQL 默认端口}
}
5. 创建 Django 应用
在项目目录中创建一个新的 Django 应用:
python manage.py startapp myapp
应用结构
创建后,应用的结构如下:
myapp/migrations/ # 数据库迁移文件目录__init__.py__init__.py # 包标识admin.py # 管理后台配置apps.py # 应用配置models.py # 数据模型定义tests.py # 单元测试views.py # 视图函数
6. 配置应用
打开 myproject/myproject/settings.py
,在 INSTALLED_APPS
中添加你的新应用:
INSTALLED_APPS = [# Django 自带的应用'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 你的应用'myapp',
]
7. 创建模型并生成数据库表
在 myapp/models.py
中定义数据模型。例如:
from django.db import modelsclass Lesson(models.Model):id = models.CharField(max_length=20, primary_key=True)name = models.CharField(max_length=50)def __str__(self):return self.name
生成迁移文件
运行以下命令生成迁移文件:
python manage.py makemigrations
Django 会检测到模型更改并生成迁移文件,例如:
Migrations for 'myapp':myapp/migrations/0001_initial.py- Create model Lesson
应用迁移文件
运行以下命令将迁移文件应用到数据库,生成表结构:
python manage.py migrate
生成并应用迁移文件的目的
- 将模型定义和数据库表结构同步,确保模型中的字段和属性能够在数据库中对应为实际的表和列;
迁移文件的作用
- 迁移文件是 Django 提供的一种机制,用于跟踪和记录数据模型的变化,然后将这些变化应用到数据库中。
- **作用1:**将模型转换为数据库表; (在 models.py 中定义的模型只是 Python 的类,它们描述了表的结构(如字段、类型、约束等),但它们并不会自动创建数据库中的实际表。)
- 迁移文件将这些模型转化为一组可以执行的指令(SQL 语句),以在数据库中创建实际的表。
- 举例: 在models.py中定义
from django.db import modelsclass User(models.Model):id = models.AutoField(primary_key=True)username = models.CharField(max_length=100)email = models.EmailField()
- 迁移文件会生成相应的SQL语句;
CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(100) NOT NULL,email VARCHAR(254) NOT NULL
);
- **作用2:**跟踪和管理模型的变更; (当你对 models.py 中的模型做出修改(如新增字段、修改字段类型、删除字段等)时,Django 会通过迁移文件记录这些变化。)应用迁移文件后,Django 会将这些更改同步到数据库中,而不会丢失现有数据。
- 举例:假设你为User模型添加了一个新的字段age
age = models.IntegerField(default=18)
- 生成迁移文件以后,Django会创建一个指令来添加字段;
ALTER TABLE user ADD COLUMN age INT NOT NULL DEFAULT 18;
- **作用3:**管理多开发者协作中的数据库一致性; (在多人开发时,每个开发者可能对模型进行不同的更改,通过迁移文件可以记录这些更改,并在团队中共享。迁移文件以增量的形式记录每次更改,确保所有开发者和环境中的数据库表结构保持一致。)
8. 运行开发服务器
使用以下命令启动 Django 开发服务器:
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000/ 以查看项目是否正常运行。
9. 添加管理后台支持
如果需要通过 Django 的管理后台管理数据库,可以为模型添加管理支持。
注册模型
打开 myapp/admin.py
,注册模型:
from django.contrib import admin
from .models import Lessonadmin.site.register(Lesson)
创建超级用户
运行以下命令创建管理员账户:
python manage.py createsuperuser
按照提示输入用户名、邮箱和密码。
访问管理后台
启动开发服务器后,访问 http://127.0.0.1:8000/admin,使用管理员账户登录即可管理数据库中的数据。
10. 测试操作数据库
可以通过 manage.py shell
交互式操作数据库:
python manage.py shell
在交互环境中:
from myapp.models import Lesson# 创建记录
lesson = Lesson.objects.create(id='1', name='Django Basics')# 查询记录
lesson = Lesson.objects.get(id='1')
print(lesson.name)# 更新记录
lesson.name = 'Advanced Django'
lesson.save()# 删除记录
lesson.delete()
总结
通过以上步骤,你可以从零创建一个 Django 项目,并设置数据库支持。核心流程包括:
- 安装 Django 和数据库驱动。
- 配置数据库连接。
- 创建应用和模型。
- 生成并应用迁移文件。
- 运行开发服务器并使用 Django 提供的管理后台。
项目结构解读
env文件夹
- 概念;env 文件夹是一个 虚拟环境 的文件夹。
- 什么是虚拟环境?【虚拟环境是 Python 提供的一种工具,用于隔离项目的依赖。它允许你在每个项目中独立安装 Python 包,而不会干扰全局 Python 环境或其他项目的依赖。】
- 为什么需要虚拟环境?
- 依赖隔离:每个项目可能需要不同版本的库,如果不使用虚拟环境,可能会导致版本冲突。
- 防止污染全局环境:全局环境中的库安装可能会影响其他项目的正常运行。
- env文件夹的作用
- 环境隔离:当你激活虚拟环境时,所有安装的依赖包(如 Django)都被存储在 env 文件夹中。
- 存储依赖包:例如,你安装的 Django 和 MySQL 驱动等依赖,都会存储在 env/Lib/site-packages 下。
- 激活虚拟环境(window)
env\Scripts\activate
- 激活虚拟环境(Linux/Mac)
source env/bin/activate
- 关闭虚拟环境
deactivate
项目目录结构以及Django项目开发注意点
myproject/manage.pymyproject/__init__.pysettings.pyurls.pyasgi.pywsgi.pymyapp/migrations/__init__.pyadmin.pyapps.pymodels.pytests.pyviews.py
manage.py
- 概念;manage.py 是 Django 项目的入口点。它是一个命令行工具,允许你管理项目(如运行开发服务器、数据库迁移等)。常见的命令包括:
- 启动开发服务器
python manage.py runserver
- 创建数据库迁移
python manage.py makemigrations
python manage.py migrate
- 创建超级用户
python manage.py createsuperuser
myproject/(同名的文件夹)
- 概念;这个文件夹是Django项目的配置文件夹,它的名字和项目名一致
- settings.py:项目的核心配置文件,包括数据库配置、已安装的应用、静态文件路径等。
- urls.py:项目的 URL 路由配置文件,用于将 URL 路径映射到对应的视图函数。
- asgi.py:ASGI(异步服务器网关接口)配置,用于支持异步请求处理。
- wsgi.py:WSGI(Web服务器网关接口)配置,用于部署 Django 项目到生产环境。
myapp(创建的应用目录)
- myapp/ 是你创建的应用目录。Django 项目可以包含多个应用,每个应用负责不同的功能模块。
- 各文件的作用
- models.py:定义数据模型(数据库表结构)。
- views.py:处理用户的请求,并返回响应。
- admin.py:配置管理后台(Django admin)。
- apps.py:管理应用的配置信息。
- migrations/:存储数据库迁移文件,用于跟踪模型的变化。
- tests.py:定义测试用例,用于自动化测试。
- init: 标识这是一个Python包; (文件夹可以被 Python 识别为模块)
为什么 myproject 文件夹下有一个和项目同名的文件夹?
- 这是Django项目默认的目录结构
- 最外层的 myproject/ 是项目的根目录,存放项目入口点 manage.py 和其他项目相关的文件。
- 内层的 myproject/ 是项目的 配置文件夹,存放项目的配置(如 settings.py、urls.py 等)。
- 这样设计的目的
- Django 这样设计的原因是为了方便管理项目的全局文件和应用文件。分开这两层结构,可以更清晰地区分项目的配置文件和其他文件。
修改项目名称会影响哪些地方?
- 如果你需要修改项目名称,内层文件夹(myproject)中的配置文件需要同步更新。例如:
- asgi.py 和 wsgi.py 中引用的模块路径需要修改。
- 项目运行时的模块路径也需要更新。
如何添加更多的应用到项目中?
- Django 支持模块化的开发,可以为项目添加多个应用,每个应用负责不同的功能。
- 创建新的应用;使用startapp命令创建新应用;例如
python manage.py startapp blog
-
- 注册应用;将新应用注册到项目的 INSTALLED_APPS 中:
# settings.py
INSTALLED_APPS = [# 默认应用'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 你的自定义应用'myapp','blog',
]
-
- 添加URL路由;为新应用配置URL,例如,在新应用blog中创建urls.py
# blog/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'), # 主页
]
-
- 在项目的urls.py中包含这个应用的URL;
# myproject/urls.py
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path('admin/', admin.site.urls),path('blog/', include('blog.urls')), # 包含 blog 的路由
]
项目结构总结
- env 文件夹:是虚拟环境的文件夹,用于隔离项目依赖。
- 项目结构:
- 外层 myproject/ 是根目录,存放入口文件(如 manage.py)。
- 内层 myproject/ 是项目的配置文件夹,存放 settings.py 等配置。
- myapp/ 是一个应用目录,你可以创建多个应用,每个应用负责不同的功能模块。
- 模块化开发:
- Django 项目可以包含多个应用,通过 startapp 命令创建新应用,并通过 INSTALLED_APPS 注册到项目中。
编辑数据库时,是否需要书写models.py文件
1. 使用models.py的场景
- 在大多数情况下,推荐通过models.py 文件来定义和操作数据库,这是 Django 的核心功能之一。
- 优点
- **ORM提供抽象层;**通过Django的ORM(对象关系映射),你可以直接使用Python类和方法操作数据库,而无需手写SQL;
- **数据变更自动管理:**通过迁移(migrations)功能,可以轻松跟踪和管理数据库结构的变更。
- 代码可维护性强: models.py 中的类定义直接对应数据库表,代码更直观、更易维护。
- **跨数据库支持:**通过 Django 的 ORM,同一套代码可以适配不同的数据库(如 SQLite、MySQL、PostgreSQL)。
2. 直接操作数据库的场景(无需models.py)
场景1:已有数据库表;
- 如果你的项目需要操作一个已有的数据库(非 Django 管理的表),你可以直接通过 SQL 或第三方库操作它,而不定义模型。
- 也可以使用Django的inspectdb功能自动生成模型;
场景2:复杂SQL查询
- 如果某些操作难以通过 ORM 实现(例如复杂的联表查询、多级嵌套查询等),可以直接使用 SQL 查询。
场景3:一次性脚本或数据迁移
- 如果只是临时操作数据库(如迁移数据、批量更新等),可以直接运行原生 SQL,而不需要定义模型。
相关文章:

从零创建一个 Django 项目
1. 准备环境 在开始之前,确保你的开发环境满足以下要求: 安装了 Python (推荐 3.8 或更高版本)。安装 pip 包管理工具。如果要使用 MySQL 或 PostgreSQL,确保对应的数据库已安装。 创建虚拟环境 在项目目录中创建并激活虚拟环境ÿ…...

无人零售 4G 工业无线路由器赋能自助贩卖机高效运营
工业4G路由器为运营商赋予 “千里眼”,实现对贩卖机销售、库存、设备状态的远程精准监控,便于及时补货与维护;凭借强大的数据实时传输,助力深度洞察销售趋势、优化库存、挖掘商机;还能远程升级、保障交易安全、快速处理…...

使用VSCode Debugger 调试 React项目
一般我们调试代码时,用的最多的应该就是console.log方式了,还有的是使用Chrome DevTools 通过在对应的 sourcemap代码位置打断点进行调试,除了上面两种方式外还有一种更好用的调试方式: VSCode Debugger。 VSCode Debugger可以直…...

[创业之路-199]:《华为战略管理法-DSTE实战体系》- 3 - 价值转移理论与利润区理论
目录 一、价值转移理论 1.1. 什么是价值? 1.2. 什么价值创造 (1)、定义 (2)、影响价值创造的因素 (3)、价值创造的三个过程 (4)、价值创造的实践 (5&…...

AWTK-WEB 快速入门(2) - JS 应用程序
AWTK 可以使用相同的技术栈开发各种平台的应用程序。有时我们需要使用 Web 界面与设备进行交互,本文介绍一下如何使用 JS 语言开发 AWTK-WEB 应用程序。 用 AWTK Designer 新建一个应用程序 先安装 AWTK Designer: https://awtk.zlg.cn/web/index.html…...

dolphinscheduler服务注册中心源码解析(三)RPC提供者服务整合注册中心注册服务实现源码
RPC提供者服务整合注册中心注册服务实现源码 1.概述2.源码解读思路3.实现2.1.应用服务的RPC服务接口定义2.1.1.MasterServer应用中提供的RPC接口服务2.1.2.WorkerServer应用中提供的RPC接口服务2.2.应用服务的RPC服务接口实现2.2.1.MasterServer应用中提供的RPC接口服务实现类2…...

电脑不小心删除了msvcr120.dll文件怎么办?“缺失msvcr120.dll文件”要怎么解决?
一、文件丢失与损坏的常见原因及解决办法 1. 不小心删除系统文件 常见情况:有时在清理电脑垃圾文件时,可能会不小心删除一些重要的系统文件,如msvcr120.dll等。解决办法: 恢复文件:如果刚删除不久,可以尝…...
js 深度克隆
深度克隆(Deep Clone)是指复制一个对象或数组及其所有嵌套结构的副本,使得克隆后的对象与原对象完全独立。JavaScript 提供了一些方法实现深度克隆,但每种方法有其优缺点。 1. 常用方法 1.1 使用 JSON.parse 和 JSON.stringify …...

深度学习之超分辨率算法——FRCNN
– 对之前SRCNN算法的改进 输出层采用转置卷积层放大尺寸,这样可以直接将低分辨率图片输入模型中,解决了输入尺度问题。改变特征维数,使用更小的卷积核和使用更多的映射层。卷积核更小,加入了更多的激活层。共享其中的映射层&…...
软件测试之压力测试【详解】
压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃。它甚至可以测试超出正常工作点的测试,并评估软件在极端…...

电脑出现 0x0000007f 蓝屏问题怎么办,参考以下方法尝试解决
电脑蓝屏是让许多用户头疼的问题,其中出现 “0x0000007f” 错误代码更是较为常见且棘手。了解其背后成因并掌握修复方法,能帮我们快速恢复电脑正常运行。 一、可能的硬件原因 内存问题 内存条长时间使用可能出现物理损坏,如金手指氧化、芯片…...

分布式系统架构:限流设计模式
1.为什么要限流? 任何一个系统的运算、存储、网络资源都不是无限的,当系统资源不足以支撑外部超过预期的突发流量时,就应该要有取舍,建立面对超额流量自我保护的机制,而这个机制就是微服务中常说的“限流” 2.四种限流…...
G口带宽服务器与1G独享带宽服务器:深度剖析其差异
在数据洪流涌动的数字化时代,服务器作为数据处理的核心,其性能表现直接关系到业务的流畅度和用户体验的优劣。随着技术的飞速发展,G口带宽服务器与1G独享带宽服务器已成为众多企业的优选方案。然而,这两者之间究竟有何细微差别&am…...

Flamingo:少样本多模态大模型
Flamingo:少样本多模态大模型 论文大纲理解1. 确认目标2. 分析过程(目标-手段分析)3. 实现步骤4. 效果展示5. 金手指 解法拆解全流程核心模式提问Flamingo为什么选择使用"固定数量的64个视觉tokens"这个特定数字?这个数字的选择背…...

推荐一款免费且好用的 国产 NAS 系统 ——FnOS
一、系统基础信息 开发基础:基于最新的Linux内核(Debian发行版)深度开发,兼容主流x86硬件(ARM还没适配),自由组装NAS,灵活扩展外部存储。 使用情况:官方支持功能较多&am…...

2025系统架构师(一考就过):案例题之一:嵌入式架构、大数据架构、ISA
一、嵌入式系统架构 软件脆弱性是软件中存在的弱点(或缺陷),利用它可以危害系统安全策略,导致信息丢失、系统价值和可用性降低。嵌入式系统软件架构通常采用分层架构,它可以将问题分解为一系列相对独立的子问题,局部化在每一层中…...
开机存活脚本
vim datastadard_alive.sh #!/bin/bashPORT18086 # 替换为你想要检查的端口号 dt$(date %Y-%m-%d)# 使用netstat检查端口是否存在 if netstat -tuln | grep -q ":$PORT"; thenecho "$dt Port $PORT is in use" > /opt/datastadard/logs/alive.log# 如…...

车载网关性能 --- GW ECU报文(message)处理机制的技术解析
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...

CosyVoice安装过程详解
CosyVoice安装过程详解 安装过程参考官方文档 前情提要 环境:Windows子系统WSL下安装的Ubunt22.4python环境管理:MiniConda3git 1. Clone代码 $ git clone --recursive https://github.com/FunAudioLLM/CosyVoice.git # 若是submodule下载失败&…...

传统网络架构与SDN架构对比
传统网络采用分布式控制,每台设备独立控制且管理耗时耗力,扩展困难,按 OSI 模型分层,成本高、业务部署慢、安全性欠佳且开放性不足。而 SDN 架构将控制平面集中到控制器,数据转发由交换机负责,可统一管理提…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...