查看 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 都成功啦

总结

Flask(3)- Flask 中的 HTTP 方法的更多相关文章

  1. flask中邮件发送方法

    from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) #配置邮件:服务器/端口/传输层安 ...

  2. flask 在模板中渲染表单

    在模板中渲染表单 为了能够在模板中渲染表单,我们需要把表单类实例传入模板.首先在视图函数里实例化表单类LoginForm,然后再render_template()函数中使用关键脑子参数form将表单实 ...

  3. flask框架----flask中的wtforms使用

    一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...

  4. Flask系列02--Flask中的request

    一.Flask中的request方法 1.数据相关 #flask中request,render_template等方法要通过引包的方式引入 from flask import request ​ re ...

  5. Flask初学者:Python虚拟环境,Flask安装,helloworld,run方法

    一.Python虚拟环境: 作用:使Python框架的不同版本可以在同一台电脑上运行.如果在电脑上全局(C盘或者其他目录)安装Flask(或其他Python框架),当你使用其他版本的Flask(比如有 ...

  6. Flask系列08--Flask中flask_session, redis插件

    一.安装 1.flask_session 不想将Session的信息存放在Cookie 将Session存放在Redis Cookie中保存Session的ID flask中的session是直接将数 ...

  7. 【Python】【Flask】Flask 后台发送html页面多种方法

    1.使用模板: @app.route('/') def home(): return render_template("homepage.html")#homepage.html在 ...

  8. flask之route中的参数

    flask的路由中有一些参数 使用案例 from flask import Flask, render_template, url_for, session, request, redirect ap ...

  9. python3 无法使用flask.ext.* 报错的解决方法

    python3 使用flask的一些扩展功能的导入方法是 from flask_bootstrap import Bootstrapfrom flask_moment import Momentfro ...

  10. Flask接口开发过程中的心得2019.10.03

    完善了一下慕课网实战中的post接口开发,得到了一些进步: 代码如下: #coding=utf-8 from flask import Flask from flask import request ...

随机推荐

  1. 【LeetCode】81. 搜索旋转排序数组 II

    81. 搜索旋转排序数组 II 知识点:数组,二分查找: 题目描述 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k(0 ...

  2. 组合数取模(lukas)板子

    求 C(n,m)%mo #include<bits/stdc++.h>#define re register int#define mo 10007#define ll long long ...

  3. LeetCode入门指南 之 链表

    83. 删除排序链表中的重复元素 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 .返回同样按升序排列的结果链表. class Soluti ...

  4. 洛谷P2962题解

    题面 看到 \(n \leq 35\) ,这是一个非常小的数据,但是 \(O(2^n)\) 的暴力跑不过去,所以考虑玄学做法 \(\text{Meet in Middle}\) .就是先做左边,然后做 ...

  5. Python中print()函数的用法

    print()函数用于打印输出 1.函数语法: print(values,sep=' ',end='\n') sep和end是print()函数常用参数 参数sep是一次打印多个元素时的间隔符号,默认 ...

  6. RHCE_DAY06

    iptables防火墙 ----匹配及停止 nerfilter/iptables:工作在主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出 ...

  7. 记一次 .NET 某WMS仓储打单系统 内存暴涨分析

    一:背景 1. 讲故事 七月中旬有一位朋友加wx求助,他的程序在生产上跑着跑着内存就飙起来了,貌似没有回头的趋势,询问如何解决,截图如下: 和这位朋友聊下来,感觉像是自己在小县城当了个小老板,规律的生 ...

  8. alpakka-kafka(8)-kafka数据消费模式实现

    上篇介绍了kafka at-least-once消费模式.kafka消费模式以commit-offset的时间节点代表不同的消费模式,分别是:at-least-once, at-most-once, ...

  9. LNMP 方式部署 zabbix 5.0

    文章链接 Zabbix 5.0 LTS新增功能 新版本附带了可用性,安全性和完整性方面的重大改进列表.Zabbix团队遵循的主要策略是使Zabbix尽可能可用.Zabbix是一种开源,免费的监视解决方 ...

  10. NOIP 模拟 $19\; \rm v$

    题解 一道概率与期望的状压题目 这种最优性的题目,我们一般都是倒着转移,因为它的选择是随机的所以我们无法判断从左还是从右更有,所以我们都搜一遍 时间一定会爆,采用记忆化搜索,一种状态的答案一定是固定的 ...