2014-04-14 2 views
1

나는 플라스크 앱을 실행 중이고, 무엇이 상호 작용할 수 있는지 알고 싶습니다. 내가 다음 예제와 함께 설명하자Flask-Script 내에서 Flask의 앱과의 상호 작용

플라스크 응용 프로그램 :

from flask import Flask 

MyApp = Flask(__name__) 

mytext = "Hello World!" 

@app.route('/') 
def hello_world(): 
    return mytext 

def text_reload(): 
    global mytext 
    mytext = "Hey! I have been reloaded!" 

if __name__ == '__main__': 
    MyApp.run() 

플라스크 - 스크립트 (manager.py) :

from flask.ext.script import Manager 
from myapp import MyApp 

manager = Manager(MyApp) 

@manager.command 
def reload_mytext(): 
    **DO SOME MAGIC HERE** 

if __name__ == '__main__': 
    manager.run() 

reload_mytext() 그 전화 응용 프로그램 내에서 text_reload() 기능.

이 물건을 완성하려면 플라스크 스크립트로 어떤 마법을 써야합니까? 그런 일도 가능합니까?

+0

플라스크-스크립트는 새로운 프로세스에 당신이 명령 줄을 사용할 때마다 실행; 이 프로세스는 항상 실행중인 서버와 별개의 프로세스가됩니다. 이것은 당신이 원하는 것을 성취하기 위해 어떤 형태의 프로세스 간 통신이나 공유 외부 데이터베이스가 필요하다는 것을 의미합니다. 목표는 무엇입니까? 무엇을 달성하려고합니까? 궁극적으로는 무엇입니까? –

+0

필로폰 앱을 만들어서 일부 변수를 다시로드/재정의해야 할 때 호출 할 수있는 플라스크 스크립트 시나리오를 만들고 싶습니다. – KennyPowers

+0

예, 프로세스가 다름을 이해합니다. 외부에서 플라스크 앱의 메소드를 트리거 할 수있는 API 또는 무언가가 있는지 알고 싶습니다. 특별한 경로가 문제를 해결할 수는 있지만 내부에 뭔가있을 수 있습니다. 모르겠습니다. – KennyPowers

답변

0

저는 app.app_context()가 당신이 찾고있는 것이라고 생각합니다. 하지만 먼저 컨텍스트를 만들어야합니다.

def _make_context(): 
    return dict(app=app, db=db, models=models) 

manager = Manager(create_app) 
manager.add_command("livereload", liveReloadServer, Shell(make_context=_make_context)) 

다음 :

class liveReloadServer(Command): 
    """prints hello world""" 
    def run(self): 
     with app.app_context(): 
      server = Server(app.wsgi_app) 
      app.config['LIVERELOAD'] = True 
      server.serve(port=8080)