Как позволить действиям поддерживать больше параметров?

StackOverflow https://stackoverflow.com/questions/3687082

  •  02-10-2019
  •  | 
  •  

Вопрос

Я использую пилоны, и мое действие контроллера:

 class UserController(BaseController):

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

Но я нашел в Turbogears, я могу поделать это:

 class UserController:

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

Как сделать то же самое в пилонах?


ОБНОВИТЬ

Я искал в Google, и спросил в некоторых других форумах, но все же не получить ответ. Никто не знает (или интересует) такой вопрос?

Это было полезно?

Решение

Похоже, вы хотите дать аргументы create() Способ вашего контроллера, который получен непосредственно из элементов почтовых данных. Вы можете сделать это, но это довольно безусловно.

Самый короткий способ сделать это - хрупкий способ - было бы просто определить действие, подобное, используя эти переменные среды по умолчанию для действия.

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

Дело в том, что, хотя он может появиться громоздким, первый метод, который вы показали, вероятно, является лучшим способом сделать это, потому что он дает вам больше места, чтобы изящно восстанавливаться от тех переменных, а не то, что вы ожидаете их.

Если вы чувствуете, что почувствуете себя действительно, вы можете протолкнуть эту логику в Routing.py. Данные пост уже доступны там, просто не так напрямую, потому что логика, как это, принадлежит к вашему контроллеру. Вы бы использовали Условный метод в маршрутах, что дает вам доступ к environ[wsgi.input], у которого есть данные, затем извлеките желаемые данные оттуда и подтолкните его в match_dict Словарь, который, в свою очередь, позволит вам подавать Postdata непосредственно к аргументам вашего контроллера. Вот раздел книги Pylons на условные функции в маршрутизации .py, и вот Подобный вопрос здесь, на так а также еще один, что должно помочь, если вы действительно хотите работать с wsgi.input напрямую.

Однако вместо любой из этих вещей я бы использовал ваш оригинальный метод:

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

Определенно возможно разбирать данные пост, прежде чем он доберется до вашего контроллера и предпринимать действия на нем до этого. Однако, глядя на почтовые данные и решить, что связано с этим, является роль контроллера, не роль маршрутов или роль промежуточного программного обеспечения. Если вы решите - например - начните возобновить данные по почте в маршрутизации .py, вы теряете некоторые из свободно связанных преимуществ пилонов и в меньшей степени весь WSGI Shebang.

Ты буду Смотрите контроллеры пилонов, которые выглядят так, хотя:

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

Однако в этих случаях значения «имя» и «спам» исходят из строки запроса (и с карты маршрутов), а не из данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top