flask转换器类中to_python 和 to_url 区别
Posted xuehaiwuya0000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask转换器类中to_python 和 to_url 区别相关的知识,希望对你有一定的参考价值。
flask框架中,转换器是一个较常用的对象。其常规的转换器有 int,float,path,any,string,default,uuid七个转换器,其中默认是字符串转换器。若想匹配特定的url路径,需要定义自己的转换器类。转换器类中有两个方法to_url和to_python都是用来对客户请求路径进行匹配的。其中to_url是在重定向时,依赖url_for函数匹配建立用户的路径。匹配正确后,通过to_python方法,将路径返回给对应的视图函数。
转换器的匹配原理是用户输入请求后,将路径与转换器的self.regex进行匹配。匹配成功后,将路径通过to_python传递给视图函数,返回客户请求。这是常规的匹配路径流程。当客户路径是通过重定向的,则首先通过url_for函数形成匹配的新路径,此匹配的新路径的形成流程是:url_for会调用to_url 形成路径,然后与视图函数匹配。成功后,将路径通过to_python函数将路径传递给视图函数,返回用户请求。
以一个例子描述上述过程:
from flask import Flask #from flask import request from flask import jsonify from flask import redirect from flask import url_for from werkzeug.routing import BaseConverter import json app= Flask(import_name="__name__") class ReguConverter(BaseConverter): def __init__(self,map,*args): super(ReguConverter, self).__init__(map) self.regex=args[0] class ListConverter(BaseConverter): def __init__(self,map ,*args): super(ListConverter, self).__init__(map) self.regex=args[0] def to_python(self, value): print("匹配后",value) return value.split(",") def to_url(self, value): value+="7890" print(" 匹配之前,",value) s1=",".join(value) return s1 app.url_map.converters["list"]=ListConverter app.url_map.converters["regu"]=ReguConverter @app.route("/static/<list(r‘(\d+,)+\d+$‘):a>") def out3(a): print("参数a被调用后",a) return "hello"+str(a) @app.route("/static/<regu(r‘\d4‘):a1>") def out2(a1): print(type(a1),a1) s=url_for("out3", a=a1) print(s,90909090) return redirect(s) if __name__ == ‘__main__‘: app.config.from_pyfile("config1.cfg") app.run()
调试:
通过输入127.0.0.1:5000/static/1234 可以查看上述调用list转换器的流程。
以上是关于flask转换器类中to_python 和 to_url 区别的主要内容,如果未能解决你的问题,请参考以下文章