2014-01-04 1 views
2

Я только что начал использовать Google App Engine и домашнюю страницу webapp2. Обычно мы начинаем создание приложений с помощью следующего кода
Когда метод get() 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?

+0

взглянуть на webapp2 маршрутизации, где аргументы и URL шаблоны будут объяснены: http://webapp-improved.appspot.com/guide/routing.html – voscausa

ответ

2

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

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