Flask概述
什么是Flask?
Flask是一个用Python编写的Web应用程序框架。 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团队。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。
WSGI
Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。
Werkzeug
它是一个WSGI工具包,它实现了请求,响应对象和实用函数。 这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一。
jinja2
jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。
Flask通常被称为微框架。 它旨在保持应用程序的核心简单且可扩展。Flask没有用于数据库处理的内置抽象层,也没有形成验证支持。相反,Flask支持扩展以向应用程序添加此类功能。
Flask安装
1 | pip install flask //本地安装了python环境后,使用pip安装,若速度较慢,可以考虑切换pip源 |
Flask应用
Flask应用示例
1 | from flask import Flask //导入Flask模块 |
函数用法:
1 |
- rule 参数表示与该函数绑定的URL
- options 表示要转发给基础的Rule对象的参数列表
说明:在上示例应用中,’/‘URL与hello_world函数绑定,当浏览器打开web服务器时,将会呈现该函数的输出。
1 | app.run(host,port,debug,options) //本地服务器运行应用程序的入口 |
参数说明
序号 | 参数与描述 |
---|---|
1 | host 要监听的主机名,默认127.0.0.1(localhost).设置为“0.0.0.0”可以使服务器在外部可用 |
2 | port 端口,默认5000 |
3 | debug 默认为false。如果设置为true,提供调试信息 |
4 | options 转发到底层的Werkzeug服务器 |
运行上述Python脚本。在浏览器中打开(localhost:5000 或127.0.0.1:5000),输出”Hello World”消息。
Flask路由
路由: 不同的请求地址会交给路由处理来转发给相应的控制器处理,所以说路由就可以在转发前修改转发地址
Flask中的route()装饰器用于将URL绑定到函数。例如:
1 | @app.route(‘/hello’) |
在这里,URL ‘/ hello’ 规则绑定到hello_world()函数。 因此,如果用户访问http:// localhost:5000 / hello URLhello_world()函数的输出将在浏览器中呈现。
application对象的add_url_rule()函数也可用于将URL与函数绑定,如上例所示,使用route()
装饰器的目的也由以下表示:
1 | def hello_world(): |
Flask URL构建
动态URL
通过给规则参数添加变量,可以构建动态URL。
1 | from flask import Flask |
将上述脚本保存为hello.py并从Python shell运行它。接下来,打开浏览器并输入URL http:// localhost:5000/hello/w3cschool。
以下输出将显示在浏览器中:
1 | Hello w3cschool! |
lask的URL规则基于Werkzeug的路由模块。这确保形成的URL是唯一的,并且基于Apache规定的先例。
考虑以下脚本中定义的规则:
1 | from flask import Flask |
这两个规则看起来类似,但在第二个规则中,使用斜杠(/)。因此,它成为一个规范的URL。因此,使用 /python 或 /python/返回相同的输出。但是,如果是第一个规则,/flask/ URL会产生“404 Not Found”页面。
url_for
url_for()函数对于动态构建特定函数的URL非常有用。该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分。
以下脚本演示了如何使用url_for()函数:
1 | from flask import Flask, redirect, url_for |
上述脚本有一个函数user(name),它接受来自URL的参数的值。
User()函数检查接收的参数是否与‘admin’匹配。如果匹配,则使用url_for()将应用程序重定向到hello_admin()函数,否则重定向到将接收的参数作为guest参数传递给它的hello_guest()函数。
保存上面的代码并从Python shell运行。
打开浏览器并输入URL - http://localhost:5000/user/admin
浏览器中的应用程序响应是:
1 | Hello Admin |
在浏览器中输入以下URL - http://localhost:5000/user/mvl
应用程序响应现在更改为:
1 | Hello mvl as Guest |
Flask Requestdt对象
来自客户端网页 的数据作为全局请求对象发送到服务器。为了处理请求数据,应该从Flask模块导入。
Request对象的重要属性如下所列:
- Form - 它是一个字典对象,包含表单参数及其值的键和值对。
- args - 解析查询字符串的内容,它是问号(?)之后的URL的一部分。
- Cookies - 保存Cookie名称和值的字典对象。
- files - 与上传文件有关的数据。
- method - 当前请求方法。
Flask模板应用
可以在 URL 规则中指定 http 方法。触发函数接收的 Form 数据可以以字典对象的形式收集它并将其转发到模板以在相应的网页上呈现它。
在以下示例中,‘/‘ URL 会呈现具有表单的网页(student.html)。填入的数据会发布到触发 result() 函数的 ‘/result’ URL。
results() 函数收集字典对象中的 request.form 中存在的表单数据,并将其发送给 result.html。
该模板动态呈现表单数据的 HTML 表格。
下面给出的是应用程序的 Python 代码:
1 | from flask import Flask, render_template, request |
下面给出的是 student.html 的 HTML 脚本。
1 | <form action="http://localhost:5000/result"" method="POST"> |
下面给出了模板( result.html )的代码:
1 |
|
Flask Cookies
Request对象包含Cookie的属性,他是所有Cookie变量及对应值的字典对象,客户端已传输。除此之外,cookie还储存其网站的到期时间,路径和域名。
在Flask中对cookie的操作主要有
1.设置cookie:
设置cookie,默认有效期是临时cookie,浏览器关闭就失效
可以通过 max_age 设置有效期, 单位是秒
1 | resp = make_response("success") # 设置响应体 |
2.获取cookie
获取cookie,通过reques.cookies的方式, 返回的是一个字典,可以获取字典里的相应的值
1 | cookie_1 = request.cookies.get("w3cshool") |
3.删除cookie
这里的删除只是让cookie过期,并不是直接删除cookie
删除cookie,通过delete_cookie()的方式, 里面是cookie的名字
1 | resp = make_response("del success") # 设置响应体 |
以下为Flask Cookies的简单示例:
1 | from flask import Flask, make_response, request |
设置cookies
运行应用程序,在浏览器中输入 127.0.0.1:5000/set_cookies 来设置cookies,
1 | 注意删除,只是让 cookie 过期。 |
Flask 会话(Sessions)
与Cookie不同,Session数据存储在服务器上,
Flask文件上传
处理文件上传需要一个HTML表单,将其entype属性设置为‘multipart/from-data’,通过request.files[file]对象的filename获取。可以在flask对象的配置设置中定义文件路径及大小限定。
app.config[‘UPLOAD_FOLDER’] | 定义上传文件夹的路径 |
---|---|
app.config[‘MAX_CONTENT_PATH’] | 指定要上传的文件的最大大小(以字节为单位) |
以下代码具有’/ upload’ URL规则,该规则在templates文件夹中显示’upload.html’,以及‘/ upload-file’ URL规则,用于调用uploader()函数处理上传过程。
‘upload.html’有一个文件选择器按钮和一个提交按钮。
1 | <html> |
您将看到如下所示的界面。
选择文件后,单击提交。表单的post方法调用‘/ upload_file’ URL。底层函数uploader()执行保存操作。
以下是Flask应用程序的Python代码。
1 | from flask import Flask, render_template, request |