Flask是一个用Python编写的Web应用程序框架。 它由 Armin Ronacher
开发,他领导一个名为Pocco的国际Python爱好者团队。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。两者都是Pocco项目。
Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。
它是一个WSGI工具包,它实现了请求,响应对象和实用函数。 这使得能够在其上构建web框架。 Flask框架使用Werkzeug作为其基础之一。
jinja2是Python的一个流行的模板引擎。Web模板系统将模板与特定数据源组合以呈现动态网页。
Flask通常被称为微框架。 它旨在保持应用程序的核心简单且可扩展。Flask没有用于数据库处理的内置抽象层,也没有形成验证支持。相反,Flask支持扩展以向应用程序添加此类功能。一些受欢迎的Flask扩展将在本教程后续章节进行讨论。
如果没有安装Flask,请先百度怎么安装!!!
为了测试 Flask 安装,请在编辑器中将以下代码输入 Hello.py:
from flask import Flask
app = Flask(__name__)
#设置导航路径 '/'是默认不接后缀,直接访问
#route(rule, options)函数是一个装饰器
#它告诉应用程序哪个URL应该调用相关的函数
#rule 参数表示与该函数的URL绑定。
#options 是要转发给基础Rule对象的参数列表。
@app.route('/')
def hello_world():
return 'Hello World’
if __name__ == '__main__':
#run()方法在本地开发服务器上运行应用程序
#app.run(host, port, debug, options)
app.run()
#开启调试模式
#app.run(debug = True)
@app.route(‘/hello’)
def hello_world():
return ‘hello world’
在这里,URL ‘/ hello’ 规则绑定到hello_world()函数。 因此,如果用户访问http:// localhost:5000 / hello URL,hello_world()函数的输出将在浏览器中呈现。
application对象的add_url_rule()函数也可用于将URL与函数绑定,如上例所示,使用route()。
装饰器的目的也由以下表示:
def hello_world():
return ‘hello world’
app.add_url_rule(‘/’, ‘hello’, hello_world)
通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为。它作为关键字参数传递给与规则相关联的函数。
from flask import Flask
app = Flask(__name__)
#通过URL传参
@app.route('/hello/' )
def hello_name(name):
return 'Hello %s!' % name
#定义传的变量的类型
@app.route('/blog/' )
def show_blog(postID):
return 'Blog Number %d' % postID
@app.route('/rev/' )
def revision(revNo):
return 'Revision Number %f' % revNo
if __name__ == '__main__':
app.run(debug = True)
url_for()函数对于动态构建特定函数的URL非常有用。该函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分。
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/admin')
def hello_admin():
return 'Hello Admin'
@app.route('/guest/' )
def hello_guest(guest):
return 'Hello %s as Guest' % guest
#重定向
@app.route('/user/' )
def hello_user(name):
if name =='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest',guest = name))
保存上面的代码并从Python shell运行。
if __name__ == '__main__':
app.run(debug = True)
上述脚本有一个函数user(name),它接受来自URL的参数的值。
User()函数检查接收的参数是否与’admin’匹配。如果匹配,则使用url_for()将应用程序重定向到hello_admin()函数,否则重定向到将接收的参数作为guest参数传递给它的hello_guest()函数。
Http协议是万维网中数据通信的基础。在该协议中定义了从指定URL检索数据的不同方法。
默认情况下,Flask路由响应GET请求。但是,可以通过为route()装饰器提供方法参数来更改此首选项。
为了演示在URL路由中使用POST方法,首先让我们创建一个HTML表单,并使用POST方法将表单数据发送到URL。
这种场景常见于登录注册
<html>
<body>
<form action = "http://localhost:5000/login" method = "post">
<p>Enter Name:</p>
<p><input type = "text" name = "nm" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
from flask import Flask, redirect, url_for, request
app = Flask(__name__)
@app.route('/success/' )
def success(name):
return 'welcome %s' % name
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
user = request.form['nm']
return redirect(url_for('success',name = user))
else:
user = request.args.get('nm')
return redirect(url_for('success',name = user))
if __name__ == '__main__':
app.run(debug = True)
开发服务器开始运行后,在浏览器中打开login.html,在文本字段中输入name,然后单击提交。
表单数据将POST到表单标签的action子句中的URL。
http://localhost/login映射到login()函数。由于服务器通过POST方法接收数据,因此通过以下步骤获得从表单数据获得的“nm”参数的值:
user = request.form[‘nm’]
它作为变量部分传递给’/ success’ URL。浏览器在窗口中显示welcome消息。
在login.html中将方法参数更改为’GET’,然后在浏览器中再次打开它。服务器上接收的数据是通过GET方法获得的。通过以下的步骤获得’nm’参数的值:
User = request.args.get(‘nm’)
这里,args是包含表单参数对及其对应值对的列表的字典对象。与’nm’参数对应的值将像之前一样传递到’/ success’ URL。
可以以HTML的形式返回绑定到某个URL的函数的输出。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return ''
Hello World''
if __name__ == '__main__':
app.run(debug = True)
但是,从Python代码生成HTML内容很麻烦,尤其是在需要放置变量数据和Python语言元素(如条件或循环)时。这需要经常从HTML中转义。
这是可以利用Flask所基于的Jinja2模板引擎的地方。而不是从函数返回硬编码HTML,可以通过render_template()函数呈现HTML文件。