2010-06-06 7 views
10

저는 개인적인 요청을위한 메소드를 가진 데코레이터, 컨트롤러 클래스, GET/POST를위한 메소드를 가진 클래스를 요청하는 파이썬 웹 프레임 워크가 파이썬 웹 프레임 워크가 요청하는 3 가지 주요한 방법을 알아 챘습니다.데코레이터 대 파이썬 웹 개발의 클래스

나는이 세 가지 접근 방식의 덕목에 대해 궁금합니다. 이러한 접근법에 큰 장점이나 단점이 있습니까? 아이디어를 수정하려면 다음 세 가지 예가 있습니다.

@route('/') 
def index(): 
    return 'Hello World!' 

Pylons 사용하는 컨트롤러 클래스 :

class HelloController(BaseController): 
    def index(self): 
     return 'Hello World' 

Tornado이 유형에 대한 방법과 요청 처리기 클래스를 사용하여 스타일이 가장 좋은 방법입니다

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     self.write("Hello, world") 

Bottle 데코레이터를 사용 ?

+0

당신은 장고로 태그를 지정했고 샘플을 포함하지 않았습니다. Django는 * Python 웹 프레임 워크라고 주장 할 것이므로 MVT 접근 방식이 표준 MVC 모델과 조금 다르더라도 제외하는 것은 약간 이상한 것처럼 보입니다. – Oli

+0

Django는 Python 베스트 프랙티스를보기위한 이동 프레임 워크가 아닙니다. –

+0

아마도이 수준에서는 모범 사례가 있다는 것이 확실하지 않습니다. – Oli

답변

10

실제로 각 프로젝트별로 세 가지 방법 중 하나가 나열되어 있습니다.

  • 병 프로그래머 가능한 로 간단 간단한/사물을있는 그대로 유지하려고합니다. 꾸미기를 사용하면 경로에 대해 개발자가 OOP를 이해하는 데 대해 걱정할 필요가 없습니다.
  • 파일롯 개발 목표는 코드를 재사용 가능하게 만들고 쉽게 WSGI 스타일의 HTTP 프로세스 라우팅과 통합하는 것입니다. 따라서, 그들은 노선을 구성하는 매우 OOP 방식을 선택했습니다. 예를 들어, 복사 & Pylons 앱에 HelloController를 붙여 넣기 만해도 마술처럼 작동해야합니다. 심지어 그 앱이 인 경우에도 WSGI를 통해 어떤 복잡한 패션을 제공합니다. (tornado.web.Application와 함께) 토네이도의 epoll에 기반 IOLoop 요청에 와서 각 RequestHandler를 인스턴스화 :
  • 토네이도 하고있는 일이, 실행하는 방법에 대한 또 다른 이유가있다.각각 RequestHandler를 특정 GET 또는 POST로 제한하여 IOLoop을 으로 빠르게 돌리면 요청을 처리하고 마지막으로 에 가비지 수집을 허용합니다. 이렇게하면 이 얼마나 많은 응용 프로그램이 응용 프로그램 에 많은 영향을 미치는지에 관계없이 작은 메모리 풋 프린트로 빠르고 효율적으로 유지됩니다. 이것은 또한 Tornado가 다른 Python 기반 웹 서버 (각 요청이 자체 인스턴스를 얻음)보다 훨씬 많은 동시 요청을 처리 할 수있는 이유이기도합니다.

이제는 기본 프레임 워크 동작을 항상 무시할 수 있다는 것을 모두 알고 있어야합니다. 예를 들어, Tylado에 대해 MethodDispatcher을 작성하여 Pylons와 더 비슷하게 작동하게합니다 (글을 쓰면 CherryPy를 염두에 뒀습니다). 하나의 커다란 RequestHandler (많은 작은 것들과 반대되는) 때문에 Tornado는 약간의 속도를 늦추고 (메모리 푸트 프린트를 약간 늘립니다), 앱의 코드 양을 줄이고 읽기 쉽도록 할 수 있습니다 (나의 편향된 견해에서, 물론 =).

1

다양한 프레임 워크는 최상의 코드 (쓰기 및 읽기)를 통해 최상의 성능을 얻으려고합니다. 그들은 각각 MVC 또는 MVT를 기반으로 또는 다른 전략을 채택합니다.

당신이 집중하고있는 것은 아마도 개인 취향에 달려 있습니다. 그리고 내 대답도 그렇게 될 것입니다. 나는 어떤 종류의 거룩한 전쟁도 피하려고 아주 열심히 노력하고 있습니다. 왜냐하면 제가 모르는 유효한 기술적 논쟁이있을 수 있기 때문입니다.

하지만 내가 개인적으로은 컨트롤러 (django의보기)와 별도의 라우팅을 유지하고 그와 별도로 템플리트를 유지하는 것을 선호합니다. 재사용 컨트롤러를 정말 간단하게 만듭니다. 예, 저는 장고 사용자입니다.

이와 같이, 저는 큰 Bottle의 장식품이나 큰 덩치 큰 물건을 포장하는 팬이 아닙니다. 나는 Django가 나를 자유롭게 해주는 ASP.NET 개발자 일 때 익숙했다.

+0

컨트롤러와 라우팅을 구분하는 것이 좋습니다. 따라서 사용자의 기본 설정에 따라 라우팅을 자동화 할 수 있습니다. 정확한 URL을 항상 제시해야 할 필요는 없습니다. :) –