2014-03-30 54 views
0

我想這是一個關於最佳實踐的問題。使用Flask應用程序作爲非網絡相關程序的接口

我對Web開發,Web框架等有點新,我打算用Flask做一個網站。我很想知道如何創建一個應用程序,這個應用程序實際上就是一個命令行程序。比方說,例如,我有一個Python命令行程序,它接受一個單詞並打印出該單詞的所有有效字母。這個邏輯在哪裏/將如何適合我的Flask應用程序?會是這樣的嗎?

from anagram import compute_all_anagrams 

@app.route("/result?word=<word>") # I'm not sure if this is correct usage of route 
def result_page(word): 
    result = compute_all_anagrams(word) # returns a list of anagrams 
    render_template("result.html", result=result) 

where result.html是顯示結果列表的模板嗎?

當然,在這裏我不會讓我的字謎程序打印什麼,而是將它作爲一個字符串數組返回。

此外,如果compute_all_anagrams需要一段時間 - 比如10秒?這會改變什麼?

謝謝

回答

1

是的,你有想法。

如果事情需要很長時間才能計算,可以使用ajax或類似的客戶端「呈現...」消息進行研究。那麼你會產生一個後臺工作 - 最簡單的方法實際上是完全運行一個外部流程 - 然後每次「完成了」?請求進來了,你檢查它是否仍在運行,如果沒有,返回結果(從文件中說出),如果它仍在運行,那麼告訴客戶端。

默認情況下,燒瓶內置開發網絡服務器會阻止你在前臺做長時間的事情 - 這對多用戶的東西不利,但對單用戶來說很好「我只想控制幾個任務我的手機」。這就是爲什麼有很多其他服務器可以插入燒瓶或任何其他普通的Python Web框架。這些被稱爲WSGI服務器。一個好的'默認'是'服務員'http://waitress.readthedocs.org/en/latest/,這是一個純粹的Python服務器,所以不需要任何額外的庫或任何東西。 Generic WSGI服務器,gunicorn,uwsgi ......也不錯,但對於小型單個(或少數)用戶應用程序來說並不重要。

如果你把東西放到互聯網上,讓公衆可以訪問它們,那麼通常最好將你的燒瓶應用隱藏在nginx(或類似的)後面,作爲一個「反向代理」,它可以限制數量的要求沒有嚇倒,只是通常保持健全。

但無論如何,10秒對於長時間計算任務的響應時間來說是相當不錯的。如果事情需要一分多鐘,那麼我會說你應該爲這些任務研究某種外部過程並對其進行監控。

你確實需要小心別人不能像這樣開始工作 - 很多人都很容易讓你的計算機DOS被很多人請求需要很長時間計算的工作。您應該對這些服務保留密碼(至少!)保護。

您的路線使用錯誤 - /result/<word>就夠了。之後的任何事情?實際上並不是路線的一部分 - 這是一個請求參數。您可以通過flask.request對象訪問這些對象(檢查文檔)。

玩得開心! :-)

相關問題