0

0

python中怎么用Flask创建一个简单的网页?

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-09-17 22:59:01

|

897人浏览过

|

来源于php中文网

原创

答案:用Flask搭建网页只需安装Flask、创建app.py定义路由和视图函数,运行后即可在浏览器访问;通过@app.route可设置不同URL路径和请求方法,支持动态变量和POST/GET处理;使用Jinja2模板引擎将HTML分离,通过render_template传递数据,提升页面复杂度和可维护性;开发时启用debug=True实现热重载和调试器,配合print调试和虚拟环境管理依赖,确保项目稳定与安全。

python中怎么用flask创建一个简单的网页?

在Python里,用Flask搭建一个简单的网页,其实比你想象的要容易得多。它不像一些框架那样需要繁琐的配置,核心就是几行代码,定义一个URL路径,然后告诉它要显示什么内容。这就像搭积木,很快就能看到成果,非常适合快速原型开发或者学习Web基础,你甚至不需要太多Web开发经验就能上手。

解决方案

要用Flask创建一个简单的网页,我们首先得安装它,然后写几行Python代码。这个过程非常直观,你会发现它比你想象的要轻巧许多。

  1. 安装Flask 在你的终端或命令行中运行:

    pip install Flask

    如果你还没用过虚拟环境,强烈建议你先创建一个,比如:

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

    然后再执行

    pip install Flask
    。这能让你的项目依赖保持独立,避免版本冲突,这是个好习惯。

    立即学习Python免费学习笔记(深入)”;

  2. 创建Flask应用 在一个名为

    app.py
    的文件里,写入以下代码:

    from flask import Flask
    
    # 创建一个Flask应用实例
    # __name__ 是Python内置变量,代表当前模块的名字。
    # Flask用它来确定应用根目录,以便找到资源文件(如模板和静态文件)。
    app = Flask(__name__)
    
    # 使用装饰器定义一个路由。
    # 当用户访问应用的根URL(例如 http://127.0.0.1:5000/)时,
    # 这个函数就会被调用。
    @app.route('/')
    def hello_world():
        return '<h1>Hello, World! 这是一个简单的Flask页面。</h1>'
    
    # 当直接运行这个脚本时,启动Flask开发服务器。
    # debug=True 会开启调试模式,这在开发阶段非常有用,
    # 它会自动重新加载代码,并在出现错误时提供交互式调试器。
    if __name__ == '__main__':
        app.run(debug=True)
  3. 运行应用 保存

    app.py
    文件后,回到你的终端,确保你处于激活的虚拟环境(如果使用了)并且在
    app.py
    所在的目录下,然后运行:

    python app.py

    你会在终端看到类似这样的输出:

     * Serving Flask app 'app'
     * Debug mode: on
    WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on http://127.0.0.1:5000
    Press CTRL+C to quit
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: XXX-XXX-XXX

    现在,打开你的浏览器,访问

    http://127.0.0.1:5000
    ,你就能看到那个大大的 "Hello, World! 这是一个简单的Flask页面。" 了。是不是很简单?

Flask应用如何处理不同的URL路径和请求方法?

仅仅一个根页面显然不够用,对吧?一个真实的网站会有很多页面,比如“关于我们”、“联系方式”或者用户个人资料页。Flask处理这些不同的URL路径(我们称之为路由)非常灵活,而且还能区分用户提交数据的方式(请求方法)。

首先,增加一个新页面很简单,你只需要再定义一个路由函数:

# ... (前面的代码) ...

@app.route('/about')
def about_page():
    return '<h2>这是一个关于我们页面。</h2><p>我们致力于提供优质服务。</p>'

# ... (后面的代码) ...

保存文件,因为我们开启了

debug=True
,Flask服务器会自动重启。现在访问
http://127.0.0.1:5000/about
,你就能看到新页面了。

更酷的是,Flask允许你在URL中捕获变量。比如,你想为每个用户生成一个专属页面:

@app.route('/user/<username>')
def show_user_profile(username):
    # username 参数会从URL中获取,例如访问 /user/alice,username就是'alice'
    return f'<h1>欢迎用户:{username}</h1><p>这是您的个人主页。</p>'

这里

<username>
就是一个动态的URL片段。当你访问
/user/alice
/user/bob
时,
username
变量就会分别被赋值为
alice
bob
。Flask甚至可以指定变量类型,比如
<int:post_id>
来确保
post_id
是个整数。

至于请求方法,Web应用不只是显示信息,还需要接收用户输入,比如登录表单、提交评论。HTTP协议定义了多种请求方法,最常见的是

GET
(获取数据)和
POST
(提交数据)。Flask的
route
装饰器默认只响应
GET
请求,但你可以明确指定它支持哪些方法:

Peppertype.ai
Peppertype.ai

高质量AI内容生成软件,它通过使用机器学习来理解用户的需求。

下载
from flask import request # 需要导入request对象来访问请求数据

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 用户提交了表单
        username = request.form['username'] # 从表单数据中获取用户名
        password = request.form['password'] # 从表单数据中获取密码
        # 这里可以添加验证逻辑
        if username == 'admin' and password == 'password':
            return '登录成功!'
        else:
            return '用户名或密码错误。'
    else:
        # 用户第一次访问登录页面,显示登录表单
        return '''
            <form method="post">
                <p><input type=text name=username placeholder="用户名"></p>
                <p><input type=password name=password placeholder="密码"></p>
                <p><input type=submit value=登录></p>
            </form>
        '''

在这个例子里,当用户通过

GET
请求访问
/login
时,会看到一个登录表单。当他们填写表单并点击“登录”后,浏览器会发送一个
POST
请求到
/login
,这时
request.method == 'POST'
为真,我们就可以处理提交的数据了。
request
对象是Flask提供的一个全局对象,用于访问当前请求的所有信息,比如表单数据 (
request.form
)、URL参数 (
request.args
) 等。理解并运用这些,是构建交互式Web应用的关键。

如何在Flask中集成HTML模板,让网页内容更丰富?

直接在Python代码里返回HTML字符串,对于简单的“Hello, World!”还行,但如果页面结构复杂一点,或者需要动态显示大量数据,那简直就是噩梦。这时候,HTML模板就派上用场了。Flask默认使用Jinja2作为其模板引擎,它功能强大且易于学习。

要使用模板,你需要做两件事:

  1. 创建

    templates
    文件夹 在你的
    app.py
    文件同级目录下,创建一个名为
    templates
    的文件夹。Flask会默认在这个文件夹里查找你的HTML模板文件。

  2. 创建HTML模板文件

    templates
    文件夹里,创建一个
    index.html
    文件:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>{{ title }} - 我的Flask应用</title>
        <style>
            body { font-family: sans-serif; margin: 40px; background-color: #f4f4f4; color: #333; }
            h1 { color: #0056b3; }
            p { line-height: 1.6; }
            .highlight { color: #e44d26; font-weight: bold; }
        </style>
    </head>
    <body>
        <h1>{{ heading }}</h1>
        <p>欢迎来到 <span class="highlight">{{ app_name }}</span>。</p>
        <p>当前时间是:{{ current_time }}</p>
        <p>这是一个使用Jinja2模板渲染的页面。我们可以轻松地将数据从Flask应用传递到这里。</p>
    
        {% if user_logged_in %}
            <p>您已登录,{{ username }}!</p>
        {% else %}
            <p>请<a href="/login">登录</a>。</p>
        {% endif %}
    
        <ul>
            {% for item in items %}
                <li>{{ item }}</li>
            {% endfor %}
        </ul>
    </body>
    </html>

    注意

    {{ ... }}
    {% ... %}
    这样的语法。这是Jinja2模板的特色:双大括号用于输出变量的值,而百分号加大括号用于控制结构,比如
    if/else
    条件判断和
    for
    循环。

  3. 在Flask应用中渲染模板 修改你的

    app.py
    文件,导入
    render_template
    函数,并使用它来渲染
    index.html

    from flask import Flask, render_template # 导入render_template
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        # 准备一些数据,这些数据会被传递给模板
        page_title = "首页"
        main_heading = "欢迎来到我的Flask网站!"
        application_name = "简易Flask演示"
        import datetime
        now = datetime.datetime.now().strftime("%Y年%m月%d日 %H:%M:%S")
    
        # 模拟用户登录状态和用户名
        is_logged_in = True
        user_name = "小明"
    
        # 列表数据
        my_items = ["Python", "Flask", "Jinja2", "Web开发"]
    
        # 使用render_template渲染模板,并传递数据
        return render_template(
            'index.html',
            title=page_title,
            heading=main_heading,
            app_name=application_name,
            current_time=now,
            user_logged_in=is_logged_in,
            username=user_name,
            items=my_items
        )
    
    # ... (其他路由,如 /about, /user/<username>, /login) ...
    
    if __name__ == '__main__':
        app.run(debug=True)

    现在,当你访问

    http://127.0.0.1:5000/
    时,Flask会找到
    templates/index.html
    ,然后把
    render_template
    函数中传入的关键字参数(比如
    title
    ,
    heading
    )作为变量,填充到模板中,最后将生成的完整HTML页面返回给浏览器。这种方式将应用的逻辑和页面的展示分离开来,让代码结构更清晰,也更容易维护。

开发Flask应用时,有哪些常见的调试技巧和注意事项?

在开发任何应用时,调试都是不可避免的环节,Flask也不例外。掌握一些基本的调试技巧,能让你事半功倍,少走很多弯路。

首先,最直接也最常用的是

app.run(debug=True)
。前面提过,它在开发阶段简直是神器。开启调试模式后,有几个非常实用的功能:

  • 自动重载(Auto-reloader):当你修改了Python代码并保存时,Flask开发服务器会自动重启,无需你手动停止再运行,这极大地提高了开发效率。
  • 交互式调试器(Interactive Debugger):当你的应用发生错误时,浏览器会显示一个带有详细错误信息和堆跟踪的页面。更重要的是,这个页面提供了一个交互式的Python shell,你可以在浏览器里直接检查变量的值、执行Python代码,甚至修改程序状态。这对于定位问题非常有用。不过,切记在生产环境中绝不能开启
    debug=True
    ,因为这个调试器允许执行任意代码,存在严重的安全风险。

其次,

print()
语句虽然原始,但在快速检查变量值、确认代码执行路径时依然非常有效。在你的视图函数中,或者在任何你怀疑有问题的地方,加上
print()
语句,输出你关心的变量或者简单的提示信息,然后观察终端的输出。

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/test_debug')
def test_debug():
    user_input = request.args.get('name', '访客')
    print(f"用户访问了 /test_debug 页面,传入的name是:{user_input}") # 在终端打印
    return f"你好,{user_input}!"

当你访问

/test_debug?name=Alice
时,终端就会打印出
用户访问了 /test_debug 页面,传入的name是:Alice

此外,理解和阅读错误信息至关重要。当程序崩溃时,Python会抛出所谓的“回溯”(traceback)。回溯会告诉你错误发生的文件、行号以及调用栈。很多时候,错误信息本身就已经指明了问题所在,比如

NameError
(变量未定义)、
TypeError
(类型错误)或
KeyError
(字典中键不存在)。花时间仔细阅读它们,而不是仅仅看到红色报错就感到焦虑。

最后,一个我个人非常推崇的实践是:使用虚拟环境。虽然前面提过,但它真的太重要了。它确保了你的项目依赖是隔离的,不会和系统全局的Python包或者其他项目的包混淆。这避免了“在我的机器上能运行”的尴尬局面,也让依赖管理更加清晰。当你遇到奇怪的依赖问题时,首先检查虚拟环境是否正确激活,或者尝试重新安装依赖。

总的来说,调试是一个需要耐心和实践的过程。多用

debug=True
提供的功能,善用
print
,最重要的是,学会阅读和理解你的程序发出的“抱怨声”——那些错误信息。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python Flask框架
Python Flask框架

本专题专注于 Python 轻量级 Web 框架 Flask 的学习与实战,内容涵盖路由与视图、模板渲染、表单处理、数据库集成、用户认证以及RESTful API 开发。通过博客系统、任务管理工具与微服务接口等项目实战,帮助学员掌握 Flask 在快速构建小型到中型 Web 应用中的核心技能。

106

2025.08.25

Python Flask Web框架与API开发
Python Flask Web框架与API开发

本专题系统介绍 Python Flask Web框架的基础与进阶应用,包括Flask路由、请求与响应、模板渲染、表单处理、安全性加固、数据库集成(SQLAlchemy)、以及使用Flask构建 RESTful API 服务。通过多个实战项目,帮助学习者掌握使用 Flask 开发高效、可扩展的 Web 应用与 API。

81

2025.12.15

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

373

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

437

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

803

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

371

2025.07.23

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

193

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

19

2026.02.03

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.7万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号