【Django】-1- 开发项目搭建

 一、PDM + Django 搭建项目👇

🎯 核心目标

用 PDM(更现代的 Python 包管理工具),快速创建并管理 Django 项目(Web 框架),让开发流程更丝滑✨

🧩 分步拆解

1. 创建项目

用 PDM 初始化环境 + 安装 Django + 创建 Django 项目结构

  • pip install pdm:先装 PDM 包管理工具 🛠️
  • pdm init:初始化 PDM 项目,生成 pyproject.toml(项目配置文件) 🔧
  • pdm add django:用 PDM 装 Django 依赖 📦
  • pdm run django-admin startproject Tesla ./:通过 PDM 执行命令,创建 Django 项目(命名 Tesla) 🏗️

2. 启动 Django 服务

项目创建好后,用 manage.py 启动开发服务器

  • python manage.py runserver:启动 Django 本地服务 🚀
  • 输出里的 http://127.0.0.1:8000/ 就是访问地址啦~ 浏览器打开就能看项目前台 🌐
  • 提示 18 unapplied migrations?别慌!这是 Django 内置表还没创建,后面用 migrate 命令解决 🐛

3. 项目结构梳理

从 “新建目录→虚拟环境→配置文件→Django 核心文件” 一步步搭架子

  • PyCharm 项目:新建文件夹 + 虚拟环境(隔离项目依赖) 🌿
  • PDM 项目:生成 pyproject.toml(记录依赖、脚本等配置) 📄
  • Django 项目:创建同名包(如 Tesla 文件夹) + manage.py(Django 命令入口) ⚙️

4. 自定义管理命令

用 PDM 的 scripts 配置,把常用 Django 命令 “封装” 成快捷指令,不用每次敲长命令啦~

toml

[tool.pdm.scripts]
init = { composite = ["makeM","M","createadmin",
]}makeM = 'python manage.py makemigrations'M = 'python manage.py migrate'R = 'python manage.py runserver' # --noreloadT = 'python manage.py test'createadmin = '''python manage.py shell -c "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'admin@example.com', 'adminpass')"'''
  • 在 pyproject.toml 里加 [tool.pdm.scripts]
    • init:组合多个命令(makemigrations 做迁移文件、migrate 执行迁移、createsuperuser 建管理员) 🔄
    • makeM/M/createadmin:分别对应单个 Django 命令(生成迁移、执行迁移、创建超级用户) 🛠️
    • 效果:以后敲 pdm run init,就能一键执行多个操作,超方便! 🚀

5. 快捷命令 & 项目预览
  • PDM 快捷指令
    • pdm run init:一键初始化(建表 + 超级用户) 🔧
    • pdm run R:启动 Django 服务(替代 python manage.py runserver) 🚀
    • pdm run T:执行 Django 测试(python manage.py test) 🧪
  • 项目访问
    • 前台:http://127.0.0.1:8000/(Django 默认首页) 🌐
    • 后台:http://127.0.0.1:8000/admin/(管理员入口) 🔐
    • 默认账号:admin/adminpass 👑

💻 创建 App

bash

python manage.py startapp yifei

  • 作用:用 Django 内置命令 startapp,创建一个名为 yifei 的 App 文件夹及基础结构 🏗️
  • 生成的文件:会在项目里新增 yifei/ 目录,包含 models.py(写数据库模型)、views.py(写视图逻辑)、apps.py(App 配置)等文件,这些是开发功能模块的基础文件~

注册 App(为啥要设置)

“在项目的设置中,把 yifei 加载到安装列表” → 要修改 Django 项目的 settings.py 文件:

INSTALLED_APPS = [# 其他已有的 App...'yifei',  # 把这行加上,告诉 Django 识别并启用这个 App
]

  • 作用:Django 项目像一个 “大容器”,INSTALLED_APPS 是 “已安装 App 清单” 📜
  • 必须注册的原因:只有加到这里,Django 才会加载 yifei 里的模型、路由、静态文件等,比如执行数据库迁移、访问 App 里的视图,都得先注册!

二、视图和路由 

视图是干啥的?👉 网站的 “小管家”

视图(View)就像你点外卖时,商家接到订单、准备餐品、再送餐的过程~

  • 👉 接收请求:用户用浏览器访问网址(比如 http://xxx/help ),这就是给 Django 发了个 HTTP 请求,视图会 “接住” 这个请求 👐
  • 👉 处理并生成响应:视图收到请求后,会处理逻辑(比如拼一个 hello world 内容),然后返回 HTTP 响应(把内容给用户看),就像商家做好餐、打包好给你送过来~

# 1. 定义视图函数:def 是“定义函数”的关键字,help 是函数名(你取的),request 是“请求对象”(装着用户的访问信息)
def help(request):  # 2. 准备响应内容:拼一个简单的字符串,相当于准备要给用户的“餐品”html = "hello world"  # 3. 返回响应:用 HttpResponse 把内容包起来,送给用户! HttpResponse 是 Django 帮我们生成响应的工具~return HttpResponse(html)  

  • request:用户的 “订单” 信息都在这儿(比如访问时间、带的参数等)📦
  • HttpResponse:把内容变成 “能送出去的外卖”,让浏览器能显示出来 🚀

把 Django 项目想成一家 “网站餐厅” 🍴:

  • 👉 用户访问网址 = 点外卖(发请求)
  • 👉 视图函数 = 后厨 “做菜的厨师”👨🍳:接到订单(request)→ 做内容(html = "hello world")→ 打包好(HttpResponse)→ 给用户送餐(返回响应)
  • 👉 最后用户浏览器显示 hello world = 收到外卖,开心开吃~

路由的作用

路由(URL 配置)就是 “网址和视图的连接器” 🔗:

  • 用户访问 http://xxx/hello123 → 路由匹配到 hello123 → 找到对应的视图函数(比如 hello)→ 执行函数返回内容给用户

简单说:路由决定了 “访问哪个网址,执行哪个视图” ,是 Django 里 “网址导航” 的关键~

项目主路由(Tesla/urls.py

项目的 urls.py 是 总入口 ,负责把 App 的路由 “包含” 进来:

from django.contrib import admin
from django.urls import path, include  # include 用来“包含”其他 App 的路由urlpatterns = [path("admin/", admin.site.urls),  # 后台管理的路由(默认自带)# 重点在这行!空字符串 '' 表示“根路径下的子路由交给 yifei.urls 处理”path('', include("yifei.urls"))  
]

  • path('', include("yifei.urls")):意思是 “只要访问的网址是根路径下的(比如 http://xxx/xxx ),就去 yifei 这个 App 的 urls.py 里找具体的路由规则” 🌳

2. 图 2:App 级路由(yifei/urls.py

每个 App 可以有自己的 urls.py ,负责配置 当前 App 内部的 URL 和视图的对应关系 :

from django.urls import path
# 从当前 App 的 views.py 导入视图函数 hello(假设你在 yifei/views.py 里写了 hello 函数)
from .views import hello  urlpatterns = [# 配置:访问 'hello123' 这个路径时,执行 hello 视图函数path('hello123', hello),  
]

  • path('hello123', hello):当用户访问 http://xxx/hello123 → 触发 hello 视图函数 → 返回内容 🌍

3. 图 3:路由的总结 + 重启服务
  • 创建路由:就是写好 App 内的 urls.py ,配置 URL 和视图的对应关系(如 path('hello123', hello) )
  • 重启程序:因为修改了路由配置,需要重启 Django 服务让改动生效~
    • 用 PDM 的话,执行 pdm run R(对应 python manage.py runserver )重启服务 🚀

完整流程梳理(超清晰版)

  1. 用户访问网址:比如 http://127.0.0.1:8000/hello123
  2. 项目主路由匹配Tesla/urls.py 里的 path('', include("yifei.urls")) → 发现是空路径,交给 yifei.urls 处理
  3. App 路由匹配:yifei/urls.py 里的 path('hello123', hello) → 匹配到 hello123 ,执行 hello 视图函数
  4. 视图返回内容hello 函数处理逻辑(比如返回 hello world )→ 内容返回给用户浏览器

举个🌰(用户访问流程)

假设项目启动后,本地地址是 http://127.0.0.1:8000 :

  • 用户在浏览器输入 http://127.0.0.1:8000/hello123
  • 路由依次匹配:主路由 → App 路由 → 找到 hello 视图 → 执行函数 → 用户看到 hello 视图返回的内容~

为啥要分 “项目路由” 和 “App 路由”?

  • 解耦:每个 App 自己管自己的路由,项目主路由只负责 “分配任务”,代码更清晰 ✨
  • 可扩展:比如再加一个 blog App ,只需要在主路由里加 path('blog/', include('blog.urls')) ,让 blog 自己管理内部路由即可~

这样拆分后,整个路由系统就像 “大树的枝干” :主路由是树干,App 路由是树枝,每个树枝上的叶子是具体的视图~  😊

 

  # Django   

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

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

相关文章

c++:设计模式训练

写一个鸟类:有一个多态函数:run 写一个企鹅类,继承自鸟类:重写 run 写一个鸵鸟类,继承自鸟类,重写 run 写一个老鹰类,继承自鸟类,重写run 写一个鸟笼,能够存放 不同的鸟…

配置Mybatis环境

配置Mybatis环境MyBatis是什么配置Mybatis环境MyBatis是什么 MyBatis 一个支持普通 SQL 查询、存储过程以及高级映射的持久层框架。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作,使得开发者可以更专注于 SQL 本身,而不必花费过多…

生产环境中基于Istio的Kubernetes多集群灰度发布架构实战经验分享

生产环境中基于Istio的Kubernetes多集群灰度发布架构实战经验分享 在大规模分布式微服务架构中,如何在多集群环境下平滑、安全地发布新版本,一直是保证高可用、高可靠的关键需求。本文以真实生产环境案例为基础,分享我们团队基于Istio Servic…

Kubernetes(k8s)之认识Pod

01了解Pod Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。 一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。它可能由单个容器或多个容器共享组成的资源。 Kubern…

Nginx服务做负载均衡网关

1. 概述 内部Nginx服务器做服务网关,代理后端应用服务,卸载ssl域名证书,将接收的https请求,转发至后端http服务。华为防火墙负责NAT,启用服务器负载均衡功能,将公网虚拟IP端口映射到内部多台Nginx服务器上…

十三、请求响应-请求:日期参数和JSON参数

日期参数代码:日期参数 //日期时间参数RequestMapping("/dataParam")public String dataParam(DateTimeFormat(pattern "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){System.out.println(updateTime);return "OK";}结果JSON参…

可信数据库大会现场,TDengine 时序数据库展示核电场景下的高性能与 AI 创新

设备在升级,场站在扩建,但数据系统却还在“跟不上”。这正是许多核电企业在推进数字化转型过程中最真实的感受。高频采集、长周期存储、精度要求高……这些构成了对数据库系统的“炼狱级考验”。在这样一个背景下,国产数据库的能力边界正在被…

ctflearn-POST practice

靶场地址:165.227.106.113/post.php 解题: 一.分析题目 提示: 知道要用POST请求提交表单,看一下源码信息 得到可能需要用post请求方式去提交表单,并且传数据admin和password,这边提供两种方式 方法一&…

FPGA实现OV7670摄像头图像处理至VGA显示器

本文还有配套的精品资源,点击获取 简介:本项目基于FPGA技术,结合OV7670摄像头传感器进行视频捕获,经SDRAM存储,并通过VGA显示器展示。同时,集成了中值滤波算法提高图像清晰度。该项目涉及数字图像处理系…

使用python写一套完整的智能体小程序

创建一个简单的智能体(Agent)程序在人工智能和自动化任务中,智能体(Agent)是指能够感知环境并通过决策和行动来实现目标的实体。Python 提供了丰富的库和框架,可以用于构建智能体程序,例如使用 …

电商项目_性能优化_海量数据读写、存储、检索

海量数据读写方式选择高并发读写场景分析无论任何业务系统,无非就是两个操作:写和读。 在海量数据和高并发的场景下,写和读就会成为系统性能的瓶颈。下面分析不同业务场景下面临的问题:侧重“高并发读”的系统场景1:搜…

RabbitMQ面试精讲 Day 9:优先级队列与惰性队列

【RabbitMQ面试精讲 Day 9】优先级队列与惰性队列 文章标签 RabbitMQ,优先级队列,惰性队列,消息队列,面试技巧,系统架构 文章简述 本文是"RabbitMQ面试精讲"系列第9天,深入解析优先级队列与惰性队列的实现原理与实战应用。文章详细讲解优先级队列的排…

[硬件电路-121]:模拟电路 - 信号处理电路 - 模拟电路中常见的难题

模拟电路设计是电子工程中极具挑战性的领域,其核心难题源于信号的连续性、元件的非理想特性以及环境干扰的复杂性。以下是模拟电路中常见的难题及其技术本质与解决方案:1. 噪声与干扰:信号的“隐形杀手”技术本质:模拟信号对微小电…

Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享优化中的应用(381)

Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享优化中的应用(381)引言:正文:一、智能停车的 “老大难”:不只是 “车位少” 那么简单1.1 车主与车位的 “错位困境”1.1.1 信息滞后的 “睁眼瞎”1.1.2 车…

基于落霞归雁思维框架的自动化测试实践与探索

基于落霞归雁思维框架的自动化测试实践与探索 在当今快速发展的软件开发领域,自动化测试已成为提高软件质量和开发效率的关键环节。本文将结合落霞归雁的思维框架——“观察现象 → 找规律 → 应用规律 → 实践验证”,探讨如何将其应用于自动化测试领域&…

Unity Shader编程进阶:掌握高阶渲染技术 C# 实战案例

Unity Shader编程完全入门指南:从零到实战 C# 本文将深入探讨Unity Shader编程的高级技术,包括自定义光照模型、后处理效果、GPU实例化、表面着色器深度应用等,帮助开发者提升渲染效果与性能优化能力。 提示:内容纯个人编写&#…

(论文速读)Text-IF:基于语义文本引导的退化感知交互式图像融合方法

论文信息论文题目:Text-IF: Leveraging Semantic Text Guidance for Degradation-Aware and Interactive Image Fusion(Text-IF:利用语义文本指导退化感知和交互式图像融合)会议:CVPR2024摘要:图像融合的目的是将不同源…

python创建一个excel文件

以下是使用Python根据指定名称创建Excel文件的两种实现方法,根据需求选择适合的方案:方法一:使用pandas库(适合结构化数据) # 安装依赖(命令行执行) # pip install pandas openpyxlimport panda…

C++高频知识点(十四)

文章目录66. 程序什么时候应该使用多线程,什么时候单线程效率高?67. 死锁的原因和避免死锁的避免预防死锁:破坏持有并等待条件68. TCP拥塞控制四个阶段轮换过程描述69. C的内存管理70. 构造函数可以是虚函数吗,析构函数呢66. 程序…

浅窥Claude-Prompting for Agents的Talk

Prompting for Agents先说一句:颜值这么高,你俩要出道啊。此图基本就是claude倡导的agent prompt结构了,可以看到经过一年时间的演变,基本都是follow这个结构去写prompt。我比较喜欢用Role→react→task→histroy→few shot→rule…