Django作为Python最流行的Web开发框架之一,采用经典的MVT架构(Model-模型、View-视图、Template-模板),简化了Web项目的开发流程,让开发者能够快速搭建稳定、可扩展的Web应用。本文将从实战出发,详细讲解Django核心MVT的使用,适合Python Web入门开发者快速上手。
一、前置准备
- 已安装Python环境(建议3.8及以上版本,兼容Django稳定版),确保
pip包管理器可用。 - 安装Django框架:打开终端(Windows用CMD,Mac/Linux用终端),执行以下命令,网络不佳可使用国内镜像源加速。
# 常规安装(安装最新稳定版)
pip install django# 国内清华镜像源加速安装(解决下载慢、超时问题)
pip install django -i https://pypi.tuna.tsinghua.edu.cn/simple# 可选:安装指定版本(如3.2.x长期支持版,稳定性更高)
pip install django==3.2.20 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 验证Django安装成功:终端输入
django-admin --version,若显示对应版本号,说明安装完成。
二、第一步:创建Django项目与应用
Django中“项目”是整个Web应用的容器,“应用”是实现具体功能的模块(一个项目可包含多个应用),先完成基础项目搭建。
- 创建Django项目(以
my_blog为例,博客项目更易演示MVT功能):
django-admin startproject my_blog
- 进入项目目录:
cd my_blog
- 创建功能应用(以
article为例,负责文章相关功能):
python manage.py startapp article
- 注册应用(关键步骤,否则Django无法识别应用):
打开my_blog/settings.py,找到INSTALLED_APPS列表,添加article应用:
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 注册自定义应用article'article',
]
三、核心1:模型(Model)—— 定义数据结构与数据库交互
Model(模型)对应MVT架构的“数据层”,负责定义数据结构,与数据库进行交互,无需手动编写SQL语句,Django通过ORM框架自动映射到数据库表。
- 定义模型(以文章模型
Article为例):
打开article/models.py,编写如下代码,定义文章的标题、内容、发布时间等字段:
from django.db import models# 定义文章模型
class Article(models.Model):# 文章标题:字符类型,最大长度200,不允许为空title = models.CharField(max_length=200, verbose_name="文章标题")# 文章内容:文本类型,支持大量内容输入content = models.TextField(verbose_name="文章内容")# 发布时间:日期时间类型,自动设置为创建时的时间,无需手动填写publish_time = models.DateTimeField(auto_now_add=True, verbose_name="发布时间")# 自定义后台显示名称,便于管理def __str__(self):return self.title# 自定义模型元数据,优化后台显示class Meta:verbose_name = "文章"verbose_name_plural = "文章"
- 数据库迁移(将模型映射为数据库表):
Django默认使用SQLite数据库(无需额外配置,新手友好),执行以下两条命令完成迁移:
# 生成迁移文件(记录模型的修改)
python manage.py makemigrations# 执行迁移(将迁移文件应用到数据库,创建对应的数据表)
python manage.py migrate
- 注册模型到后台管理(可选,便于直观查看和操作数据):
打开article/admin.py,注册Article模型:
from django.contrib import admin
from .models import Article# 注册Article模型到后台管理系统
admin.site.register(Article)
- 创建超级用户(登录后台管理系统):
python manage.py createsuperuser
按照提示输入用户名、邮箱、密码(密码需满足复杂度要求),创建完成后即可登录后台。
四、核心2:视图(View)—— 处理请求与业务逻辑
View(视图)对应MVT架构的“逻辑层”,负责接收用户的HTTP请求,处理业务逻辑(如查询数据库、数据处理),最后返回响应结果给用户。
本文以函数视图(新手入门首选)为例,演示两种常见视图场景。
- 简单视图(无数据返回,基础演示):
打开article/views.py,编写如下代码,返回简单的字符串响应:
from django.http import HttpResponse# 简单视图:返回字符串响应
def index(request):# request:必选参数,封装了用户的HTTP请求信息return HttpResponse("欢迎来到我的博客!")
- 带数据查询的视图(查询Article模型数据,传递给模板):
在article/views.py中继续添加如下代码,查询所有文章数据,准备传递给模板:
from django.shortcuts import render
from .models import Article# 文章列表视图:查询所有文章,传递给模板
def article_list(request):# 查询Article模型中的所有数据,按发布时间倒序排列articles = Article.objects.all().order_by("-publish_time")# 封装要传递给模板的数据(上下文),字典格式,key为模板中要使用的变量名context = {"article_list": articles}# 渲染模板,返回响应(第一个参数为请求对象,第二个为模板文件名,第三个为上下文数据)return render(request, "article/article_list.html", context)
五、核心3:模板(Template)—— 展示数据与页面渲染
Template(模板)对应MVT架构的“表现层”,负责页面的HTML渲染,接收视图传递的上下文数据,将动态数据与静态页面结合,返回给用户直观的Web页面。
- 创建模板文件夹结构(最佳实践,避免模板冲突):
- 在
article应用下创建templates文件夹,再在其中创建article子文件夹(与应用名一致)。 - 最终目录结构:
article/templates/article/。
- 在
- 编写文章列表模板(接收视图传递的文章数据):
在article/templates/article/下创建article_list.html,编写如下HTML+Django模板语法代码:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>我的博客 - 文章列表</title><style>.article-item {margin: 20px 0;padding: 15px;border: 1px solid #eee;border-radius: 8px;}.article-title {color: #2c3e50;font-size: 18px;margin-bottom: 10px;}.article-time {color: #999;font-size: 12px;margin-bottom: 15px;}</style>
</head>
<body><h1 style="text-align: center; margin: 30px 0;">我的博客</h1><div class="article-container" style="width: 80%; margin: 0 auto;"><!-- 模板循环语法:遍历视图传递的article_list数据 -->{% for article in article_list %}<div class="article-item"><!-- 模板变量语法:获取文章标题 --><h3 class="article-title">{{ article.title }}</h3><!-- 模板变量语法:获取文章发布时间,格式化显示 --><p class="article-time">发布时间:{{ article.publish_time|date:"Y-m-d H:i:s" }}</p><!-- 模板变量语法:获取文章内容 --><p class="article-content">{{ article.content|truncatechars:200 }}</p></div>{% empty %}<!-- 当article_list为空时,显示提示信息 --><p style="text-align: center; color: #999;">暂无文章,敬请期待!</p>{% endfor %}</div>
</body>
</html>
说明:Django模板支持`{{ 变量名 }}`(获取数据)、`{% 语法标签 %}`(循环、判断等)、`|`(过滤器,格式化数据),新手只需掌握基础语法即可满足大部分需求。
六、关键桥梁:URL配置—— 路由映射到视图
Django通过URL配置将用户访问的URL地址映射到对应的视图函数,是连接用户请求与视图的关键桥梁,需分别配置项目URL和应用URL。
- 配置项目URL(根路由):
打开my_blog/urls.py,引入include,配置根路由指向article应用的URL:
from django.contrib import admin
from django.urls import path, includeurlpatterns = [# 后台管理系统URLpath('admin/', admin.site.urls),# 根路径指向article应用的URL配置path('', include('article.urls')),
]
- 配置应用URL(子路由):
在article应用下创建urls.py文件(需手动创建),编写如下代码,映射URL到对应的视图函数:
from django.urls import path
from . import viewsurlpatterns = [# 首页:映射到index视图path('', views.index, name='index'),# 文章列表页:映射到article_list视图path('articles/', views.article_list, name='article_list'),
]
七、运行项目,验证MVT效果
- 启动Django开发服务器:
python manage.py runserver
- 访问验证:
- 打开浏览器,输入
http://127.0.0.1:8000/,可看到视图index返回的“欢迎来到我的博客!”。 - 输入
http://127.0.0.1:8000/articles/,可看到模板渲染的文章列表页面(暂无文章,显示“暂无文章,敬请期待!”)。 - 输入
http://127.0.0.1:8000/admin/,使用之前创建的超级用户登录,进入后台管理系统,可添加文章数据,添加完成后刷新articles/页面,即可看到动态渲染的文章列表。
- 打开浏览器,输入
八、MVT核心总结与常见注意事项
- MVT架构分工清晰:Model(数据)、View(逻辑)、Template(展示),解耦设计便于后期维护和扩展。
- 关键注意点:
- 创建应用后必须在
settings.py中注册,否则模型、模板等无法被Django识别。 - 模型修改后,必须执行
makemigrations和migrate命令,才能同步到数据库。 - 模板文件夹建议采用“应用名/templates/应用名/”的结构,避免多应用模板冲突。
- 视图传递给模板的数据必须是字典格式(上下文),模板中通过
{{ 变量名 }}获取。
- 创建应用后必须在
- 进阶方向:后续可学习Django的表单验证、用户认证、静态文件配置等,完善Web应用功能。