【python】网页开发——Flask基础(一)介绍、安装、版本、入门程序、网页相关知识、项目配置

Flask介绍

Flask官方文档:

https://flask.palletsprojects.com

中文文档:

https://dormousehole.readthedocs.io/en/latest/

Flask 是一个使用 Python 编写的轻量级 Web 开发框架。它被设计成简单、易用,并且具有灵活性,可以帮助开发者快速搭建 Web 应用程序。

以下是 Flask 的一些主要特点和优势:

  1. 简单易用:Flask 的设计哲学是简单而优雅,让开发者能够快速入门并构建 Web 应用。它的 API 直观易懂,文档丰富详细,使得开发流程更加高效。
  2. 灵活性:Flask 不会对开发者强加太多限制,它提供了基本的工具和组件,但允许开发者根据自己的需求进行定制。开发者可以按照自己的喜好选择数据库、模板引擎以及其他扩展插件。
  3. 路由和视图:Flask 使用装饰器来定义 URL 路由规则,将不同的 URL 映射到相应的视图函数上。这种简单有效的方式使得开发者能够清晰地组织和管理代码。
  4. 模板引擎:Flask 默认支持 Jinja2 模板引擎,允许开发者将动态内容与静态 HTML 页面分离,提高代码的可维护性和复用性。
  5. 集成测试:Flask 提供了内置的测试工具和对单元测试、功能测试的支持,简化了开发过程中的测试工作。
  6. 扩展性:Flask 有丰富的扩展库生态系统,提供了许多方便的第三方扩展,如 SQLAlchemy(数据库访问)、WTForms(表单处理)、Flask-RESTful(构建 RESTful API)等,可帮助开发者快速实现常见的功能。
  7. 轻量级:由于 Flask 的核心设计简单而精练,它的代码量相对较小,运行效率高,适合用于轻量级的应用程序和原型开发。

安装Flask

pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple【python】网页开发——Flask基础(一)介绍、安装、版本、入门程序、网页相关知识、项目配置_第1张图片

Flask版本

import flask
print(flask.__version__)	#2.3.3

Flask入门程序

from flask import Flask

# 创建一个 Flask 应用程序实例。__name__ 是一个特殊变量,表示当前模块的名称
app = Flask(__name__)


@app.route('/')  # 使用修饰器指定 URL 路由规则,将根路径 / 映射到下面定义的 hello_world 函数
def hello_world():  # 路由处理函数
    return 'Helllo World'


if __name__ == '__main__':
    # 调用 Flask 应用程序实例的 run 方法,启动 Web 服务器,开始监听来自客户端的请求
    app.run()

运行这段代码时,Flask 会启动一个本地的 Web 服务器,在默认的 http://127.0.0.1:5000/ 地址上监听请求。当访问该地址时,Flask 会将请求映射到 hello_world 函数,并返回 'Hello World' 字符串作为响应内容。

Flask常见警告

WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

这个开发服务器仅适用于开发环境,并不适合在生产环境中使用,而应该使用专门的生产级 WSGI 服务器。

网页相关知识

输入url到显示网页的主要流程

【python】网页开发——Flask基础(一)介绍、安装、版本、入门程序、网页相关知识、项目配置_第2张图片

  1. 用户操作操作浏览器发送请求
  2. 请求转发至对应的web服务器
  3. web服务器将请求转交给web应用程序,web应用程序处理请求
  4. web应用将请求结果返回给web服务器,由web服务器返回用户响应结果
  5. 浏览器收到响应,向用户展示

web服务器

是连接用户浏览器与WSGI和我们使用Flask开发的应用程序的中间节点

常见的 Web 服务器有以下几种:

  1. Apache HTTP Server:Apache 是一个免费开源的跨平台 Web 服务器软件。它是最流行的 Web 服务器之一,具有稳定性和可靠性,并且支持动态模块扩展。
  2. Nginx:Nginx 是一个高性能、轻量级的开源 Web 服务器和反向代理服务器。它可以处理大量并发连接,具有低内存消耗和高效请求处理能力。
  3. Microsoft IIS:Internet Information Services (IIS) 是由微软公司开发的用于 Windows 操作系统的 Web 服务器软件。它提供了丰富的功能和易用的管理工具,广泛用于 Windows 环境下的 Web 应用程序部署。
  4. Node.js:Node.js 是一个基于 Chrome V8 引擎构建的 JavaScript 运行时环境,可以用于构建高度可伸缩的网络应用程序。通过使用 Node.js 提供的 HTTP 模块,可以创建自己的 Web 服务器。
  5. Lighttpd:Lighttpd(也称为 Lighty)是一个开源的轻量级 Web 服务器,专注于高性能和低内存消耗。它适用于各种规模的网站和应用程序。
  6. Caddy:Caddy 是一个现代化的 Web 服务器,具有自动 HTTPS、易用性和快速部署的特点。它使用 Go 语言开发,支持虚拟主机、反向代理和静态文件服务等功能。

WSGI (Web Server Gateway Interface)

WSGI (Web Server Gateway Interface) 是 Python Web 应用程序和 Web 服务器之间的一种标准接口。它定义了一个简单而通用的方式,使得 Python Web 应用程序可以与各种符合 WSGI 标准的 Web 服务器进行交互。

WSGI 的主要目的是实现 Web 应用程序与 Web 服务器之间的解耦。通过遵循 WSGI 接口,Web 应用程序可以独立于特定的 Web 服务器进行开发和测试,并且可以在不同的服务器环境中运行。

在一个典型的 WSGI 应用程序中,有两个主要的组件:

  1. 应用程序:WSGI 应用程序是一个可调用的对象,通常是一个函数或者一个类的实例。它接收两个参数:一个是包含请求信息的字典(environ),另一个是用于发送响应的回调函数(start_response)。
  2. Web 服务器网关:Web 服务器网关是一个符合 WSGI 标准的服务器组件,它负责接收客户端的请求并将其转发给 WSGI 应用程序。网关还负责调用应用程序,并将应用程序返回的响应发送给客户端。

WSGI 实现了一种简单的协议,使得 Web 应用程序和服务器之间可以通过一套统一的接口进行交互。这样的设计使得开发和部署 Web 应用程序变得更加灵活和可扩展。许多 Python Web 框架都是基于 WSGI 标准构建的,例如 Flask、Django 等。

实现简单WSGI服务器

my_webserver.py

""" 简单WSGI服务器实现 """
from wsgiref.simple_server import make_server


# make_server 函数是 wsgiref 模块中提供的用于创建 WSGI 服务器的函数


def main():  # main 函数用于启动服务器
    # 创建一个 WSGI 服务器实例,并将其赋值给变量 server。
    # 指定服务器的主机名为 'localhost',端口号为 8001,处理请求的 WSGI 应用程序为 hello_world 函数。
    server = make_server('localhost', 8001, hello_world)
    print('Serving HTTP on port8001...')
    # 阻塞调用,使得服务器一直运行,直到接收到停止服务器的信号
    server.serve_forever()


def hello_world(environ, start_response):  # 作为 WSGI 应用程序。environ 是包含请求信息的字典,start_response 是用于发送响应的回调函数。
    status = "200 OK"
    response_headers = [('Content-Type', 'text/html')]  # 表示响应头部分的 Content-Type 属性为 'text/html'
    start_response(status, response_headers)
    path = environ['PATH_INFO'][1:] or 'hello world'
    return [b'

%s

'
% path.encode()] # 构建一个包含 HTML 标签的响应内容,并将其作为字节类型的列表返回 if __name__ == '__main__': main()

在浏览器中通过访问 http://localhost:8001 查看到 “hello world” 的标题。

项目配置

Debug模式

在 Flask 中,调试模式(debug mode)是一个开关,用于在开发过程中启用一些有用的调试功能。当调试模式处于启用状态时,如果出现错误,Flask 会提供详细的错误信息,以帮助开发者进行调试。

要启用调试模式,可以在应用程序的 app.run() 函数中设置 debug=True。例如:

from flask import Flask

app = Flask(__name__)

# 应用程序代码

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

在上面的示例中,debug=True 将调试模式启用。当应用程序运行时,如果发生错误,将显示详细的错误信息,并提供交互式调试器。

调试模式提供以下功能:

  1. 错误消息:当发生错误时,将显示详细的错误消息,包括堆栈跟踪信息和源代码位置,有助于快速定位和修复问题。
  2. 自动重载:如果应用程序的源代码发生更改,Flask 会自动重新加载应用程序,而无需手动重启服务器。
  3. 交互式调试器:当发生错误时,Flask 提供一个交互式调试工具,可以在错误发生的位置进行代码调试。

需要注意的是,调试模式不应该在生产环境中使用,因为它可以暴露应用程序的敏感信息和漏洞。在发布应用程序之前,请确保将调试模式禁用或删除 debug=True

设置Host和Port

在 Flask 中,可以使用 app.run() 方法来启动一个本地服务器。这个方法可以接受一些可选的参数,例如 hostport,用于指定服务器的主机名和端口号。

以下是如何设置 hostport 的示例代码:

from flask import Flask

app = Flask(__name__)

# 应用程序代码

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

在上面的示例中,host='0.0.0.0' 表示监听所有网络接口上的请求,而 port=5000 表示使用端口号 5000。

如果想要在本地访问应用程序,可以在浏览器中输入地址:http://localhost:5000

需要注意的是,在生产环境中,应该将 host 设置为应用程序所在服务器的 IP 地址或域名,并将 port 设置为合适的端口号。另外,如果将应用程序部署到云服务提供商(如 Amazon Web Services 或 Microsoft Azure)中,则通常需要配置防火墙和网络安全组,以确保只有经过授权的用户可以访问应用程序。

app.config配置

在 Flask 中,可以使用 app.config 对象来配置应用程序的各种参数和设置。这个对象实际上是一个字典,可以通过键值对的方式来设置和获取配置项。

以下是如何使用 app.config 配置应用程序的示例代码:

from flask import Flask

app = Flask(__name__)

# 设置配置项
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'mysecretkey'
app.config['DATABASE_URI'] = 'sqlite:///database.db'

# 应用程序代码

在上面的示例中,通过 app.config['配置项名称'] = 值 的方式来设置配置项。你可以根据需要设置任意数量的配置项。

常见的 Flask 配置项包括:

  • DEBUG:调试模式的开关,True 表示启用调试模式,默认为 False
  • SECRET_KEY:用于加密会话数据的密钥,需使用安全的随机字符串进行设置。
  • DATABASE_URI:数据库的连接字符串,用于连接数据库。
  • TEMPLATES_AUTO_RELOAD:模板自动重新加载的开关,True 表示在模板文件修改后自动重新加载,默认为 True
  • 其他自定义的配置项。

你可以根据应用程序的需求自由设置和使用配置项。

使用Python配置文件

在 Flask 中,可以使用 Python 的配置文件来管理应用程序的配置项。通过使用配置文件,将不同环境下的配置分开管理,并根据需要加载相应的配置。

以下是如何使用 Python 配置文件的示例代码:

  1. 创建一个名为 config.py 的 Python 配置文件,定义配置项和对应的值:
# config.py

class Config:
    DEBUG = False
    SECRET_KEY = 'mysecretkey'
    DATABASE_URI = 'sqlite:///database.db'

class DevelopmentConfig(Config):
    DEBUG = True

class ProductionConfig(Config):
    DEBUG = False
    DATABASE_URI = 'mysql://user:password@localhost/dbname'
  1. 在 Flask 应用程序中加载配置:
from flask import Flask

app = Flask(__name__)

# 导入配置文件
app.config.from_object('config.DevelopmentConfig')
# 或者使用下面的方式
# app.config.from_envvar('APP_CONFIG')

# 应用程序代码

以上示例中,使用 app.config.from_object() 方法加载配置文件,并指定要使用的配置子类(例如 DevelopmentConfig)。这样,应用程序将使用 DevelopmentConfig 类中的配置项。

也可以使用 app.config.from_envvar() 方法从环境变量加载配置文件路径,这样可以根据不同的环境设置不同的配置文件。

  1. 使用配置项:
# 获取配置项的值
debug_mode = app.config['DEBUG']
secret_key = app.config['SECRET_KEY']
database_uri = app.config['DATABASE_URI']

在应用程序的其他地方,可以使用 app.config['配置项名称'] 来获取配置项的值。

你可能感兴趣的:(Python学习,Flask,python,flask,开发语言)