2013-06-02 3 views
0

У меня есть приложение web.py со следующим кодом сервера.GET() принимает ровно 2 аргумента (4 данных)

import web 
import mod1 

urls = (
    '/(\w*)/(c|r|u|d)/(.*)', '\\1.\\2', 
) 

if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run()   

mod1.py содержит

class c: 
    def POST(self): 
     return "C" 

class d: 
    def DELETE(self): 
     return "d" 

class u: 
    def POST(self): 
     return "u" 

class r: 
    def GET(self, _id): 
     return "v={0}".format(_id) 

Теперь запрос http://.../mod1/r/3 возвращается GET() takes exactly 2 arguments (4 given).

В чем проблема?

ответ

4

Конфигурация URL-адрес имеет параметры ((\w*), (c|r|u|d) и (.*)). Плюс аргумент self для методов, который составляет 4 аргумента.

Настройте ваш метод GET принять все параметры:

def GET(self, param1, operation, id_): 

Этого матч каждый из регулярных выражений захвата групп; Я догадался о именах параметров для каждого, вы можете при необходимости настроить.

+0

Но в [tutorial] (http://webpy.org/docs/0.3/tutorial) говорится: «' \ 1' заменяется первым захватом вашего регулярного выражения, любые ** оставшиеся ** захватывают get перешел к вашей функции ». –

+0

[Эта страница] (http://webpy.org/cookbook/url_handling) не упоминает об этом, и, похоже, больше нет информации об этом. Чтобы быть откровенным, я сам не использую 'web.py'. Это может быть неправильный учебник. :-) –

+1

@GenghisKhan: быстрое сканирование кода [делегирования] (https://github.com/webpy/webpy/blob/master/web/application.py#L430) не отображает такого удаления группы. Будет выглядеть немного дальше, но пока это похоже на то, что учебник ошибочен. –

Смежные вопросы