Когда метод get() webapp2 принимает дополнительные аргументы?

Я только начал использовать Google App Engine и известность webapp2. Обычно мы начинаем создавать приложения со следующего кода

class MainPage(webapp2.RequestHandler):
    def get(self):
        #do something

app = webapp2.WSGIApplication([('/blog',MainPage)])

Теперь иногда, когда мы регистрируем такие обработчики

app = webapp2.WSGIApplication([('/blog/(\d+)',MainPage)]

Когда мы запрашиваем соответствующий URL-адрес, метод get() должен быть определен как

def get(self,post_id):

этот post_id — это идентификатор, присутствующий в конце запрошенного нами URL-адреса.

Теперь, что я не понимаю, когда метод get() принимает дополнительные аргументы, такие как post_id в этом случае? Я имею в виду, что все регулярное выражение (\d+) говорит о том, что если URL-адрес заканчивается цифрами, то сопоставьте его с обработчиком MainPage. Итак, когда webapp2 знает, когда отправлять аргументы/параметры в функцию get() обработчика MainPage?


person user1955184    schedule 04.01.2014    source источник
comment
Взгляните на маршрутизацию webapp2, где будут объяснены аргументы и шаблоны URL: webapp-improved. appspot.com/guide/routing.html   -  person voscausa    schedule 04.01.2014


Ответы (1)


Шаблон сопоставляется с URL-адресами как регулярное выражение, а скобки в шаблоне составляют «группу захвата», что означает, что часть URL-адреса, соответствующая этой части шаблона, «захвачена». В настоящее время группа захвата является анонимной, и аргумент, передаваемый обработчику, выполняется позиционно (вам не нужно называть его post_id). Изменение шаблона на (?P<post_id>\d+) делает группу «именованной», а аргументом обработчика будет ключевое слово-аргумент (имя аргумента имеет значение).

Для полноты, если вы хотите, чтобы группа в вашем регулярном выражении не захватывалась (и поэтому не передавалась в качестве аргумента), укажите ее как (?:\d+)

person Greg    schedule 04.01.2014