## 第2章 Flask的基本原理與核心知識
### 視圖函數
視圖函數其實只是一個函數,只不過因為它是控制 MVC 里 View 視圖的,所以 flask 將其稱為視圖函數。
### 基于類的視圖
除了視圖函數這一種視圖的控制寫法之外,flask 還提供了一種基于類的視圖(即插視圖)
\#### 優勢
相比于視圖函數,類視圖可以繼承,增加了復用性!(函數不可以繼承)
### flask 如何兼容帶`/`和不帶`/`訪問的?

> 經典面試問題(經常出現在 Python Web面試中,需要帶入具體的環境回答作用)
>
> 在如入口文件中加 if 判斷有什么作用?
>
> ~~~
> ?if __name__ == "__main__":
> ? app.run(host='0.0.0.0', port=5000, debug=app.config['DEBUG'], threaded=True)
> ~~~
>
> 在開發環境下啟動搞的 web 服務器是flask 自帶的一個非常簡單的服務器,但把項目部署到生產環境的時候我們通常不會使用 flask 自帶的服務器。生產環境部署的時候通常使用 `nginx + uwsgi` 組合來部署項目,`nginx` 作為前置服務器用來接收瀏覽器發來的請求,然后把請求轉發給 `uwsgi`。生產環境中 flask 項目的啟動并不是使用 `python fisher.py`手動啟動服務器,而是用 `uwsgi`加載`fisher.py`模塊來啟動 flask 的相關代碼,那么生產環境中的`fisher.py`就不再是入口文件了,它只是一個被 `uwsgi` 加載的模塊文件,所以生產環境中`app.run()`是根本不會執行的.
>
> 反過來想一下,如果沒有了這個`if __name__ == "__main__"`判斷,生產環境中一旦加載了`fisher.py`之后`app.run()`就會執行,我們已經有了 `uwsgi`作為 web 服務器,又啟動了 flask 內置的服務器,兩個服務器同時啟動是不可以的,肯定是會出問題的。