zoukankan      html  css  js  c++  java
  • 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'd{4}'):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转换器的流程。

  • 相关阅读:
    Docker和k8s的区别与介绍
    NFS网络文件系统详解
    NFS文件系统及搭建NFS共享服务
    Tomcat 端口配置,及原理详解
    svn使用教程
    buff/cache内存占用过多
    关于xcode:如何在Objective-C中使用符号断点获取参数
    iOS开发消除编译警告
    建模的能力才是一个人和核心能力
    android sutdio 环境搭建
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/11087318.html
Copyright © 2011-2022 走看看