从零开始:如何搭建你的第一个简单的Flask网站

文章目录

从零开始:如何搭建你的第一个简单的Flask网站

前言

Flask是Python中最流行的轻量级Web框架之一,它简单、灵活,非常适合初学者入门Web开发。本文将手把手教你从零开始搭建你的第一个Flask网站,即使你之前没有任何Web开发经验,也能跟着教程完成。

一、什么是Flask?

Flask是一个用Python编写的Web应用框架,它的特点是:

  • 轻量级:核心功能简单,易于理解
  • 灵活:可以根据需求选择扩展
  • 易学:代码简洁,学习曲线平缓
  • 强大:可以构建从小型应用到大型企业级应用

二、环境准备

2.1 安装Python

首先确保你的电脑上已经安装了Python。Flask需要Python 3.6或更高版本。

检查Python版本:

bash 复制代码
python --version
# 或
python3 --version

如果没有安装Python,请访问 Python官网 下载并安装。

2.2 创建项目目录

创建一个文件夹来存放你的Flask项目:

bash 复制代码
mkdir my_flask_app
cd my_flask_app

2.3 创建虚拟环境(推荐)

使用虚拟环境可以避免不同项目之间的依赖冲突,这是一个好习惯。

Windows系统:

bash 复制代码
python -m venv venv
venv\Scripts\activate

Linux/Mac系统:

bash 复制代码
python3 -m venv venv
source venv/bin/activate

激活虚拟环境后,你的命令行提示符前面会显示 (venv)

三、安装Flask

在激活的虚拟环境中,使用pip安装Flask:

bash 复制代码
pip install flask

安装完成后,可以验证安装:

bash 复制代码
python -c "import flask; print(flask.__version__)"

四、创建第一个Flask应用

4.1 创建主程序文件

在项目目录下创建一个名为 app.py 的文件:

python 复制代码
from flask import Flask

# 创建Flask应用实例
app = Flask(__name__)

# 定义路由和视图函数
@app.route('/')
def hello():
    return 'Hello, Flask!这是我的第一个Flask网站!'

# 运行应用
if __name__ == '__main__':
    app.run(debug=True)

代码解释:

  1. from flask import Flask:导入Flask类
  2. app = Flask(__name__):创建Flask应用实例
  3. @app.route('/'):装饰器,定义URL路由
  4. def hello():视图函数,处理请求并返回响应
  5. app.run(debug=True):运行应用,debug=True开启调试模式

4.2 运行应用

在命令行中运行:

bash 复制代码
python app.py

你会看到类似以下的输出:

复制代码
 * Running on http://127.0.0.1:5000
 * Debug mode: on

4.3 访问网站

打开浏览器,访问 http://127.0.0.1:5000http://localhost:5000,你应该能看到 "Hello, Flask!" 的页面!

🎉 恭喜!你已经成功创建了第一个Flask应用!

五、添加更多路由

让我们添加更多的页面来丰富你的网站:

python 复制代码
from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return '''
    欢迎来到我的Flask网站!
    关于我
    联系我
    '''

@app.route('/about')
def about():
    return '''
    关于我
    这是一个使用Flask搭建的简单网站。
    返回首页
    '''

@app.route('/contact')
def contact():
    return '''
    联系我
    邮箱:example@email.com
    返回首页
    '''

if __name__ == '__main__':
    app.run(debug=True)

现在你的网站有三个页面了:

  • 首页:http://127.0.0.1:5000/
  • 关于页面:http://127.0.0.1:5000/about
  • 联系页面:http://127.0.0.1:5000/contact

六、使用模板(Templates)

直接在代码中写HTML不太优雅,Flask支持使用模板文件。让我们改进代码:

6.1 创建模板目录

在项目目录下创建 templates 文件夹:

bash 复制代码
mkdir templates

6.2 创建基础模板

创建 templates/base.html

html 复制代码
    
    
    {% block title %}我的Flask网站{% endblock %}
    
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            margin: 50px auto;
            padding: 20px;
            background-color: #f5f5f5;
        }
        nav {
            background-color: #333;
            padding: 10px;
            margin-bottom: 20px;
        }
        nav a {
            color: white;
            text-decoration: none;
            margin-right: 20px;
        }
        nav a:hover {
            text-decoration: underline;
        }
        .content {
            background-color: white;
            padding: 30px;
            border-radius: 5px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.1);
        }
    


    
        首页
        关于
        联系
    
    
        {% block content %}{% endblock %}
    

6.3 创建具体页面模板

创建 templates/index.html

html 复制代码
{% extends "base.html" %}

{% block title %}首页 - 我的Flask网站{% endblock %}

{% block content %}
欢迎来到我的Flask网站!
这是使用Flask框架搭建的第一个网站。
Flask是一个轻量级的Python Web框架,非常适合快速开发Web应用。
{% endblock %}

创建 templates/about.html

html 复制代码
{% extends "base.html" %}

{% block title %}关于 - 我的Flask网站{% endblock %}

{% block content %}
关于我
这是一个使用Flask搭建的简单网站示例。
Flask的特点:

    轻量级,易于学习
    灵活,可以根据需求扩展
    强大的社区支持

{% endblock %}

创建 templates/contact.html

html 复制代码
{% extends "base.html" %}

{% block title %}联系 - 我的Flask网站{% endblock %}

{% block content %}
联系我
如果你有任何问题,欢迎联系我:

    邮箱:example@email.com
    GitHub:github.com/yourusername

{% endblock %}

6.4 更新app.py使用模板

python 复制代码
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/contact')
def contact():
    return render_template('contact.html')

if __name__ == '__main__':
    app.run(debug=True)

关键变化:

  1. 导入 render_template:用于渲染模板
  2. 使用 render_template():返回渲染后的HTML

现在你的网站看起来更专业了!

七、添加动态内容

让我们添加一些动态功能,比如显示当前时间:

python 复制代码
from flask import Flask, render_template
from datetime import datetime

app = Flask(__name__)

@app.route('/')
def index():
    current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render_template('index.html', time=current_time)

@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/contact')
def contact():
    return render_template('contact.html')

if __name__ == '__main__':
    app.run(debug=True)

更新 templates/index.html

html 复制代码
{% extends "base.html" %}

{% block title %}首页 - 我的Flask网站{% endblock %}

{% block content %}
欢迎来到我的Flask网站!
这是使用Flask框架搭建的第一个网站。
当前时间:{{ time }}
Flask是一个轻量级的Python Web框架,非常适合快速开发Web应用。
{% endblock %}

八、处理表单提交

让我们添加一个简单的联系表单:

8.1 更新contact.html

html 复制代码
{% extends "base.html" %}

{% block title %}联系 - 我的Flask网站{% endblock %}

{% block content %}
联系我

    
        姓名:
        
    
    
        邮箱:
        
    
    
        留言:
        
    
    
        提交
    

{% endblock %}

8.2 更新app.py处理表单

python 复制代码
from flask import Flask, render_template, request, flash, redirect, url_for
from datetime import datetime

app = Flask(__name__)
app.secret_key = 'your-secret-key-here'  # 用于flash消息

@app.route('/')
def index():
    current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render_template('index.html', time=current_time)

@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/contact', methods=['GET', 'POST'])
def contact():
    if request.method == 'POST':
        name = request.form.get('name')
        email = request.form.get('email')
        message = request.form.get('message')
        
        # 这里可以保存到数据库或发送邮件
        flash(f'谢谢 {name},你的留言已收到!')
        return redirect(url_for('contact'))
    
    return render_template('contact.html')

if __name__ == '__main__':
    app.run(debug=True)

8.3 在base.html中显示flash消息

base.html 的content块之前添加:

html 复制代码
    {% with messages = get_flashed_messages() %}
        {% if messages %}
            
                {% for message in messages %}
                    {{ message }}
                {% endfor %}
            
        {% endif %}
    {% endwith %}
    {% block content %}{% endblock %}

九、项目结构

现在你的项目结构应该是这样的:

复制代码
my_flask_app/
├── venv/              # 虚拟环境(不需要提交到Git)
├── templates/         # 模板文件夹
│   ├── base.html
│   ├── index.html
│   ├── about.html
│   └── contact.html
├── app.py            # 主程序文件
└── requirements.txt  # 依赖列表(可选)

9.1 创建requirements.txt

bash 复制代码
pip freeze > requirements.txt

这样其他人可以通过 pip install -r requirements.txt 安装所有依赖。

十、部署你的Flask应用

10.1 本地运行

你已经知道如何本地运行了:

bash 复制代码
python app.py

10.2 生产环境部署

注意: app.run(debug=True) 只适用于开发环境,不要在生产环境使用!

生产环境可以使用:

  1. Gunicorn(Linux/Mac):

    bash 复制代码
    pip install gunicorn
    gunicorn -w 4 -b 0.0.0.0:5000 app:app
  2. Waitress(Windows):

    bash 复制代码
    pip install waitress
    waitress-serve --host=0.0.0.0 --port=5000 app:app
  3. 云平台部署

    • Heroku
    • PythonAnywhere
    • 阿里云/腾讯云等

十一、常见问题

11.1 端口被占用

如果5000端口被占用,可以修改端口:

python 复制代码
if __name__ == '__main__':
    app.run(debug=True, port=8080)

11.2 模板找不到

确保:

  1. templates 文件夹在项目根目录
  2. 文件夹名称拼写正确
  3. 模板文件在 templates 文件夹内

11.3 修改代码后没有变化

确保:

  1. 开启了 debug=True
  2. 保存了文件
  3. 如果还是不行,重启服务器

十二、下一步学习

现在你已经掌握了Flask的基础,可以继续学习:

  1. 数据库集成:使用SQLAlchemy连接数据库
  2. 用户认证:实现登录、注册功能
  3. RESTful API:使用Flask构建API
  4. 文件上传:处理文件上传功能
  5. 部署:将应用部署到服务器

推荐资源:

十三、完整代码示例

app.py(完整版)

python 复制代码
from flask import Flask, render_template, request, flash, redirect, url_for
from datetime import datetime

app = Flask(__name__)
app.secret_key = 'your-secret-key-change-this-in-production'

@app.route('/')
def index():
    current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    return render_template('index.html', time=current_time)

@app.route('/about')
def about():
    return render_template('about.html')

@app.route('/contact', methods=['GET', 'POST'])
def contact():
    if request.method == 'POST':
        name = request.form.get('name')
        email = request.form.get('email')
        message = request.form.get('message')
        
        # 在实际应用中,这里可以保存到数据库或发送邮件
        print(f"收到来自 {name} ({email}) 的留言:{message}")
        
        flash(f'谢谢 {name},你的留言已收到!我们会尽快回复。')
        return redirect(url_for('contact'))
    
    return render_template('contact.html')

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

十四、总结

通过本教程,你已经学会了:

✅ 安装和配置Flask环境

✅ 创建基本的Flask应用

✅ 定义路由和视图函数

✅ 使用模板系统

✅ 处理表单提交

✅ 添加动态内容

关键要点:

  1. Flask是一个简单而强大的Web框架
  2. 使用虚拟环境管理依赖
  3. 模板系统让代码更清晰
  4. 调试模式有助于开发
  5. 生产环境需要不同的配置

实践建议:

  • 多动手实践,修改代码看效果
  • 尝试添加新功能
  • 阅读Flask官方文档
  • 查看其他Flask项目的代码

希望这个教程能帮助你开始Flask之旅!如果遇到问题,欢迎在评论区留言讨论。


相关资源:

标签: #Flask #Python #Web开发 #后端开发 #编程入门 #Python框架

相关推荐
用户21411832636022 小时前
Claude Skills 从零到一:手把手打造专属公众号文风生成器,10 分钟搞定 AI 技能定制
后端
追逐时光者2 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 60 期(2025年11.1-11.9)
后端·.net
二进制星轨2 小时前
Transofrmer架构详解与PyTorch实现(附代码讲解)
人工智能·pytorch·python
码上成长2 小时前
GraphQL:让前端自己决定要什么数据
前端·后端·graphql
生而为虫2 小时前
02.第一个Python程序
开发语言·python
视觉AI3 小时前
如何查看 Linux 下正在运行的 Python 程序是哪一个
linux·人工智能·python
码事漫谈3 小时前
C++双向链表删除操作:由浅入深完全指南
后端
码事漫谈3 小时前
软件生产的“高速公路网”:深入浅出理解CI/CD的核心流程
后端
Moonbit3 小时前
MGPIC 初赛提交倒计时 4 天!
后端·算法·编程语言