Python Flask 轻量级的Web应用程序框架介绍_基于flask的轻量级web应用框架

@app.route(‘/hello/’)
def hello(name=None):
return render_template(‘hello.html’, name=name)

启动应用程序

if name == ‘main’:
app.run()
复制代码


代码讲解:


* 在上面的示例中,我们首先导入了 `Flask` 类和 `render_template` 函数。然后创建了一个 Flask 应用程序对象,使用了`__name__` 作为应用程序的名称。接着配置了应用程序的一些基本属性,包括调试模式和密钥等。
* 然后使用 `@app.route()` 装饰器来注册 URL 路由和视图函数之间的映射关系。我们定义了三个视图函数,分别对应不同的 URL 地址,可以返回不同的响应内容。其中 `/hello/` 和 `/hello/<name>` 两个路由对应的是同一个视图函数,使用了 Flask 支持的多路由规则。
* 最后使用 `app.run()` 方法启动了应用程序,使其可以接收 HTTP 请求。
* 注意,在开发过程中,我们通常不会将 Flask 应用程序对象的 run() 方法直接放在程序的主体代码中,而是使用一个单独的脚本来启动应用程序,如:



if name == ‘main’:
app.run()
复制代码


### 四、路由模块


路由模块是 `Flask` 应用程序的核心组成部分之一,它实现了 `URL` 路由和视图函数之间的映射关系。在 `Flask` 中,我们可以通过定义路由模块来为应用程序添加不同的路由规则,使得应用程序可以响应不同的 `URL` 请求。


在 Flask 中,可以使用装饰器来定义路由模块。常用的装饰器包括:


* `@app.route(rule, options)`:定义路由规则和处理函数之间的映射关系。其中 rule 参数表示路由规则,options 参数表示路由的配置选项。


例如,下面的示例定义了一个路由规则,用于处理 /hello URL 请求,并返回一个包含字符串的响应:



from flask import Flask

app = Flask(name)

@app.route(‘/hello’)
def hello():
return ‘Hello, World!’
复制代码


* `@app.before_request`:在每个请求被处理之前执行的函数。通常用于执行一些预处理操作,例如验证用户的登录状态、设置全局变量等。


例如,下面的示例定义了一个 `before_request` 函数,用于在处理请求之前打印请求的 HTTP 方法和 URL:



from flask import Flask, request

app = Flask(name)

@app.before_request
def log_request():
print(f’Request: {request.method} {request.url}')

复制代码


* `@app.after_request`:在每个请求被处理之后执行的函数。通常用于执行一些后处理操作,例如添加响应头信息、记录日志等。


例如,下面的示例定义了一个 `after_request` 函数,用于在处理请求之后添加一个名为 X-My-Header 的响应头:



from flask import Flask

app = Flask(name)

@app.after_request
def add_header(response):
response.headers[‘X-My-Header’] = ‘Hello, World!’
return response

复制代码


* `@app.errorhandler`:处理指定错误码的异常,例如 `404` 错误、`500` 错误等。可以定义多个不同的错误处理函数,以处理不同的异常情况。


例如,下面的示例定义了一个 `404` 错误处理函数,用于处理访问不存在的 `URL` 时的异常情况:



from flask import Flask, render_template

app = Flask(name)

@app.errorhandler(404)
def page_not_found(e):
return render_template(‘404.html’), 404

复制代码


在上面的示例中,我们定义了一个 `page_not_found()` 函数,并使用 `@app.errorhandler(404)` 装饰器将其注册为处理 `404` 错误的函数。在处理 `404` 错误时,Flask 会调用该函数,并将异常对象作为参数传入。函数返回一个包含错误信息的响应,并将 `HTTP` 状态码设置为 `404`。


总之,路由模块是 Flask 应用程序的重要组成部分,它可以通过不同的装饰器实现请求预处理、响应后处理、错误处理等功能。下面是一个完整的 Flask 路由模块的示例:



from flask import Flask, request, render_template

app = Flask(name)

请求预处理函数

@app.before_request
def log_request():
print(f’Request: {request.method} {request.url}')

路由规则和处理函数

@app.route(‘/’)
def index():
return ‘Hello, World!’

@app.route(‘/hello’)
def hello():
return ‘Hello, World!’

@app.route(‘/hello/’)
def hello_name(name):
return f’Hello, {name}!’

响应后处理函数

@app.after_request
def add_header(response):
response.headers[‘X-My-Header’] = ‘Hello, World!’
return response

错误处理函数

@app.errorhandler(404)
def page_not_found(e):
return render_template(‘404.html’), 404

启动应用程序

if name == ‘main’:
app.run()

复制代码


在上面的示例中,我们定义了一个 Flask 应用程序,并使用 @app.route 装饰器定义了三个路由规则和处理函数:


* `/` URL 请求将会调用 index() 函数,并返回一个字符串 'Hello, World!'。
* `/hello` URL 请求将会调用 hello() 函数,并返回一个字符串 'Hello, World!'。
* `/hello/<name>` URL 请求将会调用 hello\_name(name) 函数,并返回一个包含 name 参数的字符串 'Hello, {name}!'。


我们还使用了 `@app.before_request` 装饰器定义了一个请求预处理函数 `log_request()`,用于在每个请求被处理之前打印请求的 `HTTP` 方法和 `URL`。


同时,我们还使用了 `@app.after_request` 装饰器定义了一个响应后处理函数 `add_header(response)`,用于在每个请求被处理之后添加一个名为 X-My-Header 的响应头。


最后,我们使用 `@app.errorhandler` 装饰器定义了一个 404 错误处理函数 `page_not_found(e)`,用于处理访问不存在的 URL 时的异常情况。


整个路由模块的代码非常简单明了,通过 Flask 提供的装饰器可以轻松地定义路由规则和处理函数,实现不同 URL 请求的响应。


### 五、视图模块


在 Flask 中,视图模块用于处理请求并生成响应,通常由视图函数来实现。视图函数负责处理一个或多个 URL 请求,并返回一个响应对象。响应对象可以是纯文本、HTML、JSON、图像等。


下面是一个简单的 Flask 视图模块的示例:



from flask import Flask, request, jsonify

app = Flask(name)

视图函数

@app.route(‘/hello’)
def hello():
name = request.args.get(‘name’, ‘World’)
return f’Hello, {name}!’

@app.route(‘/json’)
def json():
data = {‘message’: ‘Hello, World!’}
return jsonify(data)

启动应用程序

if name == ‘main’:
app.run()

复制代码


在上面的示例中,我们定义了两个视图函数:


* `hello()` 函数处理 `/hello` URL 请求,使用 `request.args.get()` 方法获取请求参数中的 `name` 参数(默认为 `'World'`),并将其插入到响应字符串中返回给客户端。
* `json()` 函数处理 `/json` URL 请求,生成一个包含 `message` 属性的字典对象,然后使用 Flask 提供的 `jsonify()` 函数将其转换为 JSON 格式的响应对象返回给客户端。


启动 Flask 应用程序后,可以在浏览器中访问 `/hello` 或 `/json` URL 来测试视图函数的效果。


视图函数是 Flask 应用程序的核心组成部分,可以通过不同的方式生成响应,如使用模板引擎渲染 HTML 页面、返回纯文本或 JSON 数据等。视图函数还可以接受请求参数,通过 `request` 对象获取请求数据,并根据请求参数生成相应的响应。


### 六、模板模块


在 Flask 中,模板模块用于生成动态的 HTML 页面或其他类型的文档。Flask 支持多种模板引擎,如 Jinja2、Mako、Mustache 等,其中 Jinja2 是最常用的模板引擎之一。


下面是一个简单的 Flask 模板模块的示例,使用 Jinja2 模板引擎渲染一个 HTML 页面:



from flask import Flask, render_template

app = Flask(name)

路由规则和视图函数

@app.route(‘/’)
def index():
return render_template(‘index.html’, name=‘World’)

启动应用程序

if name == ‘main’:
app.run()

复制代码


在上面的示例中,我们定义了一个路由规则 `/`,并使用 `render_template()` 函数将模板文件 `index.html` 渲染为 HTML 页面,其中传递了一个名为 `name` 的变量值为 `'World'`。


下面是 `index.html` 模板文件的示例:



Hello, {​{ name }}!

Hello, {{ name }}!

复制代码


代码讲解:


* 在上面的示例中,使用了 `Jinja2` 模板引擎的语法 `{{ name }}`,它将在渲染模板时被替换为 `render_template()` 函数中传递的 name 变量的值。
* 启动 Flask 应用程序后,访问根 URL `/` 将会返回一个包含 `Hello, World!` 的 HTML 页面。
* 模板模块是 Flask 应用程序的重要组成部分,它可以实现动态生成各种类型的文档,如 HTML 页面、`JSON` 数据、`CSV` 文件等。在 Flask 中,使用模板引擎可以方便地将数据和 HTML 页面进行分离,实现更加清晰和易于维护的代码结构。


### 七、数据库模块


在 Flask 应用程序中,通常需要使用数据库来存储和管理数据。Flask 提供了多种数据库模块的支持,如 `SQLAlchemy`、`Peewee`、`MongoDB` 等。


下面以 SQLAlchemy 为例,介绍如何在 Flask 应用程序中使用数据库模块。


#### 1)安装 SQLAlchemy


使用 pip 安装 SQLAlchemy:



pip install SQLAlchemy
复制代码


#### 2)配置数据库连接


在 Flask 应用程序中,需要配置数据库连接,包括数据库类型、主机名、端口号、数据库名、用户名和密码等。可以使用 Flask 应用程序的配置对象 `app.config` 来存储这些配置信息,如下所示:



from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(name)
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘postgresql://user:password@localhost/mydatabase’
db = SQLAlchemy(app)

复制代码


在上面的示例中,我们使用 `SQLAlchemy` 模块创建了一个数据库连接 `db`,并将其关联到 Flask 应用程序对象 `app` 上。


#### 3)定义数据库模型


使用 SQLAlchemy 模块可以方便地定义数据库模型,例如下面的示例定义了一个简单的用户模型:



from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime

class User(db.Model):
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)
email = Column(String(120), unique=True, nullable=False)
created_at = Column(DateTime, default=datetime.now)
复制代码


在上面的示例中,我们使用 `SQLAlchemy` 提供的 `Column` 类定义了三个列:`id`、`name`、`email` 和 `created_at`。其中,`id` 是主键列,`name` 和 `email` 是字符串列,`created_at` 是日期时间列。


#### 4)数据库操作


使用 `SQLAlchemy` 模块可以方便地执行数据库操作,例如下面的示例:



![在这里插入图片描述](https://img-blog.csdnimg.cn/20210511152217670.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaWd1aWd1,size_16,color_FFFFFF,t_70)

**感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:**



① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 22
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值