初始化
所有Flask应用都必须创建一个应用实例,应用实例是Flask类的对象,通常由下述代码创建:
from flask import Flask app = Flask(_ _name_ _)# __name__ 参数必填
路由和视图函数
1、路由:客户端把请求发送给Web服务器,Web服务器再把请求发送给Flask应用实例。应用实例需要知道每个URL的请求要运行哪些代码,所以保存了一个URL到Python函数的映射关系,处理URL与函数之间关系的程序称为路由。
2、视图函数:在Flask应用中定义路由使用应用实例提供的 app.route 装饰器,下面的列子说明了如何声明路由:
@app.route('/') def index(): return "<h1> Hello World!<h1/>"
- 像index()这样处理入站请求的函数称为视图函数,这个函数的返回值称为响应,是客户端接收到的内容。
- 动态路由,在日常服务中所使用的URL有很多地址是可变的,比如,Facebook资料页面的地址是http://www.facebook.com/<your-name>,Flask支持这种形式的URL,需要在 app.route 装饰器中使用特殊语法就可以:
@app.route('/user/<name>') def user(name): return "<h1> Hello, {}!</h1>".formate(name)
- 此时,Flask会将name作为参数传入函数,name参数用于生成个性化欢迎消息;路由的动态部分默认使用字符串,不过也可以是其他类型,Flask支持使用string、int、float和path类型。
URL与视图函数的映射
1、传递参数
传递参数的语法是: '/<参数名>/',然后视图函数中,也要定义同名参数
2、参数数据类型
- 如果没有指定其他数据类型,那么默认就是使用 string 数据类型
- int 数据类型只能传递 整数
- float 数据类型只能传递 小数
- path 数据类型可以接收任意的字符串,也可以接收路径也就是包含/\的字符串
- uuid 数据类型只能接收uuid 字符串,是一个全宇宙唯一的字符串,一般可以用来做表的主键
- any 数据类型可以在一个 url 中指定多个路径,例如:
@app.route("/<any(bolg,user):url_path>/<id>/") def detail(url_path,id): if url_path == "bolg": return "博客详情 %s" % id else: return "用户详情 %s" % id
3、自定义URL转换器
自定义方式:
- 实现一个类,集成子 BaseConverter
- 在自定义的类中重写 regex ,也就是这个变量的正则表达式
- 将自定义的类,映射到 app_url_map.converters 上,比如:
from werkzeug.routing import BaseConverter class TelephoneConveter(BaseConverter): regex = r'1[85734]\d{9}'# 正则表达式 app.url_map.converters["tel"] = TelephoneConveter
接收用户传递的参数
- 第一种,使用path形式(将参数嵌入到路径中)
- 第二种,使用查询字符串的方式,就是?key=value的形式传递;多参数使用&字符连接;
from flask import request @app.route("/d/") def d(wd): wd = request.args.get("wd") return “您通过查询字符串的方式传递的参数 %s”% wd
- 如果这个页面想要做优化,就是被搜索引擎搜索到,推荐使用第一种形式(path形式);如果不在乎搜索引擎优化,那么就可以使用第二种(查询字符串)
一个完整的应用
示例中定义了一个应用实例、一个路由和一个视图函数
示例2-1 hello.py 一个完整的Flask应用
from flask import Flask app = Flask(__name__) #应用实例 @app.route("/<name>") #路由/参数 def index(name): #视图函数 return "Hello,%s" % name