2016-10-04 1 views
2

어쩌면 나는 Flask에서 클래스 기반 뷰를 오해하고있다. PHP/Laravel 배경에서 왔습니다. Laravel에서 나는 다른 json 데이터, 뷰 (Flask의 템플릿) 등을 응답 할 수있는 컨트롤러 클래스를 정의 할 수 있습니다. 그래서 내가하는 유일한 일은 라우트를 정의하고 해당 라우트를 컨트롤러 클래스의 특정 메소드에 연관시키는 것입니다. 이 같은클래스 기반 뷰에 대한 여러 함수 플라스크

의사 코드 : 플라스크에

On POST associate /path to [email protected] 
On GET associate /path to [email protected] 
On GET associate /path/extra to [email protected] 
... 

나는 분리 기능으로 그들을 것이다. 뭔가 같이 :

def doPostFunction()... 
def someGetFunction()... 
def someOtherGetFunction()... 

그래서 조금 인터넷 검색, 클래스 기반 뷰가 있습니다하지만 난 그것을보고, 나는이 클래스를 정의하는 함수를 정의하는 insted 및 dispatch_request 클래스 내에서 이전 뷰 기능의 내용을 넣어 기반 뷰의 메소드.

class DoPostClass(View): 
    dispatch_request() 
     ... 

class DoGetClass(View): 
    dispatch_request() 
     ... 

class DoSomeOtherGetClass(View): 
    dispatch_request() 
     ... 

단일 클래스 내에 이러한 기능을 사용할 수있는 방법이 있습니까? 나는 플라스크의 수업 기반 견해를 오해하고 있는가? get, post, put, delete 메소드를 가진 MethodView 클래스가 있다는 것을 알고 있지만 RESTful API를 생성하지는 않기 때문에 nice-RESTful URL을 사용하지 않아 MethodView 클래스가 내 케이스에 유용하지 않은 것으로 보입니다.

미리 감사드립니다.

답변

1

내 laravel/flask 프로젝트 경험을 바탕으로 컨트롤러 /보기의 고급 코드가 동일합니다. 시도해보십시오 flask-classy 확장자

아래는 flask-classy을 기반으로 한 예입니다.

디렉토리

. 
├── index.py 
└── views 
    ├── __init__.py 
    └── myView.py 

myView.py

from flask_classy import FlaskView 

class myView(FlaskView): 
    def index(self): 
     return "this is index" 

    def get(self, id): 
     return "this is page " + str(id) 

index.py

from flask import Flask 
from views.myView import myView 

app = Flask(__name__) 
myView.register(app) 

Run

$ export FLASK_APP=index.py 
$ flask run 
# Index: http://127.0.0.1:5000/my 
# Get: http://127.0.0.1:5000/my/<id> 
+0

놀라워!, 정확히 내가 원했던 것! 대단히 감사합니다. –

관련 문제