Windows下使用Flask搭建虚拟环境并运行首个Web应用

陈默
陈默
发布时间:2026-10-14 | 3人浏览过
原创

本文详细讲解在Windows环境下,如何使用pipenv为Python 3.7.1项目搭建独立的虚拟环境,并在PyCharm中正确配置解释器。通过编写并运行第一个Flask应用程序,深入解析路由注册、视图函数、重定向机制以及HTTP响应头(Content-Type)对HTML和JSON返回值的控制方法,帮助开发者快速掌握Flask基础开发流程。

本教程的所有操作步骤均基于Windows操作系统,所使用的Python版本为3.7.1。

一、搭建虚拟环境

1.1 使用pipenv搭建虚拟环境

虽然也可以使用virtualenv来创建虚拟环境,但由于该工具经常遇到安装失败的问题,本文推荐另一种更稳定的安装方式,并通过cmd命令行执行以下操作。

首先安装pipenv工具:pip install pipenv

接着创建用于存放项目的目录:mkdir app

切换至该目录:cd app

在目录中初始化并安装环境依赖:pipenv install

激活并进入虚拟环境:pipenv shell


6. 查看当前虚拟环境中已安装的Python包列表:pip list

1.2 为虚拟环境安装其他依赖包

为了使用Flask框架,执行以下命令进行安装:pipenv install flask。如果需要安装其他库(如requests、pymysql等),操作方式与此相同。

1.3 pipenv常用命令一览表

命令 功能
pipenv install 初始化虚拟环境
pipennv 进入虚拟环境
pipenv install xxx (uninstall xxx) 为虚拟环境安装(删除)包
exit 退出虚拟环境
pipenv graph 查看包之间的依赖关系

二、在开发工具中配置虚拟环境

本教程使用的开发工具为PyCharm社区版。

2.1 查找虚拟环境路径

执行命令以查看pipenv虚拟环境的具体安装路径,我的环境安装在如下位置。

 

2.2 在开发工具中配置虚拟环境

打开PyCharm的设置界面,找到Setting选项。

在设置中找到Python解释器(Python Interpreter),点击添加虚拟环境,并选择刚才查询到的路径即可完成配置。

 

三、编写第一个Flask程序

3.1 运行第一个Flask应用程序

仅需三行核心代码即可实现最简单的Flask应用。


#!/usr/bin/python
# -*- coding: utf-8 -*-
#file: app.py
#@author: Gorit
#@contact: gorit@qq.com
#@time: 2020/2/26 9:08

from flask import Flask

app = Flask(__name__) # 实例化 flask , __name__ 会作为 app 核心的一个标识,这个可以为任意的字符串

@app.route('/hello') # 使用路由,给 hello 函数定义一个路由,然后游览器通过http 请求得到相对应的数据
def hello(): # hello 是视图函数,也是 mvc 中的 controller
    return "Hello World"

app.run()

随后在虚拟环境中执行python app.py,即可在浏览器访问http://127.0.0.1:5000启动Flask应用。但直接访问会发现页面空白,这是因为代码中定义了特定路由,因此需要将访问路径修改为http://127.0.0.1:5000/hello,此时即可在网页中看到“Hello World”字符串。

3.2 Flask中的路由重定向机制

沿用上述代码,我们进行微小调整。


from flask import Flask
app = Flask(__name__) 

@app.route('/hello/') # 我们在路由这里多加入一个斜杠
def hello(): 
    return "Hello World"

app.run()

正常启动程序后,

若将路径修改为:127.0.0.1:5000/hello,按回车后页面会出现短暂跳转,随后显示正常状态。

打开浏览器F12开发者工具,切换到Network(网络)选项卡,可以发现这里产生了两个网络请求。

查阅相关资料可知,当输入/hello时,Python Flask会自动执行永久重定向处理。

3.3 另一种路由注册方式

我们使用app.route("/hello")作为访问界面,但通过Ctrl加鼠标左键点击route,可以查看其源码。实际上,route是作为装饰器被使用的。

重点在于下方的实现方式,路由的核心功能实际上是通过设置add_url_rule(..)路由规则来实现的。

因此,我们也可以采用另一种方法设置路由,这种方式同样易于使用:第一个参数设置路径,第二个参数指定视图函数,即hello()。


from flask import Flask
app = Flask(__name__)

# @app.route('/hello/')
def hello(): 
    return "Hello World"

app.add_url_rule('/hello',view_func=hello)

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

第二种使用场景通常多见于基于类的视图,即采用面向对象的方式编写Flask应用程序。

3.4 修改Flask运行参数

app.run()方法包含三个关键参数,我们可以逐一调整。

  • 开启Debug模式(这样Flask会自动重启服务器,无需手动重启)。
  • 指定启动端口(默认端口为5000,可手动修改)。
  • 改变主机绑定(默认是127.0.0.1,若需部署到服务器,可将host改为0.0.0.0,并关闭防火墙,以便外网访问)。

from flask import Flask
app = Flask(__name__)

@app.route('/hello')
def hello(): 
    return "Hello World"

if __name__ == '__main__': 
    app.run(host="localhost", debug=True,port=9999)

随后运行http://localhost:9999/hello。

即可看到应用内容。

3.5 如何正确显示HTML标签?

尝试将hello视图函数中返回的内容改为HTML标签,观察效果。


from flask import Flask
app = Flask(__name__)

@app.route('/hello/')
def hello(): 
    return "<html></html>"

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

实际上,页面不会显示任何渲染后的HTML,这是请求头(Headers)的问题。

Flask请求头的内容包括:

  • 状态码(status code)
  • Content-Type HTTP头部信息

由于请求头中的Content-Type已指定默认值,HTML标签无法像纯字符串那样直接显示。此时需要手动修改请求头信息,操作如下。


from flask import Flask,make_response
app = Flask(__name__)

@app.route('/hello')
def hello():
    # 手动创建 response
    headers = {
        "content-type": "text/html",  # plain 当成普通的字符串,plain 改后才能 html 就可以正常的显示 html 标签的内容
    }
    return '<html><body><font color="red">你好,世界</font></body></html>', 200, headers

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

OK,这样即可正常显示HTML标签中的内容,但字体可能不正确,这涉及编码格式问题。

其他类型的Content-Type设置:

  • content-type: “text/plain” 将返回数据视为普通字符串。
  • “content-type”:“application/json” 用于API开发,指定返回JSON格式数据。

3.6 重定向的高级应用

我们可以在headers中加入location参数,当用户加载指定路径时,自动跳转到其他页面。


from flask import Flask,make_response
app = Flask(__name__)
app.config.from_object('config')

@app.route('/hello')
def hello():
    headers = {
        "content-type": "text/plain",  # plain 当成普通的字符串
        # "content-type":"application/json"  使用 api, 指定返回 json 格式的数据
        "location": "https://www.bing.com"
    }
    # 同样实现 跳转效果,控制响应状态码
    return '<html></html>', 301, headers

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

到此,关于Flask搭建虚拟环境并运行第一个Flask程序的介绍结束。更多相关Flask环境搭建内容,请搜索本站往期文章或继续浏览后续相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表