Похоже, вы хотите дать аргументы методу create()
вашего контроллера, которые производятся непосредственно из элементов данных POST. Вы можете это сделать, но это довольно нерешительно.
Самый короткий способ сделать это - хрупким способом - было бы просто определить действие таким образом, используя эти переменные среды как значения по умолчанию для действия.
class UserController(Base):
def create(self, name=request.POST['name'], email=request.POST['email'], ...):
...
Дело в том, что, хотя это может показаться громоздким, то первый метод, который вы показали, вероятно, лучший способ сделать это, потому что это дает вам больше возможностей для восстановления грациозно от этих переменных не является то, что вы ожидаете их быть.
Если вы чувствуете себя очень неудобно, вы можете использовать эту логику в routing.py. Данные POST уже доступны там, просто не так, потому что такая логика принадлежит вашему контроллеру. Вы должны использовать conditional method in Routes, который дает вам доступ к environ[wsgi.input]
, который имеет данные POST, затем извлекает нужные данные и вставляет его в словарь match_dict
, что, в свою очередь, позволит вам напрямую загружать POSTDATA в аргументы вашего контроллера , Here's the Pylons Book section on conditional functions в routing.py, и вот similar question here on SO и another, что должно помочь, если вы действительно хотите работать с wsgi.input
напрямую.
Однако, вместо того, чтобы любой из этих вещей, я хотел бы использовать свой оригинальный метод:
class UserController(BaseController):
def create(self):
name = request.POST['name']
email = request.POST['email']
password = request.POST['password']
...
Это определенно можно разобрать данные POST, прежде чем он попадает в контроллер и принять меры по ней до этого. Однако, глядя на данные POST и решая, что с ним делать, это роль контроллера, а не роль Маршрутов или роль промежуточного программного обеспечения. Если вы решите - например, начать работу с данными POST в routing.py, вы потеряете некоторые из слабо связанных преимуществ Pylons и в меньшей степени весь WSGI shebang.
Вы будет видеть контроллеры Pylons, которые выглядят так, будто:
class UserController(BaseController):
def create(self, name, spam):
...
Однако в тех случаях, значение «имя» и «спам» приходят из строки запроса (и из маршрутов 'map), а не из данных POST.
Как вы настраиваете маршрут в Turbogears? Использует ли Turbogears тот же модуль маршрутизации, что и Pylons? – Ben
Кажется, нам не нужно настраивать маршрутизацию в Turbogears, Turbogears сделала это позади – Freewind