一.第一个hello world程序
# coding=utf-8 from flask import Flask app = Flask(__name__) @app.route(‘/‘) def hello_world(): return ‘Hello World!‘ if __name__ == ‘__main__‘: app.run(debug=True)
1.app参数的设置:
以下几种方式全部拿debug模式举例:
.方式一:将参数设置到app.config字典中:
app.config["DEBUG"] = True
.方式二:加载文件:
1. 先在根目录下创建一个config.py文件,然后写入DEBUG = True
2. 然后在含有app文件中设置参数:
app.config.from_pyfile("config.py")
.方式三:加载对象(实际开发中一般用这个):
1. 先在根目录下创建一个config.py文件,然后写入如下代码:
class Config(object): DEBUG = True
2. 在app文件中导入config文件中的Config类。
3. 然后设置:
app.config.from_object("Config")
.方式四:app的属性
app.debug = True
也可以
app.run(debug=True)
但是这种方式不同用,只是针对debug模式可以这样设置。
2.取app.config参数中的值:
1)app.config.get("DEBUG")
2)current_app.config.get("DEBUG")
3)Config.DEBUG
二.路由的各种定义方式
1.路由的查找方式:
2.flask中内置的路由转换器(路由传参的几种形式)
a.系统默认的类型default就是string类型,也就是说进行路由的参数匹配的时候,系统默认会将参数当作string类型进行匹配。下面举例说明:
1 @app.route(‘/<str>‘) 2 def print_str(str): 3 print type(str) # 结果为:<type ‘unicode‘> 4 return str 5 6 7 @app.route(‘/<string:str>‘) 8 def print_str1(str): 9 print type(str) # 结果为:<type ‘unicode‘> 10 return str
1 @app.route(‘/<any(hello,python,java,"javascript:;"):str>‘) 2 def print_any(str): # 只能匹配括号里面的数据,并且引号里面的数据可以随意写 3 print type(str) 4 return str 5 6 7 @app.route(‘/<path:str>‘) # http://localhost:5000/path/str 8 def print_path(str): 9 print type(str) 10 return str # 结果为:path/str 11 12 13 @app.route(‘/<int:str>‘) # 页面传过来的数据(字符串类型)在这里直接转换为int类型 14 def print_int(str): 15 print type(str) # <type ‘int‘> 16 return str(str) # 此时将数据返回给页面的时候必须转换为字符串类型 17 18 @app.route(‘/<float:str>‘) # 只有当页面传递过来的是小数float转换器才起作用 19 def print_float1(str): 20 print type(str) # <type ‘float‘> 21 return str(str)
b. uuid是32位16进制的数字。
3.路由的重定向
1)重定向的方法是redirect()常常和url_for一起使用。比如:redirect(url_for(“视图函数的方法名”))
4.返回Json数据的两种方法:
1)json.dumps("字典")
2)jsonify("字典")
第一种方法仅仅是将字典转换为字符串返回给页面,响应头的Content-Type为text/html。
第二种方法是将字典转换为json返回给页面,响应头的Content-Type为application/json。这是开发中比较常用的方法。
现在的需求是用第一种方法还要达到第二种方法的效果,代码为:
return json.dumps(“字典”), 200, {‘Content-Type‘: ‘application/json‘}
5.自定义正则路由转换器
1)导入包
from werkzeug.routing import BaseConverter
2)仿照BaseConverter自定义一个类
class RegexConverter(BaseConverter): def __init__(self,url_map,*args): super(RegexConverter,self).__init__(url_map) self.regex = args[0]
3)将自定义的类添加到路由转换器的字典中
app.url_map.converters["re"] = RegexConverter # 这句话相当于将自己定义的类用re来表示
4)将正则路由转换器应用到实例中
@app.route(‘/<re(r"\d{2}"):str>‘) # 只能匹配两位数字 re(“正则”) ===> 相当于执行了RegexConverter中的init方法,将正则赋值给self.regex def print_str(str): return str
原文地址:https://www.cnblogs.com/RomanticLife/p/8362022.html