龙卷风 Restful 处理程序类

2023-11-27

我四处阅读并发现这个回答了问题关于与此相关的问题,但我真正想知道的是如何实现这个结构以及我需要多少个处理程序类:

1  GET    /items        #=> index
2  GET    /items/1      #=> show
3  GET    /items/new    #=> new
4  GET    /items/1/edit #=> edit
5  PUT    /items/1      #=> update
6  POST   /items        #=> create
7  DELETE /items/1      #=> destroy

我正在考虑将 2,5,7 映射到路由到 /items/[0-9]+ 的单个处理程序,并为项目、items/new 和 /items/[0-9]+/edit 创建 3 个新处理程序。缺点是,对于单个资源使用 4 个处理程序感觉像是一个次优的解决方案。

我对正确的路由/处理/网络应用程序非常陌生,但在开始做某事之前我至少仔细阅读了它。对于路由处理程序的数量/方式,是否有更好的建议?


嗯,这很大程度上是风格上的。这种情况下的每个请求处理程序 表示从您的方法之一中删除 if 语句。我认为它 可以更清晰的限制RequestHandler的数量。最清晰的 我认为可以通过一个处理程序和三个路线来实现结果。

我也扔掉了你的第 3 项。因为它是第 6 项的重复项。如果 拥有“items/new”网址非常重要,然后我们可以将其放回原处。 尽管我认为此时您需要另一个处理程序类来清楚起见。

class ItemHandler(tornado.web.RequestHandler):

    def get(self, item_id=None, edit=False):
        if item_id:
            # get item from db
            if edit:
                new_data_from_query_string = self.get_argument('item_data')
                # do edit, save item
            # return item
        else:
            # return index

    def put(self, item_id):
        data = self.get_argument('item_data')
        # do your update for item

    def post(self):
        data = self.get_argument('item_data')
        # do your item creation

    def delete(self, item_id):
        # do your deletion for item_id

然后实际的应用程序可以这样创建:

tornado.web.application([
    (r'/items$', ItemHandler),
    (r'/items/(\d+$)', ItemHandler),
    (r'/items/(\d+)/(edit)$', ItemHandler),
])

如果您想要“/items/new”网址,那么我可能建议将其放入 一个单独的处理程序,因为否则会使逻辑过于复杂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

龙卷风 Restful 处理程序类 的相关文章

随机推荐

  • 如何转换 CSS 显示 + 不透明度属性

    我的 CSS3 动画有问题 child opacity 0 display none webkit transition opacity 0 5s ease in out moz transition opacity 0 5s ease i
  • 如何绕过警告“右值用作左值”?

    我在用着本教程 但是当我从中编译代码时 D3DXMatrixLookAtLH matView D3DXVECTOR3 0 0f 10 0f 0 0f warning C4238 D3DXVECTOR3 0 0f 0 0f 0 0f warn
  • 如何将WPF页面添加到tabcontrol?

    I have this main wpf window 和这个 WPF 页面 我需要将此页面添加到主窗口中的选项卡控件 这是我的 OnRender 方法 protected override void OnRender DrawingCon
  • Laravel Eloquent 与 DB Facade:何时使用哪个? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我在之间做了一些性能测试Laravel DB 门面查询生成器 and Laravel 的 Eloquent ORM 对于许多 SQL 语句 SELECT UPDATE DELET
  • 如何减小产品包大小?

    我有一个简单的应用程序 初始化为angular cli 它显示了与 3 个路由相关的一些页面 我有 3 个组件 在此页面之一上我使用lodash和 Angular 2 HTTP 模块来获取一些数据 使用 RxJSObservables ma
  • 对当前使用的成员进行联盟测试

    工会是否有控制结构来测试当前正在使用哪个成员 或者是否有 我问这个问题是因为程序中存在未定义的行为从来都不是一件好事 不 现成的机制不存在 你必须自己处理这个问题 通常的方法是包装union in a struct struct MyUni
  • 如何在反应中使超链接外部?

    我是新来反应并在组件中有此链接 a href https example com faq html FAQ a 我要服务器faq html外界反应 问题是 React 将链接视为内部链接并给出 404 我见过一个相似的建议使用的问题
  • iframe 内的图像样式

    我通过设置 iframe 的 src 属性在 iframe 中有一个图像 iframe 具有固定的高度和宽度 我希望该图像的宽度填充 iframe 但其高度将与宽度保持成比例 以便用户能够向下滚动 iframe 以查看图像的其余部分 我该怎
  • matplotlib 轴上的不同精度

    我的老师说 在图表中我必须将轴标记为0 0 25 0 5 not 0 00 0 25 0 50 我知道如何标记它0 00 0 25 0 50 plt yticks np arange 1 5 1 5 25 但是 我不知道如何以不同的精度绘制
  • Delphi 中检测磁盘活动

    我正在使用Delphi 2007 我正在将文件复制到远程驱动器 复印结束后 我关闭 待机机器 可能会发生某些文件没有从缓冲区复制到磁盘的情况 并且远程磁盘断开连接 因此备份未完成 我需要检测该磁盘上的磁盘活动 以便能够正确地在计算机上执行关
  • Zend Framework 中的数据库事务:它们是隔离的吗?

    使用 Zend Framework 我需要 1 从 MySQL 数据库读取一条记录 以及 2 立即写回该记录以表明它已被读取 我不希望其他进程或查询能够在步骤 1 和 2 之间读取或写入同一记录 我正在考虑使用事务来完成这些步骤 如果我使用
  • 在 ejabberd 上使用 Smack 创建新用户会抛出 XMPP 异常:禁止(403)

    您好 我正在研究 ejabberd 我对这项技术还很陌生 我正在尝试使用以下代码在我的 ejabberd 服务器上添加用户 try conf setSASLAuthenticationEnabled true connection conn
  • ios - 动态编辑 3d touch 快捷方式列表

    我想在我的游戏中添加 继续 快捷方式 但是 当用户完全完成我的游戏时 我希望将其删除或替换为另一个快捷方式 这可能吗 我知道 3d touch 是由 ios 系统处理的 但也许还有一些选择 创建快捷方式有两种方法 动态和静态 静态被添加到
  • 如何在Asp.Net Core中注册同一接口的多个实现?

    我有从同一接口派生的服务 public interface IService public class ServiceA IService public class ServiceB IService public class Servic
  • 使用新的 IIS Express Web 服务器在 Visual Studio 2010 中进行开发?

    尽管这个问题并不直接与代码有关 但它与编程有关 并且似乎比服务器故障或超级用户等问题放在此处更好 我是一名 Visual Studio 2010 开发人员 Microsoft 为开发人员提供的最新 Web 服务器产品是 IIS Expres
  • SQL 按月分组日期

    我有一个返回到期日期的查询 SELECT ci accountnumber ci accountname cvu ExpirationDate FROM dbo clientinfo ci INNER JOIN clientvehicleu
  • 有没有办法从 UIComponent 对象获取生成的 HTML 作为字符串?

    我有一个UI组件目的 我想获取该组件在运行时生成的 HTML 代码 以便我可以对其进行分析 有办法实现这一点吗 我正在尝试使用 JsfUnit 创建自动化测试 我可以从测试方法中获取 UICompoment 对象 但是 我找不到检查该组件生
  • 通过 HTML Agility pack 将文档类型添加到 HTML

    我知道使用 HTML 敏捷包向 HTML 文档添加元素和属性很容易 但是我如何将文档类型 例如 HTML5 文档类型 添加到Html文档使用 html 敏捷包 谢谢 据我所知敏捷包没有direct方法来设置 doctype 但正如 Hans
  • 有没有办法使用 perl 监视 mysql 数据库的更改?

    我正在寻找一种类似于 inotify 方法来监视文件更改的解决方案 我知道我可以查看 mysql 数据库的 binlog 文件并运行查询来挑选新结果 但这似乎非常低效且不优雅 就像在循环中简单地执行大量查询等待新结果一样 如果您添加一个TR
  • 龙卷风 Restful 处理程序类

    我四处阅读并发现这个回答了问题关于与此相关的问题 但我真正想知道的是如何实现这个结构以及我需要多少个处理程序类 1 GET items gt index 2 GET items 1 gt show 3 GET items new gt ne