【python】- Flask模块: 轻量级 Web 应用框架的简介及用例

Flask - 轻量级 Web 应用框架

  • 一、Flask 的主要特性
  • 二、基本用法
      • 案例1、一个简单的 Flask 应用示例:
      • 案例2、运行一个应用并让它在特定的地址和端口上可用,
      • 案例3、 路由和视图函数
      • 案例4、动态路由
      • 案例5、请求数据处理
      • 案例6、使用模板
      • 案例7、重定向和错误处理
      • 案例8、使用静态文件
      • 案例9、Flask 扩展
      • 案例10、Flask Blueprints
  • 三、部署
    • Flask 扩展

Flask 是一个使用 Python 编写的轻量级 Web 应用框架。它被广泛用于快速开发简单且易于扩展的 web 应用。Flask 的设计哲学是“微内核”,意味着它本身只提供核心功能,如请求响应处理和路由,而其他功能则通过扩展来添加。

一、Flask 的主要特性

  1. 轻量级和简单:Flask 本身非常小巧,易于理解和使用,非常适合快速开发小型应用。
  2. 灵活:Flask 不强加任何依赖或项目布局。你可以根据自己的需求和喜好来组织你的应用。
  3. 可扩展:虽然 Flask 核心很小,但有大量的扩展可用于添加功能,如表单验证、用户认证、数据库集成等。
  4. 基于 WSGI:Flask 基于 WSGI(Web Server Gateway Interface) 标准,意味着它可以与 WSGI 兼容的多种 Web 服务器一起工作。
  5. 集成 Jinja2 模板引擎:Flask 内置了 Jinja2 模板引擎,使得在 Python 应用中生成 HTML 更为方便。
  6. 开发服务器和调试器:Flask 自带了一个内置的开发服务器和一个调试器,使得开发过程中的调试和测试更为方便。

二、基本用法

安装 Flask:

pip install Flask

案例1、一个简单的 Flask 应用示例:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

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

在这个例子中:

  • 我们首先导入 Flask 类。
  • 实例化一个 Flask 对象。
  • 使用 @app.route 装饰器定义路由。当用户访问根 URL / 时,hello_world 函数会被调用。
  • 应用运行在开发服务器上,debug=True 表示开启调试模式。

案例2、运行一个应用并让它在特定的地址和端口上可用,

你需要在调用 app.run() 时指定 hostport 参数。例如,如果你想让你的 Flask 应用运行在 192.168.100.200 地址的 6000 端口上,你可以这样设置:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(host='192.168.100.200', port=6000)

在这个例子中:

  • app.run(host='192.168.100.200', port=6000) 告诉 Flask 应用在 IP 地址 192.168.100.2006000 端口上监听请求。
  • 这样设置后,你的应用将可以通过 http://192.168.100.200:6000/ 访问。

注意事项

  1. 网络配置:确保 192.168.100.200 是服务器的 IP 地址,并且服务器的 6000 端口没有被其他服务占用。

  2. 防火墙设置:如果有防火墙,确保 6000 端口是开放的,以便外部请求可以到达 Flask 应用。

  3. 调试模式:在生产环境中运行 Flask 时,应关闭调试模式。在上面的例子中,你可以去掉 debug=True 或将其设置为 False

  4. 生产部署:Flask 自带的服务器主要用于开发和测试。在生产环境中,建议使用更健壮的 WSGI 服务器,如 Gunicorn 或 uWSGI。

  5. 安全性:如果你的应用是面向公网的,确保考虑安全性,比如使用 HTTPS、安全的编码实践、数据验证等。

案例3、 路由和视图函数

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, Flask!"
  • from flask import Flask:从 flask 模块导入 Flask 类。
  • app = Flask(__name__):创建一个 Flask 应用实例。__name__ 是当前模块的名称,Flask 用它来确定程序的根目录,以便稍后能找到相对于程序根目录的资源文件位置。
  • @app.route('/'):一个装饰器,定义了路由规则。这里 '/' 表示应用的根 URL。
  • def home():定义一个视图函数,它与上面定义的路由相关联。
  • return "Hello, Flask!":这个视图函数返回的字符串将会被显示在客户端(例如浏览器)。

案例4、动态路由

@app.route('/user/')
def show_user_profile(username):
    return f"User: {username}"
  • 'user/':定义一个动态路由, 是一个变量部分,可以接收来自 URL 的任意文本。
  • def show_user_profile(username)::定义的视图函数接收 username 作为参数。

案例5、请求数据处理

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        return f"Logging in {username} with password {password}"
    else:
		return "Login Page"
  • 从 flask 导入 request 对象,用于访问请求数据。
  • 定义一个接受 GET 和 POST 请求的路由。对于 POST 请求,通常用于提交表单数据。
  • 如果请求方法是 POST,从表单中提取用户名和密码。
  • 返回一个包含用户名和密码的字符串作为响应。
  • 如果请求方法不是 POST(比如 GET),返回一个表示登录页面的字符串。

案例6、使用模板

from flask import render_template
@app.route('/hello/')
def hello(name=None):
    return render_template('hello.html', name=name)
  • 导入 render_template 函数,用于渲染模板。
  • 定义一个路由,动态接收 URL 中的 name 参数。
  • render_template 渲染一个名为 hello.html 的模板文件,并传递 name 变量。

案例7、重定向和错误处理

from flask import redirect, url_for, abort
@app.route('/redirect')
def go_home():
    return redirect(url_for('home'))
@app.errorhandler(404)
def page_not_found(error):
    return "This page does not exist", 404
  • 导入 redirecturl_for 函数用于重定向,abort 用于错误处理。
  • 定义一个路由,当访问这个路由时,使用 redirect 函数重定向到 home 视图函数对应的 URL。
  • 使用 errorhandler 装饰器来自定义错误处理。这里定义了一个自定义的 404 错误处理视图。

案例8、使用静态文件

HTML 示例(不是 Python 代码):

<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
  • 在 HTML 模板中,使用 url_for 函数生成静态文件的 URL。这里假设有一个名为 style.css 的 CSS 文件在 Flask 应用的 static 目录下。

案例9、Flask 扩展

from flask_sqlalchemy import SQLAlchemy

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
  • 导入 Flask 的 SQLAlchemy 扩展,用于数据库操作。
  • 设置数据库 URI,并初始化 SQLAlchemy 对象。
  • 定义一个模型 User,映射到数据库表。

案例10、Flask Blueprints

from flask import Blueprint
mod = Blueprint('auth', __name__, url_prefix='/auth')
@mod.route('/login')
def login():
    return "Login Page"
  • 导入 Blueprint 类,用于创建蓝图。
  • 创建一个名为 auth 的 Blueprint 对象,所有路由都将以 /auth 作为前缀。
  • 为蓝图定义路由。这里的路由是 /auth/login

三、部署

虽然 Flask 自带的服务器方便开发测试,但不建议在生产环境中使用。在生产环境中,应该将 Flask 应用部署在一个更加健壮的 Web 服务器上,如 Gunicorn 或 uWSGI。

Flask 扩展

Flask 社区提供了大量扩展来增加额外的功能,如:

  • Flask-SQLAlchemy:用于数据库集成。
  • Flask-WTF:用于表单处理和验证。
  • Flask-Login:用于处理用户认证。

Flask 的简洁和灵活性使其成为 Python Web 开发的流行选择,特别是对于小型项目或作为微服务架构中的一个组成部分。

你可能感兴趣的:(python,flask,前端)