zoukankan      html  css  js  c++  java
  • Flask(3)- Flask 中的 HTTP 方法

    查看 app.route() 源代码

        def route(self, rule: str, **options: t.Any) -> t.Callable:
            """Decorate a view function to register it with the given URL
            rule and options. Calls :meth:`add_url_rule`, which has more
            details about the implementation.
    
            .. code-block:: python
    
                @app.route("/")
                def index():
                    return "Hello, World!"
    
            See :ref:`url-route-registrations`.
    
            The endpoint name for the route defaults to the name of the view
            function if the ``endpoint`` parameter isn't passed.
    
            The ``methods`` parameter defaults to ``["GET"]``. ``HEAD`` and
            ``OPTIONS`` are added automatically.
    
            :param rule: The URL rule string.
            :param options: Extra options passed to the
                :class:`~werkzeug.routing.Rule` object.
            """
    
            def decorator(f: t.Callable) -> t.Callable:
                endpoint = options.pop("endpoint", None)
                self.add_url_rule(rule, endpoint, f, **options)
                return f
    
            return decorator

    重点

    • Calls:meth: add_url_rule,需要关注下这个方法
    • end_poiont 如果未传递 endpoint 参数,则路由的端点名称默认为视图函数的名称,如果已为注册函数,则会引发错误
    • methods 参数默认值是 ["GET"],所以当你不传 methods 参数时,只有发送 GET 请求才能匹配上对应的路由

    来看看 add_url_rule 方法

    打个断点,进入 debug 调试模式,运行后,一直 F7 就能看到源码

    • self:就是 Flask 类的实例
    • rule:其实就是路由规则
    • end_point:函数名
    • methods:如果没有传,那么会先通过 view_func 获取 methods 属性,如果还是没有,那默认就是 GET,记得这是个列表 [ ]

    结论

    默认的 app.route() 是仅支持 GET 请求的,如果想通过 POST、PUT、DELTE 等方法正常请求的话,需要添加 methods 参数哦

    GET 请求的栗子

    代码

    # 不指定 methods,默认就是 GET
    @app.route('/')
    def hello_world():
        # 返回字符串
        return '<b>Hello World</b>'
    
    
    @app.route('/get', methods=["GET"])
    def get_():
        # 返回字符串
        return '这是get请求'

    postman 请求结果

     

    没啥特别的~

    POST 请求的栗子

    代码

    @app.route('/post', methods=["POST"])
    def post_():
        # 返回字符串
        return {"messgage": "这是post请求"}

    返回的是一个 python 字典,那么最后请求得到响应会是啥呢?

    postman 请求结果

    踩坑之一:哎呀,假设我用 GET 方法发起请求,那么就会直接报 405,说你的请求方法是不允许的!记住了哦!

    要记住,如果 return 的是字典,那么请求得到的响应数据是 Json 格式哦

    PUT、DELETE 请求的栗子

    代码

    @app.route('/delandput', methods=["DELETE", "PUT"])
    def delandput():
        # 返回字符串
        return ["delete", "put"]

    一个视图函数,允许 DELETE、PUT 方法

    postman 请求结果

    踩坑之二:我去!怎么报错了...仔细一看,错误信息已经提示的很清楚了,视图函数的返回值类型只能是 string、dict、tuple

    正确的代码

    @app.route('/delandput', methods=["DELETE", "PUT"])
    def delandput():
        # 返回字符串
        return {"result": ["delete", "put"]}

    postman 请求结果

    put 和 delete 都成功啦

    总结 

  • 相关阅读:
    程序员的一天
    美团点评云真机平台实践
    第5波:5本《自动化平台测试开发》+5本《软件自动化测试开发》又双叒叕来送书了...
    软件测试:管理篇
    软件测试:用例篇
    转载ASP.NET MVC 和ASP.NET Web Form简单区别
    转载ASP.NET 状态管理Application,Session,Cookie和ViewState用法
    转载 asp.net中ViewState的用法详解
    在ASP.NET中如何运行后台任务
    转载 .net中的dll.refresh文件和pdb文件
  • 原文地址:https://www.cnblogs.com/poloyy/p/14994139.html
Copyright © 2011-2022 走看看