什么是Web Framework?
Web Application Framework(Web应用程序框架) 或简单的Web FrameWork(Web框架) 表示一个库和模块的集合, 使Web应用程序开发人员能够编写应用程序, 而不必担心
协议, 线程管理等低级细节.
什么是Flask?
Flask是一个用Python编写的Web应用程序框架. 由Armin Ronacher开发, 他领导一个名为Pocco的国际Python爱好团队。Flask基于Wrkzeug WSGI工具包和JinJa2模板引擎.两者都是Pocco项目
WSGI
Web Server Gateway Interface(Web服务器网关接口,WSGI)已经用作Python Web应用程序开发的标准。WSGI是Web服务器和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类的一个对象是我们的WSGI应用程序
Flask构造函数使用当前模块(__name__)的名称作为参数
Flask类的route()函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数
app.route(rule, options)
rule参数表示该函数的URL绑定
options是要转发给基础的Rule对象的参数列表
在上面的实例中,'/' URL与hello_word()函数绑定,因此,当在浏览器打开Web服务器的主页的时候,将呈现出改函数的输出. 最后,Flask类的run()方法在本地开发服务器上运行应用程序
app.run(host, port, debug, options)
所有参数都是可选的
host: 要监听的主机名,默认为127.0.0.1(loaclhost), 设置为 '0.0.0.0' 以使服务器在外部可用
port: 默认值为5000
debug: 默认为False,如果提供True, 则提供调试信息
options: 要转发到底层的Werkzeug服务器.
Flask路由
现代Web框架使用路由技术来帮助用户记住应用程序URL,可用直接访问所需要的页面,而无需从主页导航
Flask中的route()装饰器用于将URL绑定到函数,例如
@app.route('/test') def hello_world(): return 'Hello World'
在这里,URL '/test'规则的绑定到hello_word()函数,因此,如果用户访问http://localhost:5000/hello URL, hello_word()函数的输出将在浏览器中呈现
application对象的add_url_rule()函数也用于将URL与函数绑定,如上例所示,使用route()
装饰器的目的也以下表示:
def hello_world(): return 'Hello World' app.add_url_rule('/', 'test', hello_world)
Flask变量规则
通过向规则参数添加变量部分,可以动态构建URL,此变量部分标记为<variable-name> 。他作为关键字参数传递给规则相关联的函数。在以下实例中,route()装饰器的规则参数包含附加到URL '/helo'的<name>。因此,如果在浏览器中输入http://localhost:5000/test/11 作为url,则11将作为参数传递给hello函数
@app.route('/test/<name>') def hello_world(name): return 'Hello World {}'.format(name) app.run()
Flask变量规则
通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为<variable-name>。 它作为关键字参数传递给与规则相关联的函数
除了默认字符串变量部分之外,还可以使用以下转换器构建规则
int: 接收整数 float:接收浮点型 path:接收用作目录分隔符的斜杠
@app.route('/test/<int:ID>') def hello_world(ID): return 'Hello World {}'.format(ID) app.run()
Flask URL构建
url_for()函数对于动态构建特定函数的URL非常有用,改函数接收函数的名称作为第一个参数,以及一个或者多个关键字参数,每个参数对于URL的变量部分
request.form.get(),获取post请求传送过来的参数
request.args.get(),获取get请求传送过来的参数
test.py
from flask import Flask, redirect, url_for, request app = Flask(__name__) @app.route('/login', methods = ['GET', 'POST']) def test(): if request.method == 'GET': username, password = request.args.get('username'), request.args.get('password') #重定向到一个新的方法,get_test return redirect(url_for('get_test')) elif request.method == 'POST': username, password = request.form.get('username'), request.form.get('password') return redirect(url_for('post_test', name = username)) @app.route('/get_test') def get_test(): return 'get_test' #传入的name和函数里面的name参数名称保持一致 @app.route('/post_test/<name>') def post_test(name): return 'post_test %s'%name
login.html
<html> <body> <form action = "http://127.0.0.1:5000/login" method = "post"> <p>Enter Name:</p> <p><input type = "text" name = "username" /></p> <p><input type = "text" name = "password" /></p> <p><input type = "submit" value = "submit" /></p> </form> </body> </html>