PythonFlask-快速构建Web应用详解 | 菜鸟教程网


本站和网页 https://www.rookiew.com/algorithm/13497.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

PythonFlask-快速构建Web应用详解 | 菜鸟教程网
专业版
编程学习路线
问答中心HOT
资料HOT
注册
登录
首页
编程问答
前端开发
后端开发
算法解析
网站优化
大数据分析
服务器运维
开发工具
操作系统
PythonFlask-快速构建Web应用详解
发表时间:2023-06-29
67.7k
模板
表单
路由
本文将详细探讨Python Flask Web服务。我将首先简单介绍Flask,然后将逐步进入Flask中的路由、模板、表单处理以及数据库集成等高级概念,目标是能够让大家了解并掌握使用Flask来创建动态Web应用的技巧。
1. Flask简介
Flask是一个轻量级的Web服务器网关接口(WSGI)web应用框架。它被设计为易于使用,同时也提供了扩展性,用户可以自由地选择将其与哪些第三方库集成。Flask是"微"框架,这意味着其核心功能非常有限,但可以通过一系列的扩展来增强功能。
让我们来看一下如何创建一个简单的Flask应用。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
在这段代码中,我们首先导入Flask模块,并创建一个Flask web服务器实例。然后,我们定义了一个路由(route),即/。这个路由映射到一个函数hello_world,当用户访问这个URL时,它会返回'Hello, World!'字符串。
2. Flask路由
Flask通过提供装饰器app.route,使得定义路由变得简单易行。但你知道我们也可以通过app.add_url_rule方法直接添加路由吗?这种方式提供了更多的灵活性,例如,可以为路由添加不同的HTTP方法。
def hello():
return "Hello, World!"
app.add_url_rule('/', 'hello', hello)
在上述代码中,app.add_url_rule的第一个参数是URL规则,第二个参数是函数的别名,第三个参数是要映射的函数。
3. Flask模板
Flask使用jinja2模板库。这个库非常强大,可以让你在HTML中嵌入Python代码。下面的例子展示了如何在Flask应用中使用模板:
from flask import render_template
@app.route('/hello/<name>')
def hello(name):
return render_template('hello.html', name=name)
render_template函数用于渲染一个模板。它接收模板的名称和一些模板变量作为参数,返回生成的HTML内容。在模板中,你可以使用{{ name }}来显示变量的值。
4. Flask表单处理
Flask-WTF是Flask中用于处理Web表单的扩展库。它基于WTF Python,一个处理表单数据的Python库。Flask-WTF还具有CSRF(跨站请求伪造)保护的功能。
让我们
看一个简单的例子:
from flask import request
from flask_wtf import FlaskForm
from wtforms import StringField
class MyForm(FlaskForm):
name = StringField('name')
@app.route('/submit', methods=('GET', 'POST'))
def submit():
form = MyForm()
if form.validate_on_submit():
return 'Hello, %s' % form.name.data
return render_template('submit.html', form=form)
在这个例子中,我们定义了一个表单类MyForm,包含一个name字段。然后,我们在submit路由中创建了一个该类的实例,并检查表单是否通过验证。如果表单有效,我们就返回一条欢迎信息;否则,我们就渲染一个表单模板。
5. Flask数据库集成
Flask-SQLAlchemy是一个为Flask应用提供SQLAlchemy支持的扩展库。SQLAlchemy是Python中的一种ORM(对象关系映射)工具,可以将类映射到数据库表。
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.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)
def __repr__(self):
return '<User %r>' % self.username
在这个例子中,我们首先配置数据库的URL,然后创建一个SQLAlchemy实例。接着,我们定义一个User类,这个类继承自db.Model,并具有两个属性:id和username。这两个属性都是数据库表的列。
6.使用Flask构建RESTful API
当构建Web API时,Flask-RESTful是一个值得了解的扩展。它为快速创建REST API提供了简单的方法。你可以通过定义Python类来实现API资源,并将HTTP方法(如GET、POST)映射到类的方法。
from flask_restful import Resource, Api
api = Api(app)
class HelloWorld(Resource):
def get(self):
return {'hello': 'world'}
api.add_resource(HelloWorld, '/')
在上述代码中,我们首先创建了一个Api对象,然后定义了一个资源类HelloWorld,并在这个类中实现了一个get方法。最后,我们使用api.add_resource将HelloWorld类绑定到/ URL。
7. Flask蓝图
Flask的蓝图功能让我们能够组织更大、更复杂的应用程序。你可以将蓝图视为Flask应用程序的一个子集,它可以拥有自己的路由、模板和静态文件。
下面是一个简单的例子:
from flask import Blueprint
simple_page = Blueprint('simple_page', __name__)
@simple_page.route('/<page>')
def show(page):
return 'Page %s' % page
在这个例子中,我们首先创建了一个名为simple_page的蓝图,然后为这个蓝图定义了一个路由show。
8. Flask错误处理
Flask允许我们自定义错误处理函数,当特定的HTTP错误发生时,我们可以返回自定义的响应。以下是如何为404错误定义自定义处理函数的示例:
@app.errorhandler(404)
def page_not_found(error):
return 'This page does not exist', 404
在这个例子中,我们使用app.errorhandler装饰器注册一个新的错误处理函数。当404错误发生时,它将返回一个自定义的错误消息。
9. Flask请求钩子
Flask提供了几个装饰器,我们可以使用它们来注册在处理请求的不同阶段调用的函数。这些装饰器包括before_first_request、before_request、after_request和teardown_request。
@app.before_request
def before_request():
print("This is executed BEFORE each request.")
在这个例子中,before_request装饰器的函数将在每个请求之前执行。
10. Flask中的Cookies和Sessions
在Web开发中,我们常常需要存储用户的信息,例如用户的偏好设置或者登录状态。Flask提供了Cookies和Sessions两种方式来完成这个任务。
下面是如何在Flask中设置和读取cookie的例子:
@app.route('/set')
def setcookie():
resp = make_response('Setting cookie!')
resp.set_cookie('username', 'the username')
return resp
@app.route('/get')
def getcookie():
username = request.cookies.get('username')
return 'The username is ' + username
在上述例子中,setcookie路由设置了一个cookie,名为username,getcookie路由读取并返回了这个cookie的值。
One more thing
Flask的测试客户端允许我们模拟向我们的应用发送请求,并查看响应。
def test_index():
client = app.test_client()
response = client.get('/')
assert response.status_code == 200
在上述代码中,我们首先创建了一个测试客户端。然后,我们使用这个客户端发送一个GET请求到/ URL,最后,我们检查响应的状态码是否为200。
这只是Flask强大功能的冰山一角,Flask的魅力远不止于此,它还有许多丰富的扩展,比如Flask-Login用于处理用户认证,Flask-Mail用于发送邮件,Flask-Migrate用于处理数据库迁移等等。
如有帮助,请多关注
个人微信公众号:【Python全视角】
TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。
原文链接:https://www.cnblogs.com/xfuture/archive/2023/06/29/17514416.html
相关文章
1、
quarkus实战之三:开发模式(Developmentmode)
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览前文咱们曾提到过几种启动方式,有一种用maven命令启动的,可以进入开发模式,命令如下:m
2、
如何在简历上写上&ldquo;精通Java&rdquo;(笔记一)
Java三大特征:封装,继承和多态成员变量:静态成员变量(static)和实例成员变访问方法:类名.静态成员变量;对象.实例成员变量;对象.静态成员变量;(第三个不推荐)套话:静态的都可以访问,实例的只能实例的访问继承中子类不能继承父类的
3、
Django学习笔记:第三章D的路由和视图
1.网站的入口--路由和视图URL是网站Web服务的入口。用户在浏览器输入URL发出请求后,django会根据路由系统,运行对应的视图函数,然后返回信息到浏览器中。1.1认识路由创建项目时,会自动生成urls.文件,文件中定义了项目
4、
JVM运行时数据区之堆空间
JVM运行时数据区之堆空间1.核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。堆区在JVM启动的时候即被创建,其空间大小也就确定了,是JVM管理的最大一块内存空间。《Java虚拟机规范》中对Java堆的描述
5、
Python潮流周刊#12:Python中如何调试死锁问题?
查看全文:https://pythoncat.top/posts/2023-07-22-weekly🦄文章&教程1、使用PyStack调试Python中的崩溃和死锁(英)2、介绍一个FastAPI项目模板(英)3
6、
python对象的多重继承
一个从多个父类继承过来的子类,可以访问所有父类的功能。并不推荐使用。多重继承最简单有用的形式是mixin。假设在之前Contact类增加一个功能,允许给self.email发送一封邮件。classContactList(list):d
热门教程
PHP
Python3
jQuery
Java
JavaScript
HTML
CSS
SQL
MySQL
Bootstrap5
Go
JSON
Python
Linux
C++
Redis
jQueryUI
ASP.NET
Bootstrap3
HTML5
Docker
AngularJS
SQLite
Foundation
Ruby
Highcharts
C#
Bootstrap4
MongoDB
PostgreSQL
Perl
XMLDOM
CSS3
jQueryMobile
Swift
Node.js
JSP
XML
ionic
设计模式
Scala
Eclipse
Vue.js
Vue3
Servlet
Lua
TypeScript
FontAwesome
AJAX
热门词云
数字化人才
人才培养
培训
数字化转型
shell命令
带参数
Harbor部署
Harbor常用管理命令
golang-cmdb
cloudplatform
CICD
零代码游戏开发
binglog
信道复用技
码元
传输媒介
随机数生成器
Python应用
std::remove_if
vector erase
C++ 11
删除操作
前端学习
学习记录
C++原子操作
C++ atomic
C++ mutex和atomic
atomic和mutex
流媒体服务器
视频点播服务器
网页视频播放
树和二叉树
遍历算法
Java序列化
Java反序列化
特征交互
registry
游戏开发入门教程
对话系统
主键约束
锁表
go-http-parse
go-web
go-api
HTTP请求参数解析
OceanBase
中文输入法
PIL
Image
redis6.0
PMP
组合查询
启动顺序
JS接口
Hive数据仓库
数仓工具
数仓分析系统
pwd
Workbox
分表
表视图
拉链表
同步复制
网络运维
passwd
user
悲观锁
进程组
网络适配器
docker-compose部署lnmp
rsyslog
LogAnalyzer
JavaScript学习笔记
路由交换
网络分类
有序数组
基准测试
CAP
BASE
大整数
HCIA综合实验
HCIA笔记
纯纯干货
网络工程师笔记
暴力算法
快慢指针法
短链接
TS
多版本
openblock
开机自启动
测试点
kubesphere
ruoyi-cloud
路由黑洞
选路规则
编辑页面
bug修复
自动配置
会话建立
HostProvider
ConnectStringParser
docker镜像实战
excel函数
零基础游戏开发教程
零代码做游戏
磁盘结构介绍
cglib
路径表达式
ETS基础
最新解答
开发工具
最近更新
jQuery animate() 方法
第二章节
简介12
AJAX XML
AJAX 实例
站点信息
关于我们
免责声明
最近更新
网站地图
建议反馈
菜鸟教程网提供的内容仅用于学习和测试,不保证内容的正确性。通过使用本站内容随之而来的风险与本站无关。
本站为非营利性站点,如有侵犯您的权益请 | 邮件投诉:coolsec[#]Foxmail.com
copyright © 2022 菜鸟教程[Pro] www.rookiew.com All Rights Reserved.
冀ICP备2021014458号-3