Django 入门详解:从零开始构建你的第一个 Web 应用

Django 是一个高级的 Python Web 框架,鼓励快速开发和干净、实用的设计。它遵循“不要重复造轮子(Don't Repeat Yourself, DRY)”的原则,内置了诸如用户认证、内容管理、表单处理等常见功能,非常适合构建内容驱动的网站。

本文将带你从零开始,逐步了解 Django 的基本概念、项目结构、视图、模板、模型、路由等核心内容,并通过一个简单的博客应用示例,帮助你快速上手 Django 开发。


一、Django 简介

1. 什么是 Django?

Django 是一个由 Python 编写的开源 Web 框架,采用 MTV(Model-Template-View) 架构模式:

  • Model(模型):负责与数据库交互,定义数据结构。
  • Template(模板):负责展示层,即 HTML 页面。
  • View(视图):处理业务逻辑,决定将哪些数据展示给模板。

2. Django 的特点

  • 快速开发:内置大量实用功能,减少重复开发。
  • 安全性强:自动防御常见的安全漏洞(如 XSS、CSRF)。
  • 可扩展性高:支持多数据库、缓存、中间件等高级功能。
  • 社区活跃:拥有庞大的社区和丰富的第三方库。

二、安装 Django

1. 安装 Python 环境

确保你已安装 Python 3.8+,可以通过以下命令检查:

python --version

2. 创建虚拟环境(推荐)

python -m venv venv
source venv/bin/activate  # Linux/macOS
venv\Scripts\activate     # Windows

也可以使用conda

3. 安装 Django

pip install django

验证是否安装成功:

python -m django --version

三、创建你的第一个 Django 项目

1. 创建项目

django-admin startproject mysite
cd mysite

目录结构如下:

mysite/
├── manage.py
└── mysite/├── __init__.py├── settings.py├── urls.py└── wsgi.py

2. 启动开发服务器

python manage.py runserver

访问 http://127.0.0.1:8000/,看到 Django 的欢迎页面表示项目创建成功。


四、创建第一个应用(App)

Django 鼓励将功能模块化,一个项目可以包含多个应用(App)。

1. 创建应用

python manage.py startapp blog

目录结构如下:

blog/
├── migrations/
├── __init__.py
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py

2. 注册应用

打开 mysite/settings.py,在 INSTALLED_APPS 中添加:

INSTALLED_APPS = [...'blog',
]

五、编写第一个视图(View)

blog/views.py 中添加:

from django.http import HttpResponsedef index(request):return HttpResponse("欢迎来到我的博客!")

配置 URL 路由

  1. blog 目录下创建 urls.py
# blog/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('', views.index, name='index'),
]
  1. 在主项目的 urls.py 中包含:
# mysite/urls.py
from django.urls import include, pathurlpatterns = [path('blog/', include('blog.urls')),
]

现在访问 http://127.0.0.1:8000/blog/,你会看到页面显示“欢迎来到我的博客!”。


六、使用模板(Template)

1. 创建模板目录

blog 应用下创建 templates/blog/ 目录:

blog/
└── templates/└── blog/└── index.html

index.html 中写入:

<!DOCTYPE html>
<html><head><title>我的博客</title></head><body><h1>欢迎来到我的博客!</h1></body>
</html>

2. 修改视图使用模板

# blog/views.py
from django.shortcuts import renderdef index(request):return render(request, 'blog/index.html')

刷新页面,你会看到渲染后的 HTML 页面。


七、使用模型(Model)管理数据

1. 定义模型

blog/models.py 中定义一个博客文章模型:

from django.db import modelsclass Post(models.Model):title = models.CharField(max_length=200)content = models.TextField()pub_date = models.DateTimeField(auto_now_add=True)def __str__(self):return self.title

2. 生成迁移文件

bash深色版本python manage.py makemigrations

3. 应用迁移

python manage.py migrate

4. 注册模型到 Admin

blog/admin.py 中注册模型:

from django.contrib import admin
from .models import Postadmin.site.register(Post)

5. 创建超级用户

python manage.py createsuperuser

登录 http://127.0.0.1:8000/admin,你可以添加、编辑、删除博客文章。


八、展示数据库中的数据

1. 修改视图,展示所有文章

def index(request):posts = Post.objects.all()return render(request, 'blog/index.html', {'posts': posts})

2. 修改模板,显示文章列表

<!-- blog/index.html -->
<h1>我的博客</h1>
<ul>{% for post in posts %}<li>{{ post.title }} - {{ post.pub_date }}</li>{% endfor %}
</ul>

九、总结

通过本文,你已经完成以下内容:

  • 创建了一个 Django 项目和应用
  • 编写了第一个视图并配置了 URL 路由
  • 使用模板渲染 HTML 页面
  • 定义模型并与数据库交互
  • 使用 Admin 管理后台
  • 查询并展示数据库中的数据

这只是 Django 的冰山一角。接下来可以学习:

  • 表单处理(Form)
  • 用户认证(Authentication)
  • REST API(使用 Django REST Framework)
  • 部署到生产环境(如 Nginx + Gunicorn)

十、推荐学习路径

  1. 官方文档:Django documentation | Django documentation | Django
  2. 推荐书籍:
    • 《Django for Beginners》
    • 《Django for APIs》
  1. 推荐项目练习:
    • 博客系统
    • 任务管理系统
    • 电商网站

附录:常用命令汇总

命令

说明

django-admin startproject

创建项目

python manage.py startapp

创建应用

python manage.py runserver

启动开发服务器

python manage.py makemigrations

生成迁移文件

python manage.py migrate

应用迁移

python manage.py createsuperuser

创建管理员用户

python manage.py shell

进入 Django Shell

python manage.py test

运行测试

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

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

相关文章

[3-02-02].第04节:开发应用 - RequestMapping注解的属性2

SpringMVC学习大纲 注解的源码&#xff1a; 三、注解的params属性 3.1.params属性的理解&#xff1a; params属性用来通过设置请求参数来映射请求。对于RequestMapping注解来说&#xff1a; params属性也是一个数组&#xff0c;不过要求请求参数必须和params数组中要求的所有…

layui表格多选及选中

多选获取选中数据//获取选中行数据 var tbData table.cache["tablist2"]; var chkDatas tbData.filter(s > s.LAY_CHECKED true); if (vm.isEmpty(chkDatas) || chkDatas.length 0) {os.error("未选中数据&#xff01;");return; }单选选中样式及数…

卡尔曼滤波数据融合

状态向量&#xff1a;位置和速度 [x, y, vx, vy]预测阶段&#xff1a;用加速度估算速度和位置&#xff08;IMU数据&#xff09;更新阶段&#xff1a;用 GPS 位置修正漂移&#xff08;每隔一定时间才来一次&#xff09;import numpy as np# 时间步长&#xff08;秒&#xff09; …

Qwen3-8B 的 TTFT 性能分析:16K 与 32K 输入 Prompt 的推算公式与底层原理详解

一、模型概述与上下文支持能力Qwen3-8B 是通义实验室推出的 80 亿参数大语言模型&#xff0c;支持 32,768 token 的上下文长度 。其核心优化点包括&#xff1a;FP8 量化技术&#xff1a;通过将权重从 32-bit 压缩至 8-bit&#xff0c;显著降低显存占用并提升推理效率&#xff0…

【Spring Cloud Gateway 实战系列】基础篇:路由、断言、过滤器、负载均衡深度解析

一、引言在微服务架构中&#xff0c;API网关是流量的统一入口&#xff0c;承担着路由转发、流量管控、安全防护等核心职责。Spring Cloud Gateway作为Spring官方推荐的第二代网关&#xff0c;基于Spring 5.0、Spring Boot 2.0和Project Reactor构建&#xff0c;提供了高性能的响…

基于springboot的乡村旅游在线服务系统/乡村旅游网站

管理员&#xff1a;登录&#xff0c;个人中心&#xff0c;用户管理&#xff0c;景点类型管理&#xff0c;旅游景点管理&#xff0c; 酒店信息管理&#xff0c;旅游线路管理&#xff0c;门票预订管理&#xff0c;酒店预订管理&#xff0c;旅游攻略管理&#xff0c;社区互动&…

JavaWeb笔记12

登录的问题&#xff1a;用户两次登录后会生成新旧两个令牌&#xff0c;此时旧的不应该生效要使旧的失效&#xff1a;令牌主动失效机制 登录成功后&#xff0c;给浏览器响应令牌的同时&#xff0c;把该令牌存储到redis中 LoginInterceptor拦截器中&#xff0c;需要验证浏览器携带…

算法牢笼与思想飞地:在人工智能时代守卫灵魂的疆域

当手指在键盘上敲下“帮我写一篇关于XX的文章”&#xff0c;当屏幕上的“智能助手”瞬间输出结构完整、引经据典的文字&#xff0c;当算法为我们精准推送“你可能感兴趣”的一切——我们正被一种前所未有的认知便利所包围。然而&#xff0c;在这层包裹着效率与舒适的华丽外衣之…

WebAssembly浏览器指纹识别技术——实验评估与应用展望(下篇)

引言 在上篇文章中,我们详细阐述了基于WebAssembly的浏览器指纹识别技术的理论基础和核心方法。本文将进一步展示该技术在实际应用中的表现,通过大规模的实验验证其有效性,并深入探讨相应的防护策略。同时,我们也将客观分析该技术的应用前景与潜在风险,为相关领域的研究和…

kafka--基础知识点--5.4--max.in.flight.requests.per.connection

一、参数定义 max.in.flight.requests.per.connection 是 Kafka 生产者客户端配置参数&#xff0c;用于控制生产者与单个 Broker 连接中未确认请求的最大数量。简单来说&#xff0c;它限制了生产者在等待之前发送的消息确认&#xff08;ACK&#xff09;时&#xff0c;可以同时向…

【Spring AI 0基础教程】1、基础篇 环境搭建 - 智能天气预报助手

基础篇 | 环境搭建 - 智能天气预报助手 一、什么是 Spring AI Spring AI (https://spring.io/projects/spring-ai)]是 Spring 官方于 2023 年推出的 AI 应用开发框架&#xff0c;它如同 AI 世界的"Spring 生态连接器"&#xff0c;致力于简化开发集成了 AI 功能的应…

深入浅出MyBatis缓存:如何让数据库交互飞起来

深入浅出MyBatis缓存&#xff1a;如何让数据库交互飞起来你是否遇到过这样的场景&#xff1a;系统在高并发下响应缓慢&#xff0c;数据库监控显示CPU飙升&#xff0c;日志里充斥着大量重复SQL&#xff1f;作为开发者&#xff0c;我曾亲眼目睹一个简单的配置查询拖垮整个系统。今…

【计算机考研(408)- 数据结构】绪论

绪论 基本概念&#xff08;理解即可&#xff09; 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别 和处理的符号的集合。数据是计算机程序加工的原料。&#xff08;For Example : 声音/图像/字符串等&#xff09; 数据元…

嵌入式学习-土堆PyTorch(9)-day25

进入尾声&#xff0c;一个完整的模型训练 &#xff0c;点亮的第一个led#自己注释版 import torch import torchvision.datasets from torch import nn from torch.utils.tensorboard import SummaryWriter import time # from model import * from torch.utils.data import Dat…

Java变量详解:局部变量、成员变量、类变量区别及使用场景

作为Java开发者&#xff0c;深入理解不同变量的特性是写出高质量代码的基础。本文将为你全面解析三种核心变量类型&#xff0c;并通过实战案例展示它们的正确使用方式。一、变量类型概览 1. 局部变量&#xff08;Local Variable&#xff09; 定义&#xff1a;在方法、构造方法或…

【收集电脑信息】collect_info.sh

收集电脑信息 collect_info.sh #!/bin/bashoutput"info.txt" > "$output"# 1. OS Version echo " 操作系统名称及版本 " >> "$output" lsb_release -d | cut -f2- >> "$output" echo -e "\n" >…

服务器清理空间--主要是conda环境清理和删除

1.查看空间情况 (base) zhouy24RL-DSlab:~/zhouy24Files$ df -h Filesystem Size Used Avail Use% Mounted on udev 252G 0 252G 0% /dev tmpfs 51G 4.9M 51G 1% /run /dev/nvme0n1p3 1.9T 1.7T 42G 98% / tmpfs 252G …

UE5多人MOBA+GAS 26、为角色添加每秒回血回蓝(番外:添加到UI上)

文章目录添加生命值和蓝量的状态标签创建无限GE并应用监听添加和去除标签每秒回复配上UI添加生命值和蓝量的状态标签 添加新的标签 CRUNCH_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Stats_Health_Full)CRUNCH_API UE_DECLARE_GAMEPLAY_TAG_EXTERN(Stats_Health_Empty)CRUNCH_API U…

MetaGPT源码剖析(三):多智能体系统的 “智能角色“ 核心实现——Role类

每一篇文章都短小精悍&#xff0c;不啰嗦。今天我们来深入剖析Role类的代码实现。在多智能体协作系统中&#xff0c;Role&#xff08;角色&#xff09;就像现实世界中的 "员工"&#xff0c;是执行具体任务、参与协作的基本单位。这段代码是 MetaGPT 框架的核心&#…

【项目经验】小智ai MCP学习笔记

理论 1、什么是MCP MCP(Model Context Protocol&#xff0c;模型上下文协议)是一种开放式协议&#xff0c;它实现了LLM与各种工具的调用。使LLM从对话、生成式AI变成了拥有调用三方工具的AI。用官方的比喻&#xff0c;MCP就是USB-C接口&#xff0c;只要实现了这个接口&#x…