什麼是服務器?用Flask快速搭建最小服務器 一、好的學習者應該是一位大腦築構師 二、當我們在搭建服務器時,我們究竟在搭建什麼? 三、爲什麼需要虛擬環境? 四、使用Flask快速搭建一個服務器

一、好的學習者應該是一位大腦築構師

個人認爲,對於一個初學者來說,一個好的學習過程,並不是完全照本宣科,教條式的學習,而是應該首先在我們內心建立起一個對於這個知識體系的世界觀,作爲這個世界的框架,再往這個框架裏填充方法論,這一過程既是在學習新的知識,同時,又是在驗證、加固和完善我們最初的世界觀。

二、當我們在搭建服務器時,我們究竟在搭建什麼?

我們首先應該明確目標,【服務器】究竟是做什麼用的,或者說,它的基礎核心功能是什麼,是不是能用一句話來概括?以我現在的知識水平,我想用這麼一句話來概括:

服務器,首先是一個對外的稱呼,它用以接收外部的請求,調用內部的資源去處理請求,並最終將處理後的結果以響應的形式返回給外部的調用者。

對此,我總結了服務器的三大基本職責:

  1. 接收請求(打開冰箱)
  2. 處理請求(把大象裝進去)
  3. 發送響應(把冰箱門帶上)

這有點像把大象裝進冰箱的步驟解析一樣(哈哈),無論這個所謂的【大象】有多大、多小,但是萬變不離其宗,總的操作步驟還是一樣的。
我們要做的就是保證這三個基本職責【安全】、【穩定】、【高效】地提供到位。

三、爲什麼需要虛擬環境?

這也是我在開始學習Python時的一個困惑,可能能因爲我當時知識碎片化的學習,一直都是用的非虛擬環境,當看到很多地方只是告訴我們要通過虛擬環境來開發Python,卻沒有告訴我們爲什麼要這樣做,我的心裏就一直有這個困惑,直到我開發了兩個以上的項目,我才意識到,其實這一切都基於版本控制(所謂的“環境”),那麼版本控制究竟有多重要呢?

我最開始理解的,我們引用的第三方庫就像是我們手機裏的各類APP,我們的Python就像是手機系統。那麼Python有新版本了,從3.6升級到了3.7,又升級到3.8、3.9,那麼我們在運行新項目的時候,我們只需要將Python升級到最新版本,就像我們的iPhone手機從iOS 6 一年一年地升級到 iOS 14那麼自然!~

然而,現實情況是,版本的升級,意味着內部實現原理的改變,而這意味兼容性的問題。最直觀的例子就是,假設原先的一個方法,它的語法完全變了,而這時候如果你集成了多個第三方庫,而每個第三方庫只支持特定版本及以上的Python特性,兼容性的複雜程度將成幾何形成長。這還只是一個項目,當多個項目引用的雖然是同一個第三方庫,可是它們依賴的是不同的版本,怎麼辦?虛擬環境就是創建了一個專屬空間,當前項目的所有依賴,都從這個專屬空間裏引用,即 專屬的第三方庫,專屬的指定版本

專屬空間,纔是虛擬環境的意義所在。

每個深刻理解版本控制的重要性的開發者,一定是之前踩過不少這樣的坑,所以我們哪怕用高中時學過的【控制變量法】也能聯想到,版本控制的精髓,就是控制版本最好不要變化,如果一定要升級,請同時測量所有其他的變量(引用到的第三方庫)是否支持,不會出現預期以外的程序BUG!

對於服務器的項目尤其重要,因爲它是一個服務於大量設備的載體,每天要承接大量的服務,並且有時它還需要快速移植到其它設備上,虛擬環境其實是提供了一個方便移植的版本集羣的抓手,讓你能夠快速處理那些本來深度耦合在項目內部的第三方庫。

因此,我推薦使用pipenv來作爲第三方庫及版本控制工具。它自動生成的版本配置文件,可以幫我們省去很多事兒。這個東西后面搭建時會用到,但在此我只會講簡單提到,有時間我會專門開一篇文章講它的用法,並把鏈接貼到此處。

四、使用Flask快速搭建一個服務器

首先聲明,本人的開發學習環境是Windows系統、Annaconda提供的Python 3.8解釋器、Pycharm集成開發環境,爲了方便流程表述,後面都將基於以上環境講解,但還是我說的那句話,整體知識框架是不變的,唯一有區別的是一些小的細節方法論。

3.1 第三方庫管理工具pipenv

如果你已經安裝了pipenv可以跳過本小節。如果你沒有安裝過,請在命令行工具中執行以下代碼:

pip install pipenv

3.2 爲工程創建虛擬環境

無論是新創建的工程(直接新建時設置),還是以前已經存在的老工程(在項目設置裏),都可以設置環境。



選擇Pipenv來創建虛擬環境,並選擇一個已有的Python版本(如果你有2個以上的Python版本的話),點擊確定後,創建。

簡單的來說,Pipenv會爲你在“C:\Users\Administrator.virtualenvs\”目錄下創建一個“當前項目名+一串隨機字符”的目錄,專門存放你的虛擬環境文件。 你可以在設置的python解釋器裏查看驗證:


3.3 下載安裝其它第三方依賴庫

如果這是一個新項目,你只需要安裝Flask就可以了:

pipenv install flask

但如果這是一個克隆的項目,本身有很多第三方依賴庫,而且之前也是用pipenv做的版本控制,根目錄下其實會有一個專屬的【配置清單】文件名是“Pipfile.lock”,這個lock是什麼意思?這些第三方庫還有它們的版本,我pipfile給你們都“鎖死”了!~ 哈哈,是不是多了幾分綜藝感呢?突然就想喫瓜了有沒有?~ 咳咳……言歸正傳,如果有pipfile.lock的話,你只需要:

pipenv install

install後面什麼都不加,pipenv老兄會自動幫你把配置清單上的依賴都安裝好,是不是很方便?這就是我推薦你的原因(哈哈)~

3.4 後端代碼

  1. 將入口文件起名爲app.py
  2. 在app.py中輸入以下代碼:
from flask import Flask

app = Flask(__name__)

@app.route('/') 
def index(): 
  return '<h1>Hello Flask!</h1>'

【解析】
前面兩句是引入Flask模塊,並且完成初始化配置。
後面的函數是一個視圖函數,在外部設備發送根目錄請求時(接收請求),返回一個Hello Flask!的h1標籤(處理業務+發送響應)。

3.5 讓Flask跑起來

你不能像其它Python項目那樣,直接run app.py去運行,而是需要調用flask run指令去驅動app.py。 怎麼做呢?

  1. 通過命令行
> pipenv shell
> flask run
  1. Pycharm運行的配置文件




    給這個配置起個名字,切換到模塊調用模式,設置模塊名和調用參數,python解釋器已經自動爲我們定位到虛擬環境了,但是工作路徑程序沒法自動探測到,因此需要我們手動定位到工程的本地路徑:



    此時我們切換到這個配置,點擊【run】就可以運行了,以後都可以直接【run】來啓動。

3.5 Flask世界觀搭建成功!

運行成功後,控制檯會顯示當前的域名:


用瀏覽器訪問控制檯輸出的網址,你終於和Flask完成了第一次對話,效果圖:


至此,你已經真正完成並啓動了一個Flask後端服務器,恭嗨雷呀!

可以再回顧一下前文說的,服務器的三大基本職責,

  • 此時外部設備是【瀏覽器】
  • 而它發送的請求是【127.0.0.1:5000】
  • 服務器接收到請求,並做了相應的處理
  • 最終返回一個h1標籤的大寫標題【Hello Flask!】

我是Darry,一名大腦構築師,如果這篇文章有幫助到你,歡迎點贊收藏,我去寫下一篇文章去了,白白┏(^0^)┛

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章