一、配置信息
app.run()的参数
- 参数1:host,如果我们不指定,默认值是127.0.0.1。
- 参数2:port,如果我们不指定,默认值是5000。
- 参数3:debug,调试模式,如果不指定,默认值是False。
- 如果设置为True,有两个好处:
-
- 如果在运行过程中,直接改动代码了,就不需要重新启动程序,只要Ctrl+S保存即可部署程序。
-
- 如果程序报错了,会有友情提示。
from flask import Flask
app = Flask(__name__)
@app.route('/hh')
def index():
print(1/0)
return "<h2>this is index</h2>"
if __name__ == "__main__":
app.run(host="127.0.0.1", port=5000, debug=True)
二、路由信息
1、在访问路由的时候指定参数
- 格式:@app.route(“/<类型:变量名>”)
- 常见的类型:
-
- 整数:int
-
- 小数:float
-
- 字符串:path(默认就是path)
"""
在访问路由的时候指定参数
- 格式:@app.route("/<类型:变量名>")
- 常见的参数类型
- 整数 int
- 小数 float
- 字符串 path 默认就是path
"""""
from flask import Flask
app = Flask(__name__)
# 接收一个整数
@app.route('/<int:num>')
def get_intnumber(num):
return "the age is %s" % num
# 接收一个小数
@app.route('/<float:num>')
def get_floatnumber(num):
return "the float is %s" % num
# 接收一个字符串
@app.route('/<path:str1>')
def get_pathnumber1(str1):
return "the path is %s" % str1
# 接收一个字符串
@app.route('/<str1>')
def get_pathnumber2(str1):
return "the path is %s" % str1
if __name__ == "__main__":
app.run(debug=True)
2、自定义参数类型(自定义转换器)
- 应用情况:
- 如果系统提供的int、flost、path等参数满足不了需求的时候,我们需要自定义。
- 之所以int、float、path可以接收不同的数据类型,是因为系统已经提供好对应的转换器了。
- 自定义转换器的格式:
-
- 定义类,继承自BaseConverter。
-
- 重写init方法,接收来两个参数。
-
- 初始化父类成员变量,还有子类自己的规则。
-
- 将转换器类,添加到系统默认的转换器列表中。
-
"""
- 自定义转换器的格式:
- 1. 定义类,继承自BaseConverter。
- 2. 重写init方法。
- 3. 初始化父类成员变量,还有子类自己的规则。
- 4. 将转换器类,添加到系统默认的转换器列表中。
需求:只接收3位整数
"""""
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# - 1. 定义类,继承自BaseConverter。
class MyRegexConverter(BaseConverter):
# 下面这样直接指定匹配规则,不够灵活,具体匹配什么规则应该交给路由
# regex = "\d{3}" # 仅匹配3位整数
# - 2. 重写init方法。接收两个参数
def __init__(self, map, regex):
# - 3. 初始化父类成员变量,还有子类自己的规则。
super(MyRegexConverter, self).__init__(map)
self.regex = regex
# - 4. 将转换器类,添加到系统默认的转换器列表中。
app.url_map.converters["haha"] = MyRegexConverter
# 匹配三位整数
# 使用haha(‘规则’),实际上是传递了两个参数,参数1:app.url_map,参数2:括号中写的正则表达式
@app.route('/<haha("\d{3}"):number>')
def get_three_number(number):
return "the three number is %s" % number
# 匹配四位整数
@app.route('/<haha("\d{4}"):number>')
def get_four_number(number):
return "the four number is %s" % number
# 匹配一个手机号
@app.route('/<haha("1[3-9]\d{9}"):phone>')
def get_phone_number(phone):
return "the phone is %s" % phone
if __name__ == "__main__":
app.run(debug=True)