python - 在 falcon 中添加自定义 HTTP 方法?
问题描述
尽可能多的 HTTP 框架支持在代码中使用自定义方法和自定义 HTTP 状态代码,我想知道是否可以用 Falcon 做同样的事情?
我试过:
class MyResource:
def on_obtain(self, req, resp):
# do some thing
我还将它添加到API
路由中,但是当我调用这个 API 时,我得到HTTP/1.1 400 Bad Request
了这个主体:
{"title":"Bad request","description":"Invalid HTTP method"}
我的问题是可以定义obtain
这个资源吗?
解决方案
我认为您需要使用自定义路由器。只是一个例子:
class Resource:
def on_get(self, req, resp):
resp.body = req.method
resp.status = falcon.HTTP_200
def on_example(self, req, resp):
resp.body = req.method
resp.status = falcon.HTTP_200
class MyRouter(routing.DefaultRouter):
# this is just demonstration that my solution works
# I added request method into method_map
def add_route(self, uri_template, method_map, resource):
super().add_route(uri_template, method_map, resource)
method_map['EXAMPLE'] = resource.on_example
def find(self, uri, req=None):
return super().find(uri, req)
api = falcon.API(router=MyRouter()) # just set your router
test = Resource()
api.add_route('/test', test)
让我们检查:
curl -X EXAMPLE http://127.0.0.1:8000/test
EXAMPLE⏎
curl http://127.0.0.1:8000/test
GET⏎
所以,你所需要的只是创建Router
和实现add_route()
/find()
方法。希望你明白我的意思。
推荐阅读
- c# - 无法在 MVC C# 中从 www.domain.com 重定向到 domain.com
- c# - 尝试搭建脚手架时找不到任何兼容的框架版本
- sql - SQLite中使用冲突策略作为REPLACE时保留主键的值
- java - Java:版本与 WS 冲突
- git - git历史上无法推送大文件
- php - 没有 curl 的 caldav wordpress 插件,使用 wp_remote_get() 代替
- javascript - 当所有边,角度和前两个点都已知时,Javascript函数可以找到三角形的第三个点
- python - 每次训练keras模型后的结果都不一样
- angularjs - 如何禁用 ag-grid 中的整个列
- wordpress - 如何在 IIS 上使用 Word Press 修复添加插件错误?