我正在使用塔架,控制器的动作是:

 class UserController(BaseController):

      def create(self):
           name = request.POST['name']
           email = request.POST['email']
           password = request.POST['password']
           ...

但是我在涡轮上发现,我可以这样做:

 class UserController:

      def create(self, name, email, password):
           ...

如何在塔中做同样的事情?


更新

我已经在Google中进行了搜索,并在其他一些论坛中询问,但仍然没有得到答案。没有人知道(或对)这样的问题?

有帮助吗?

解决方案

听起来您想向 create() 控制器的方法直接从邮政数据的元素中得出。您可以做到这一点,但这很有趣。

最短的方法 - 一种脆弱的方法 - 就是将这些环境变量作为动作的默认值来定义动作。

class UserController(Base):
  def create(self, name=request.POST['name'], email=request.POST['email'], ...):
        ...

事实是,即使它看起来可能很麻烦,您展示的第一种方法可能是一种更好的方法,因为它为您提供了更多的空间,可以从这些变量中优雅地恢复过来,而不是您期望它们的样子。

如果您觉得真的很贴心,可以将此逻辑推入Ruting.py。帖子数据已经在那里可用,只是不直接,因为这样的逻辑属于您的控制器。您会使用 路线中的条件方法, ,这使您可以访问 environ[wsgi.input], ,其中包含帖子数据,然后从那里提取您所需的数据,然后将其推入 match_dict 词典,这又可以让您直接将Postdata馈送到控制器动作的论点中。 这是有关条件功能的塔塔部分 在routing.py中,这是一个 这里的类似问题其他, ,如果您真的想与之合作,这将有所帮助 wsgi.input 直接地。

但是,我将使用您的原始方法,而不是其中任何一个。

class UserController(BaseController):
    def create(self):
       name = request.POST['name']
       email = request.POST['email']
       password = request.POST['password']
       ...

绝对有可能在邮政数据到达控制器之前并在此之前采取行动之前对其进行解析。但是,查看后数据并确定该怎么做是控制器的角色,而不是路线的角色或中间件角色。如果您决定 - 例如 - 开始摆弄Routing.py中的帖子数据,您将失去一些松散耦合的塔的优势,并在较小程度上失去整个WSGI Shebang。

将要 但是,请参见看起来像这样的塔:

class UserController(BaseController):
    def create(self, name, spam):
       ...

但是,在这种情况下,“名称”和“垃圾邮件”的值来自查询字符串(以及路由的地图),而不是来自帖子数据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top