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/<name>')
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
模板文件的示例:
<!DOCTYPE html>
<html>
<head>
<title>Hello, {{ name }}!</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
复制代码
代码讲解:
- 在上面的示例中,使用了
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
模块可以方便地执行数据库操作,例如下面的示例:
# 创建数据库表
db.create_all()
# 插入数据
user = User(name='Alice', email='alice@example.com')
db.session.add(user)
db.session.commit()
# 查询数据
users = User.query.all()
# 更新数据
user.name = 'Bob'
db.session.commit()
# 删除数据
db.session.delete(user)
db.session.commit()
复制代码
在上面的示例中,我们使用 db.create_all()
创建数据库表,使用 db.session.add()
插入数据,使用 User.query.all()
查询数据,使用 db.session.commit()
提交事务。还可以使用 db.session.query()
查询数据,使用 db.session.filter()
过滤数据,使用 db.session.order_by()
排序数据等。
数据库模块是 Flask 应用程序的核心组成部分之一,它可以方便地实现数据的存储和管理,为 Web 应用程序提供强大的数据支持。在使用数据库模块时,需要注意数据的安全性和可靠性,如防止 SQL 注入攻击、处理事务、使用数据库索引等。
八、表单模块
表单模块是 Flask 应用程序中常用的组件之一,它可以方便地实现用户输入的数据验证和处理。在 Flask 中,表单模块通常使用 WTForms 库实现。
下面介绍如何在 Flask 应用程序中使用表单模块。
1)安装 WTForms
使用 pip 安装 WTForms:
pip install WTForms
复制代码
2)创建表单类
在 Flask 应用程序中,需要定义一个表单类来描述需要接收的数据和对数据进行验证的规则。例如下面的示例定义了一个简单的用户注册表单:
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
### 一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
### 二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
![](https://img-blog.csdnimg.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)
### 三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
![](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)
### 四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
![](https://img-blog.csdnimg.cn/afc935d834c5452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
### 五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
![](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)
### 六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![](https://img-blog.csdnimg.cn/img_convert/d2d978bb523c810abca3abe69e09bc1a.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**