1. 程式人生 > 程式設計 >Ubuntu下Python+Flask分分鐘搭建自己的伺服器教程

Ubuntu下Python+Flask分分鐘搭建自己的伺服器教程

最近幫朋友做了點東西,最後需要將結果在網頁中展示,這就需要搭建個伺服器,做幾個網頁把資料資訊展示出來。網上找了一下,阿里騰訊都有租伺服器的業務,但是有的時候我們並不需要那麼複雜大型的伺服器,只是一個小功能,小展示,並不複雜,那麼我們完全可以自己動手,在自己的小電腦上搭建一個伺服器。下面文章記錄一下自己折騰的過程。

Flask安裝

Ubuntu自帶python2,因此不用麻煩裝python了。Flask是pyhton下的一個很實用的web框架,接下來安裝Flask就好,網上找了一圈,大部分都說要先裝virtualenv,還要配置環境巴拉巴拉,其實並不用這麼麻煩,virtualenv確實有一些優點,比如隔離環境啥的,不過如果我們就是在自己機器上使用,沒有過多需求要切換各種環境啥的,可以直接安裝Flask使用,感興趣的小夥伴也可以自己查virtualenv的功能和使用。真正安裝Flask只需一句話,在命令列中輸入已下程式碼即可:

sudo pip install flask

當然如果你沒安裝pip的話就得先安裝pip了,這裡不再概述,網上都有講怎麼安裝pip。

Flask的使用

ok,裝好flask之後就可以馬上試一試了,當然最開始我們都是用helloword的例子來開始,可以這麼認為,flask的框架是有一定模板的,那麼我們只需要記住幾個基本模板,等需要具體操作的時候再根據具體情況進行相應修改就可以了。下面是helloword的模板,也是最基本的一種用法。

新建一個python檔案,輸入下面的程式碼:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
 return "hello world" 
if __name__ == "__main__":
 app.run(host='0.0.0.0',port =8080)

寫完之後,在資料夾下執行該python檔案,此時啟動服務,然後在瀏覽器中輸入localhost:8080即可訪問,此時返回我們之前定義的helloword,如下圖所示:

完這些,我們又有了新的需求,如果我在瀏覽器上面不僅僅要輸入localhost:8080,我還想輸入或者傳入其他的引數,比如一個id或者一個字元,很多時候我們都是根據請求的這一串url中根據傳入的引數去進行資料的篩選等操作。接下來我們只需要對傳入的url進行處理即可,使用下面程式碼即可:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route("/info",methods=['GET',])
def sendinfo():
 #獲取到傳入url中引數id對應的值
 sendid = request.args.get('id')
 return "Get info id is " + str(sendid) 
if __name__ == "__main__":
 app.run(host='0.0.0.0',port =8080)

改完程式碼之後重新啟動,然後在瀏覽器中輸入"http://localhost:8080/info?id=666",即可顯示效果,如下圖所示:

可以看到這個時候介面把我們在url中傳入的引數顯示出來了。

接下來我們又會有想法了,能不能顯示html檔案?當然可以!這個時候我們要在原來的放置python指令碼的資料夾下新建一個templates資料夾,所有你想呼叫的html檔案都放在這個資料夾裡面。下面簡單實現一個html檔案,當然小夥伴們也可以自己去網上下載一些更好的html模板。

 <html>
 <body>
 <h1>Hello World</h1>
 <p>This is a Test for Flask</p>
 </body>
 </html>

這個時候,我們的資料夾結構如下圖所示:

然後我們修改python指令碼。

from flask import Flask
from flask import render_template
app = Flask(__name__)

@app.route("/")
def sendtemplate):
 return render_template("test.html") 
if __name__ == "__main__":
 app.run(host='0.0.0.0',port =8080)

重啟之後,執行指令碼,在瀏覽器中輸入地址,效果如下圖所示:

晉級-Flask模板中顯示引數

剛剛講到了怎麼在url中傳入引數,也講到了怎麼呼叫html模板檔案,那麼如何將兩者結合起來,輸入的url引數在模板中顯示出來?不要急,跟著下面一起做。首先修改python指令碼。

 from flask import Flask
 from flask import request
 from flask import render_template
 
 app = Flask(__name__)
 
 @app.route("/info",])
 def sendinfo_tem():
 #獲取到傳入url中引數id對應的值
 sendid = request.args.get('id')
 return render_template("test.html",u=sendid)
 
 if __name__ == "__main__":
 app.run(host='0.0.0.0',port=8080)

u這個引數就是傳入html模板中的值,當然也可以有第二個、第三個引數值傳入。接下來修改一下html檔案,接收並顯示我們傳入的引數值。

 <html>
 <body>
 <h1>Hello World</h1>
 <p>The send id is {{u}}</p>
 </body>
 </html>

"{{u}}"就是我們傳入的引數值,接下來重啟執行,在瀏覽器輸入url,效果如下圖所示:

晉級-顯示圖片

一般說到顯示圖片,大家就會想到,ok我在html檔案中寫好要顯示的圖片的路徑,比如/home/xxx/xxx.jpg這種,但是在這裡不能直接寫絕對路徑,一定要通過url寫,因為這個時候相當於通過伺服器的請求來顯示圖片。這個時候我們首先要在指令碼所在的資料夾中新建static目錄,再在static目錄中新建images目錄,然後將要顯示的圖片放入images目錄中,具體檔案結構如下圖所示。

然後我們修改之前的html檔案。

 <html>
 <body>
 <h1>Hello World</h1>
 <p>The send id is {{u}}</p>
 <img src="{{url_for('static',filename='images/1.jpg')}}"/>
 </body>
 </html>

對於python指令碼不用修改,但是由於python2的一些編碼問題,如果執行後報錯

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 10: ordinal not in range(128)

等內容,可以在前面加入以下三句話。

import sys
reload(sys)
sys.setdefaultencoding('utf8')

然後重啟執行,在瀏覽器中輸入url,顯示如下所示:

這回圖片、傳參、html模板、文字全都教會大家了,小夥伴們可以自己設計美美的html,搭建伺服器顯示了!

其他

此時搭建完的網站,只有和你的筆記本或者電腦(現在已經變成伺服器了)處於同一個區域網的小夥伴才能訪問你的網站,訪問的方式是將上面的url網址的localhost換成你的ip地址即可。有的時候如果我們想用外網讓其他人訪問,可以使用一些工具做內網穿透,這裡就不再細說,網上有很多免費做內網穿透的軟體,比如“花生殼"或者”nat123“等,大家可以自行查詢。當然我們這裡只是最簡單的操作介紹了flask搭建伺服器的操作,真正的大型伺服器還要考慮效能、壓力、效率、安全等多種因素,感興趣的小夥伴可以再深入學習^_^

以上這篇Ubuntu下Python+Flask分分鐘搭建自己的伺服器教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。