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 应用程序中,需要定义一个表单类来描述需要接收的数据和对数据进行验证的规则。例如下面的示例定义了一个简单的用户注册表单:
from wtforms import Form, StringField, PasswordField, validators
class RegistrationForm(Form):
name = StringField('Name', [validators.Length(min=4, max=25)])
email = StringField('Email', [validators.Email()])
password = PasswordField('Password', [
validators.DataRequired(),
validators.EqualTo('confirm_password', message='Passwords must match')
])
confirm_password = PasswordField('Confirm Password')
复制代码
在上面的示例中,我们使用 WTForms
提供的 Form 类定义了一个表单类 RegistrationForm
,并定义了三个字段:name
、email
和 password
。对于每个字段,我们使用不同的验证器进行验证,例如 validators.Length
、validators.Email
和 validators.EqualTo
等。
3)在视图函数中使用表单
在 Flask 应用程序中,需要使用表单类来接收用户提交的数据,然后对数据进行验证和处理。例如下面的示例定义了一个处理用户注册的视图函数:
from flask import render_template, request
from .forms import RegistrationForm
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegistrationForm(request.form)
if request.method == 'POST' and form.validate():
# 处理用户注册数据
return 'Registration successful!'
return render_template('register.html', form=form)
复制代码
在上面的示例中,我们使用表单类 RegistrationForm
来接收用户提交的数据,然后在视图函数中使用 request.form
方法获取表单数据,并使用 form.validate()
方法验证表单数据是否合法。如果表单数据验证通过,则进行用户注册操作,并返回注册成功的消息。
4)渲染表单模板
在 Flask 应用程序中,需要使用模板引擎来渲染表单模板,并将表单类传递给模板。例如下面的示例定义了一个注册表单模板:
<form method="POST">
{{ form.name.label }} {{ form.name }}
{{ form.email.label }} {{ form.email }}
{{ form.password.label }} {{ form.password }}
{{ form.confirm_password.label }} {{ form.confirm_password }}
<button type="submit">Register</button>
</form>
复制代码
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板![在这里插入图片描述](https://img-blog.csdnimg.cn/646863996ac44da8af500c049bb72fbd.png#pic_center)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!