Python 创建一个 Flask 或 Django 应用(超详细)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言:为什么选择 Python 构建 Web 应用?
在当今互联网技术领域,Python 凭借其简洁优雅的语法和丰富的生态,成为 Web 开发的热门语言。无论是快速验证创意的初创团队,还是需要稳定架构的企业级项目,Python 的 Web 框架都提供了灵活的解决方案。其中,Flask 和 Django 作为 Python 生态中最具代表性的框架,分别以“极简灵活”和“全栈高效”著称。
本文将通过循序渐进的讲解,帮助编程初学者和中级开发者理解如何使用 Python 创建 Flask 或 Django 应用。我们将从框架核心概念讲起,通过实际案例演示开发流程,并对比两者的适用场景,最终让读者能够根据需求选择合适的工具。
Flask:轻量级的“乐高积木”式框架
核心特性与适用场景
Flask 被称为“微框架”,它的设计理念是“只提供必要功能,其余由开发者自由选择”。这种灵活性使其适合以下场景:
- 快速搭建小型 API 或原型系统
- 与第三方库(如 SQLAlchemy、Jinja2)组合构建复杂应用
- 需要高度自定义的个性化项目
形象比喻:Flask 就像一套乐高积木的基础组件,开发者可以像搭积木一样,根据需求逐步添加所需功能模块。
第一个 Flask 应用:Hello World
以下是创建一个简单 Flask 应用的步骤:
-
安装依赖
pip install flask
-
编写代码
在app.py
文件中:from flask import Flask app = Flask(__name__) @app.route('/') # 定义路由规则 def hello(): return 'Hello Flask World!' if __name__ == '__main__': app.run(debug=True) # 启动开发服务器
-
运行应用
python app.py
访问
http://localhost:5000
,即可看到输出结果。
深入理解路由与视图函数
Flask 的核心是通过 @app.route
装饰器将 URL 路径映射到 Python 函数(视图函数)。例如:
@app.route('/greet/<name>') # 动态参数
def greet(name):
return f'Hello, {name}!'
访问 http://localhost:5000/greet/Python
将输出 Hello, Python!
。
Django:全栈开发的“一站式解决方案”
核心特性与适用场景
Django 遵循“电池包含在内”(Batteries Included)原则,内置了 ORM、模板引擎、认证系统等组件,适合:
- 需要快速开发的中大型项目
- 需要高度安全性和标准化的系统(如 CMS、电商网站)
- 团队协作开发
形象比喻:Django 是一套完整的房屋装修方案,从水电管线到家具布置,都按照行业标准预先设计好,开发者只需“拎包入住”。
第一个 Django 应用:创建博客系统
步骤 1:初始化项目
pip install django
django-admin startproject blog_project
cd blog_project
步骤 2:创建应用模块
python manage.py startapp blog
步骤 3:定义模型(Model)
在 blog/models.py
中:
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
步骤 4:迁移数据库
python manage.py makemigrations
python manage.py migrate
步骤 5:创建视图(View)
在 blog/views.py
中:
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
return render(request, 'blog/post_list.html', {'posts': posts})
步骤 6:配置路由(URL)
在 blog/urls.py
中:
from django.urls import path
from . import views
urlpatterns = [
path('posts/', views.post_list, name='post_list'),
]
步骤 7:创建模板(Template)
在 blog/templates/blog/post_list.html
中:
<!DOCTYPE html>
<html>
<head><title>Blog Posts</title></head>
<body>
<h1>所有文章</h1>
<ul>
{% for post in posts %}
<li>{{ post.title }} - {{ post.created_at }}</li>
{% endfor %}
</ul>
</body>
</html>
步骤 8:运行服务器
python manage.py runserver
访问 http://localhost:8000/posts/
即可查看博客列表。
Django ORM 的强大之处
Django 的对象关系映射(ORM)将数据库操作抽象为 Python 对象,例如:
posts = Post.objects.all()
new_posts = Post.objects.filter(created_at__year=2023)
new_post = Post(title='我的第一篇博客', content='内容...')
new_post.save()
这种语法极大简化了数据库交互的复杂性。
Flask 与 Django 的核心特性对比分析
对比维度 | Flask | Django |
---|---|---|
开发模式 | 极简灵活,需自行集成组件 | 全栈封装,内置丰富功能 |
学习曲线 | 低(适合快速上手) | 中高(需理解 MVC 模式) |
适用场景 | API、小型项目、需要高度定制的场景 | 企业级应用、复杂系统、需要快速开发的场景 |
扩展性 | 通过第三方库扩展(如 Flask-SQLAlchemy) | 内置扩展机制,但修改框架代码需谨慎 |
社区支持 | 活跃但碎片化 | 成熟且统一 |
实战案例:构建一个简单的“待办事项”应用
方案 1:使用 Flask + SQLite
步骤 1:安装依赖
pip install flask flask-sqlalchemy
步骤 2:创建模型与路由
from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db'
db = SQLAlchemy(app)
class Todo(db.Model):
id = db.Column(db.Integer, primary_key=True)
task = db.Column(db.String(200), nullable=False)
completed = db.Column(db.Boolean, default=False)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
task = request.form['task']
new_todo = Todo(task=task)
db.session.add(new_todo)
db.session.commit()
todos = Todo.query.all()
return render_template('index.html', todos=todos)
if __name__ == '__main__':
db.create_all()
app.run(debug=True)
步骤 3:编写模板(templates/index.html)
<form method="POST">
<input type="text" name="task" placeholder="添加任务..." required>
<button type="submit">添加</button>
</form>
<ul>
{% for todo in todos %}
<li>{{ todo.task }}
<input type="checkbox" {{ 'checked' if todo.completed else '' }}>
</li>
{% endfor %}
</ul>
方案 2:使用 Django
步骤 1:创建模型与表单
from django.db import models
class Todo(models.Model):
task = models.CharField(max_length=200)
completed = models.BooleanField(default=False)
from django import forms
from .models import Todo
class TodoForm(forms.ModelForm):
class Meta:
model = Todo
fields = ['task']
步骤 2:视图与模板
from django.shortcuts import render, redirect
from .models import Todo
from .forms import TodoForm
def todo_list(request):
if request.method == 'POST':
form = TodoForm(request.POST)
if form.is_valid():
form.save()
return redirect('todo_list')
else:
form = TodoForm()
todos = Todo.objects.all()
return render(request, 'todo/todo_list.html', {'form': form, 'todos': todos})
步骤 3:模板(templates/todo/todo_list.html)
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">添加任务</button>
</form>
<ul>
{% for todo in todos %}
<li>{{ todo.task }}
<input type="checkbox" {{ 'checked' if todo.completed else '' }}>
</li>
{% endfor %}
</ul>
结论:如何选择适合的框架?
-
选择 Flask 的情况:
- 需要快速迭代的 MVP(最小可行产品)
- 对灵活性和轻量级有较高要求
- 团队熟悉第三方库的集成
-
选择 Django 的情况:
- 需要标准化的认证、权限和安全性
- 项目规模较大且需要长期维护
- 开发团队偏好“约定优于配置”
无论选择 Flask 还是 Django,Python 都提供了强大的工具链支持。建议初学者从 Flask 入门,逐步理解 Web 开发的核心概念,再尝试 Django 的全栈功能。掌握这两个框架后,开发者能够应对从 API 后端到复杂 Web 应用的广泛需求。
通过本文的案例和代码示例,读者可以进一步探索官方文档和开源项目,逐步提升实战能力。记住,实践是掌握技术的最佳路径——动手编写代码,才是通向 Web 开发之路的真正起点。