Контроллеры Web2py с параметрами? - PullRequest
10 голосов
/ 09 июня 2010

Я создаю приложение с использованием инфраструктуры Web2py ... Я не хочу использовать объект запроса для получения всех параметров строки запроса, вместо этого я хотел бы построить свой контроллер с именованными параметрами и иметь маршрутизаторраспакуйте словарь строки запроса (или данных формы) в именованные параметры и вызовите мой контроллер.

, поэтому вместо метода контроллера

create_user():

, где я буду использовать глобальный объект request ()и просмотрите список vars ... Я бы предпочел вместо этого иметь

create_user(first_name, last_name, email):

, как я вижу на других платформах MVC.

Возможно ли это уже в Web2py?или есть плагин для этого?или мне нужно добавить это самому?

Ответы [ 3 ]

11 голосов
/ 09 июня 2010

Нет.Как указано в book , URL-адрес вида

http://127.0.0.1:8000/a/c/f.html/x/y/z?p=1&q=2

отображается на приложение (папку) a, контроллер (файл) c.py, функцию f идополнительные аргументы должны быть распакованы из объекта запроса как

x, y, z = tuple(request.args)
p = request.vars['p'] # p=1
q = request.vars['q'] # q=2 

Кроме того, web2py специально определяет действительные функции контроллера как те функции, которые не имеют аргументов.AFAICR, это противоположно Django, который определяет действительные функции контроллера как те, которые имеют хотя бы один аргумент.

2 голосов
/ 09 июня 2010

Я делаю

def create_user():
    try:
        first_name, last_name, email = request.args[:3]
    except:
        redirect('some_error_page')

, но имейте в виду, что first_name, last_name и email могут содержать символы, которые не разрешены в path_info (web2py в picky при проверке, что разрешены только [\ w \ - \.]).

1 голос
/ 17 июня 2013

В некоторых случаях контроллеры web2py могут использовать параметры.Когда функция контроллера имеет декоратор @service, могут использоваться параметры, в зависимости от типа службы, например:

@service.jsonrpc
def somefunction(a=None, b='default'):
    ## whatever

Этот подход используется для случая, когда функция контроллера действительно является API, а не способомсоздать веб-представление.Есть хорошие вещи, которые вы можете сделать с точки зрения параллельного определения функций веб-представления и API-стиля, а также того, что веб-представления вызывают функции API, чтобы обеспечить хорошее разделение представлений и контроллеров.

В зависимости от того, как вы решили разделить обязанности между веб-клиентом / javascript, представлением web2py и контроллером web2py, может иметь смысл иметь функции контроллера, которые действительно являются API-интерфейсами (с необязательными параметрами), а не строить логику распаковки параметров вконтроллер стиля веб-просмотра.

...