Python 创建一个 Flask 或 Django 应用(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言:为什么选择 Python 构建 Web 应用?

在当今互联网技术领域,Python 凭借其简洁优雅的语法和丰富的生态,成为 Web 开发的热门语言。无论是快速验证创意的初创团队,还是需要稳定架构的企业级项目,Python 的 Web 框架都提供了灵活的解决方案。其中,FlaskDjango 作为 Python 生态中最具代表性的框架,分别以“极简灵活”和“全栈高效”著称。

本文将通过循序渐进的讲解,帮助编程初学者和中级开发者理解如何使用 Python 创建 Flask 或 Django 应用。我们将从框架核心概念讲起,通过实际案例演示开发流程,并对比两者的适用场景,最终让读者能够根据需求选择合适的工具。


Flask:轻量级的“乐高积木”式框架

核心特性与适用场景

Flask 被称为“微框架”,它的设计理念是“只提供必要功能,其余由开发者自由选择”。这种灵活性使其适合以下场景:

  • 快速搭建小型 API 或原型系统
  • 与第三方库(如 SQLAlchemy、Jinja2)组合构建复杂应用
  • 需要高度自定义的个性化项目

形象比喻:Flask 就像一套乐高积木的基础组件,开发者可以像搭积木一样,根据需求逐步添加所需功能模块。

第一个 Flask 应用:Hello World

以下是创建一个简单 Flask 应用的步骤:

  1. 安装依赖

    pip install flask  
    
  2. 编写代码
    app.py 文件中:

    from flask import Flask  
    app = Flask(__name__)  
    
    @app.route('/')  # 定义路由规则  
    def hello():  
        return 'Hello Flask World!'  
    
    if __name__ == '__main__':  
        app.run(debug=True)  # 启动开发服务器  
    
  3. 运行应用

    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 的核心特性对比分析

对比维度FlaskDjango
开发模式极简灵活,需自行集成组件全栈封装,内置丰富功能
学习曲线低(适合快速上手)中高(需理解 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 开发之路的真正起点。

最新发布