从零创建一个 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 项目,并设置数据库支持。核心流程包括:

  1. 安装 Django 和数据库驱动。
  2. 配置数据库连接。
  3. 创建应用和模型。
  4. 生成并应用迁移文件。
  5. 运行开发服务器并使用 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
    1. 注册应用;将新应用注册到项目的 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',
]
    1. 添加URL路由;为新应用配置URL,例如,在新应用blog中创建urls.py
# blog/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),  # 主页
]
    1. 在项目的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,而不需要定义模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/890460.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SH】在Ubuntu Server 24中基于Python Web应用的Flask Web开发(实现POST请求)学习笔记

文章目录 Flask开发环境搭建保持Flask运行Debug调试 路由和视图可变路由 请求和响应获取请求信息Request属性响应状态码常见状态码CookieSession 表单GET请求POST请求 Flask 在用户使用浏览器访问网页的过程中,浏览器首先会发送一个请求到服务器,服务器…

Latex+VsCode+Win10搭建

最近在写论文,overleaf的免费使用次数受限,因此需要使用本地的形式进行编译。 安装TEXLive 下载地址:https://mirror-hk.koddos.net/CTAN/systems/texlive/Images/ 下载完成直接点击iso进行安装操作。 安装LATEX Workshop插件 设置VsCode文…

Linux世界中的指挥家:进程管理

文章一览 前言一、多道程序设计1.1 顺序程序活动的特点1.2 多道程序设计1.3 程序并发执行的特征 二、进程概念2.1 进程定义进程的根本属性: 2.2 进程的基本特征 三、进程状态3.1 进程的基本状态3.2 进程状态的转换3.3 进程族系 四、进程管理命令4.1 查看进程状态4.1…

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读

LLMs之rStar:《Mutual Reasoning Makes Smaller LLMs Stronger Problem-Solvers》翻译与解读 导读:这篇论文提出了一种名为rStar的自我博弈互推理方法,用于增强小型语言模型 (SLMs) 的推理能力,无需微调或依赖更强大的模型。rStar…

软件测试面试题和简历模板(面试前准备篇)

一、问题预测 1、让简单介绍下自己(这个不用说了每次面试开场) 面试官,你好,我叫xxx,xx年本科毕业,从事软件测试将近3年的时间。在此期间做过一些项目也积累过一些经验,能够独立地完成软件测试…

BEVFormer论文总结

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers BEVFormer:利用时空变换从多相机图像中学习鸟瞰表示 研究团队:南京大学、上海AI实验室、香港大学 ​ 代码地址:https://g…

(补)算法刷题Day24: BM61 矩阵最长递增路径

题目链接 思路 方法一:dfs暴力回溯 使用原始used数组4个方向遍历框架 , 全局添加一个最大值判断最大的路径长度。 方法二:加上dp数组记忆的优雅回溯 抛弃掉used数组,使用dp数组来记忆遍历过的节点的最长递增路径长度。每遍历到已…

目标检测-R-CNN

R-CNN在2014年被提出,算法流程可以概括如下: 候选区域生成:利用选择性搜索(selective search)方法找出图片中可能存在目标的候选区域(region proposal) CNN网络提取特征:对候选区域进行特征提取(可以使用AlexNet、VGG等网络) 目…

Sigrity SystemSI仿真分析教程文件路径

为了方便读者能够快速上手和学会Sigrity SystemSI 的功能,将Sigrity SystemSI仿真分析教程专栏所有文章对应的实例文件上传至以下路径 https://download.csdn.net/download/weixin_54787054/90171488?spm1001.2014.3001.5503

harmony UI组件学习(1)

Image 图片组件 string格式,通常用来加载网络图片,需要申请网络访问权限:ohos.permission.INTERNET Image(https://xxx.png) PixelMap格式,可以加载像素图,常用在图片编辑中 Image(pixelMapobject) Resource格式,加…

【Linux进程】进程间通信(共享内存、消息队列、信号量)

目录 前言 1. System V IPC 2. 共享内存 系统调用接口 shmget ftok shmat shmdt shmctl 共享内存的读写 共享内存的描述对象 3. 消息队列 msgget msgsnd msgctl 消息队列描述对象 4. 信号量 系统调用接口 semget semctl 信号量描述对象 5. 系统层面IPC资源 6.…

模型 八角行为分析法(行为激发)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。激发行为的八大心理驱动力模型。 1 八角行为分析法的应用 1.1 支付宝蚂蚁森林 支付宝的蚂蚁森林是一个旨在鼓励用户参与环保活动的产品。用户通过日常的低碳行为(如步行、线上支付等&…

【数据结构练习题】链表与LinkedList

顺序表与链表LinkedList 选择题链表面试题1. 删除链表中等于给定值 val 的所有节点。2. 反转一个单链表。3. 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。4. 输入一个链表,输出该链…

网安瞭望台第16期

国内外要闻 Apache Struts 文件上传漏洞(CVE - 2024 - 53677) 近日,Apache Struts 被发现存在文件上传漏洞(CVE - 2024 - 53677),安恒 CERT 评级为 2 级,CVSS3.1 评分为 8.1。 漏洞危害&#x…

基于python使用UDP协议对飞秋进行通讯—DDOS

基于飞秋的信息传输 声明:笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 老规矩,封面在文末! 飞秋介绍 (…

JAVA:组合模式(Composite Pattern)的技术指南

1、简述 组合模式(Composite Pattern)是一种结构型设计模式,旨在将对象组合成树形结构以表示“部分-整体”的层次结构。它使客户端对单个对象和组合对象的使用具有一致性。 设计模式样例:https://gitee.com/lhdxhl/design-pattern-example.git 2、什么是组合模式 组合模式…

LeetCode:222.完全二叉树节点的数量

跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:222.完全二叉树节点的数量 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二…

MaxKB基于大语言模型和 RAG的开源知识库问答系统的快速部署教程

1 部署要求 1.1 服务器配置 部署服务器要求: 操作系统:Ubuntu 22.04 / CentOS 7.6 64 位系统CPU/内存:4C/8GB 以上磁盘空间:100GB 1.2 端口要求 在线部署MaxKB需要开通的访问端口说明如下: 端口作用说明22SSH安装…

基于指纹图像的数据隐藏和提取matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频&#xff09…

kubeadm一键部署K8S 集群架构

kubeadm一键部署K8S 集群架构(centos7) https://www.k8src.cn/ https://kubernetes.io/zh-cn/docs/home/ https://blog.csdn.net/m0_58709145/article/details/140128179 https://blog.csdn.net/jiaqijiaqi666/article/details/129745828 Kubeadm init报错[ERROR CRI]: contai…