2015-01-05 6 views
1

파이썬 병 프레임 워크에서 라우팅 처리기를 설치하는 예는 다음과 같다 :파이썬 병 프레임 워크는 데코레이터를 통해 라우팅 처리기를 어떻게 설치합니까?

from bottle import Bottle, run 
app = Bottle() 

@app.route('/hello') 
def hello(): 
    return "Hello World!" 

run(app, host='localhost', port=8080) 

위의 코드를 라우팅 "로컬 호스트 : 8080/안녕하세요"가 표시되는 페이지에 (안녕하세요 기능에 의해 처리)에 "Hello World!". 이 설치 프로세스를 어떻게 수행 할 수 있을지 궁금합니다. 프레임 워크는 어떻게 함수 "hello"가 데코레이터로 "app.route"를 사용 하는지를 알 수 있으며 따라서 들어오는 요청을 그 함수로 보내야합니까?

+0

. "프레임 워크는"hello "가"데코레이터로 app.route "를 사용하는 이유는 무엇입니까? - 단순히 데코레이터가 함수로 인수로 호출되기 때문에 저장소에 저장할 수 있고, 액세스하고, 수정할 수 있습니다. 다른 데코레이터 관련 질문을하기 전에 공식 데코레이터 자습서를 읽는 것이 좋습니다. – l4mpi

+0

내 예제 나 내 문장이 좋지 않을 수도 있지만, 요점은 특정 데코레이터를 사용하여 프레임 워크가 그 기능을 어떻게 찾을 수 있는지입니다. – inker

+0

처음에는 데코레이터에서 "설치된 기능"을 찾을 수있는 파이썬 데코레이터의 이상한 기능이 있다고 생각했습니다. 그러나 @vaultah의 솔루션을 통해, 나는 그것을 발견하기 위해 모든 함수 서명을 구문 분석하기 위해 어떤 방법을 사용하는 것을 봅니다. – inker

답변

2

데코레이터에 경로를 제공하는 경우에만 함수의 이름이 병에 아무런 의미도 없습니다. 이지만입니다. Route의 생성자에

인수 callbackrule, callback는 함수이고 rule이 경로 문자열이 포함됩니다.

하나 이상의 경로가 제공되면 Bottle은 모든 경로에 대해 Route 인스턴스를 간단히 만듭니다.

route에 단일 경로를 제공하지 않으면 기능 이름이 인 경우에만이 적용됩니다. Bottle은 함수의 서명 (yieldroutes의 경우 source 참조)에서 가능한 경로를 생성하고 각각에 대해 Route 인스턴스를 만듭니다.

Bottle.route's source에서 관련 부분 : 당신은 장식이 어떻게 작동하는지 어떤 생각을하지 않는 것

for rule in makelist(path) or yieldroutes(callback): 
    for verb in makelist(method): 
     verb = verb.upper() 
     route = Route(self, rule, verb, callback, name=name, 
         plugins=plugins, skiplist=skiplist, **config) 
     self.add_route(route) 
+0

네, 도움을 주셔서 감사합니다. 처음에는 설치 라우팅 코드가 wsgiref 모듈 안에 있다고 생각했습니다. 이제 수익률이 어떻게 작동하는지 더 확인할 수 있습니다. – inker