从零创建一个 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 架构将控制平面集中到控制器,数据转发由交换机负责,可统一管理提…...

如何打造用户友好的维护页面:6个创意提升WordPress网站体验
在网站运营中,无论是个人博主还是大型企业网站的管理员,难免会遇到需要维护的情况。无论是服务器迁移、插件更新,还是突发的技术故障,都可能导致网站短暂无法访问。这时,设计维护页面能很好的缓解用户的不满࿰…...

【hackmyvm】Zday靶机wp
HMVrbash绕过no_root_squash静态编译fogproject 1. 基本信息^toc 这里写目录标题 1. 基本信息^toc2. 信息收集2.1. 端口扫描2.2. 目录扫描 3. fog project Rce3.1. ssh绕过限制 4. NFS no_root_squash5. bash运行不了怎么办 靶机链接 https://hackmyvm.eu/machines/machine.ph…...

redis使用注意哪些事项
1. 数据类型选择: • Redis支持多种数据类型,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。在选择…...

步进电机位置速度双环控制实现
步进电机位置速度双环控制实现 野火stm32电机教学 提高部分-第11讲 步进电机位置速度双环控制实现(1)_哔哩哔哩_bilibili PID模型 位置环作为外环,速度环作为内环。设定目标位置和实际转轴位置的位置偏差,经过位置PID获得位置期望,然后讲位置期望(位置变化反映了转轴的速…...

优化程序中的数据:从数组到代数
前言 我们往往都希望优化我们的程序,使之达到一个更好的效果,程序优化的一个重点就是速度,加快速度的一个好办法就是使用并行技术,但是,并行时我们要考虑必须串行执行的任务,也就是有依赖关系的任务&#…...

【电商搜索】CRM: 具有可控条件的检索模型
【电商搜索】CRM: 具有可控条件的检索模型 目录 文章目录 【电商搜索】CRM: 具有可控条件的检索模型目录文章信息摘要研究背景问题与挑战如何解决核心创新点算法模型实验效果(包含重要数据与结论)相关工作后续优化方向 后记 https://arxiv.org/pdf/2412.…...

使用 ffmpeg 拼接合并视频文件
按顺序拼接多个视频文件 1、创建文件清单 创建一个文本文件 filelist.txt,列出所有要合并的视频文件。 格式如下: file path/to/video1.mp4 file path/to/video2.mp4 file path/to/video3.mp42、合并文件 下载FFmpeg,然后使用FFmpeg进行…...

【信号滤波 (上)】傅里叶变换和滤波算法去除ADC采样中的噪声(Matlab/C++)
目录 一、ADC采样的噪声简介1.1 常见的ADC噪声来源 二、信号的时域到频域转换2.1 傅里叶变换巧记傅里叶变换 三、傅里叶变换和滤波算法工程实现3.1 使用Matlab计算信号时域到频域的变换3.2 使用Matlab去除特定频点噪声寻找峰值算噪声频率构建陷波滤波器滤除噪声频点陷波滤波器与…...

Idea内,光标显示问题
键盘误触导致光标显示为白色块 解决方式 任选其一 键盘敲击 Ins 键(既 insert 键)Shift 0(数字零)...

回顾 python3中字符串
一. 简介 前面学习了 python3中的字符串, 本文回顾一下 python3中的字符串。 二. python3中的字符串 1. 创建字符串 字符串是 python中最常用的数据类型。我们可以使用引号( 或者 " )来创建字符串。 创建字符串很简单,…...