Flask 实战:如何从零开发“知乎”
作為當下十分火熱的問答社區,知乎聚集了大量問題者和答題者。
但不少朋友在逛知乎的同時,也不禁想要開發一個像“知乎”這樣的問答社區,既能夠問題答題,也能擁有用戶評論、點贊、收藏、瀏覽量等諸多完善的功能。
今天,為大家呈上一個步驟詳細的問答社區開發訓練營《Flask實現一個問答社區》,手把手幫助有一定web基礎的同學開發出屬于自己的簡易“知乎”,并有完整源碼可供下載。
此訓練營采用的開發環境均為實驗樓提供的在線開發環境,無需下載任何軟件。
廢話不多說,先看看本訓練營最終實現的社區效果:
教程節選:
(完整源碼和教程可查看《Flask實現一個問答社區》獲取。)
一、訓練營簡介
本訓練營的目標是使用 Python 的輕量級 Web 框架 Flask 和經典模塊化前端框架 layui 實現一個社區項目。實現功能包括:用戶注冊、登錄、郵件激活、發帖、回帖、點贊、回復、采納、刪帖、結帖以及 flask-admin 后臺管理等功能。
二、Flask簡介
Flask 最初是作為愚人節的玩笑誕生的,后來在很短的時間內大受好評,迅速在 Python Web 開發者中流行開來。如今,Flask 已經成為輕量級 Web 框架的代言人。
Flask 提供的是一個最小化的 Web 框架,對于多年開發經驗的老手,可以在此基礎上自定義任何你想要添加的功能;而對于初學者,同樣可以利用社區中豐富的資源擴展快速上手。在這次訓練營的學習過程中,大家會慢慢感受到 Flask 這一特性的魅力。
三、開發環境和配置
1.實驗簡介
本章介紹 virtualenv 搭建開發環境,以及項目的一些基本配置。
本章主要介紹使用 virtualenv 新建環境,創建項目的配置文件并添加配置,最后使用 Flask Script 擴展運行項目返回一個 Hello,World 頁面。
知識點
- virtualenv 的使用
- Flask 應用基本結構
- Flask Scrip
- t 擴展
項目結構
本章項目的文件結構為:
$ tree PyFlyPyFly |-- fly_bbs|-- __init__.py|-- config.py|-- controllers|-- __init__.py |-- manage.py2.環境準備
我們使用 Python3.5 和 Flask1.1.1 來實現項目,實驗環境已經安裝了 Python3.5 。
我們用 pip 包管理工具來安裝我們的 Flask 框架和相應擴展。在實驗樓的線上環境中已經安裝了 pip 。
3.virtualenv簡介
通常在開發 Python 應用程序的時候,系統中會存在一個或多個 Python 解釋器版本,例如實驗環境中就有 Python2.7 和 Python3.5 這兩個。
如果我們要使用 Python3.5 同時開發多個應用程序,那這些應用程序都會共用一個 Python,就是安裝系統的Python3.5 。如果兩個項目使用不同版本的依賴包,就會出現沖突。
這種情況下,每個應用需要各自擁有一套“獨立”的 Python 運行環境。virtualenv 就是用來為一個應用創建一套“隔離”的 Python 運行環境。
實驗環境中已經安裝了 virtualenv ,在終端命令行執行如下命令可以查看:
shiyanlou:Code/ $ pip3 freeze | grep -i virtualenv virtualenv==16.7.5 virtualenv-clone==0.5.3如果在你自己的本地環境下安裝此包,可執行此命令使用 pip 包管理工具安裝:
$ sudo pip3 install virtualenv在實驗環境中,pip 是 Python 2.7 的包管理工具,pip3 是 Python3.5 的包管理工具,要注意區分。
使用 virtualenv 的沙盒環境來進行開發,不僅可以使我們避免不同項目不同版本的麻煩,同時它還支持使用 pip freeze > requirements.txt 把自己沙盒環境中的所有依賴包信息導出到一個 requirements.txt 文件中。這樣當你切換的一個新環境的時候,不需要一個一個的去下載項目需要的依賴,只需要新環境開啟后,在終端輸入 pip install -r requirements.txt,pip 就會自動從網上下載并安裝所有包。
4.開始使用 virtualenv
首先,我們從終端進入到 /home/shiyanlou/Code 目錄下,新建一個虛擬環境:
shiyanlou:~/ $ cd Code shiyanlou:Code/ $ virtualenv -p python3 venv Running virtualenv with interpreter /usr/bin/python3 Already using interpreter /usr/bin/python3 Using base prefix '/usr' New python executable in /home/shiyanlou/Code/venv/bin/python3 Also creating executable in /home/shiyanlou/Code/venv/bin/python Installing setuptools, pip, wheel... done.這條命令會在 Code 文件夾中新建一個文件,pipenv 會把所有下載的包都裝進 venv 這個文件。其中 -p 選項后面的參數用于指定 Python 解釋器的版本,Python3 就指的是 Python3.5:
shiyanlou:Code/ $ python3 -V Python 3.5.2最后一個參數 venv 是自定義的虛擬環境名字,現在可以看到 Code 目錄下已經有了虛擬環境的相關目錄結構:
shiyanlou:Code/ $ ll 總用量 7K drwxrwxr-x 5 shiyanlou shiyanlou 4.0K 12\u6708 7 15:06 venv接下來,激活并進入虛擬環境,這是固定的命令:
shiyanlou:Code/ $ source venv/bin/activate (venv) shiyanlou:Code/ $可以看到命令行提示符前面有 (venv) 字樣?,F在就進入到了虛擬環境,可以使用虛擬環境中的 Python 解釋器和 pip 包管理工具。注意在虛擬環境里使用它們,無需在后面加 “3” ,python 和 pip ,不需要寫成 python3 和 pip3 。
在虛擬環境中安裝 flask 包:
(venv) shiyanlou:Code/ $ pip install flask Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/ Collecting flask ... ...如果你在本地操作,要像上面的步驟所示,創建虛擬環境并安裝所需依賴包。
此外還需大家注意,我們的實驗環境不能保存,每次啟動都是新的默認環境,所以大家一定要在實驗完成后保存好代碼,推薦使用 GitHub 來存儲項目代碼。
對于 GitHub 和 Git 操作不熟悉的同學,可以學習《 Git 與 GitHub 入門實踐 》這門優秀的免費課程。
接下來開始我們的項目。
5.新建項目主目
在 Code 目錄下新建一個子目錄作為整個項目的主目錄。就叫它 PyFly。再在 PyFly 里面新建一個 fly_bbs 文件存放我們的應用內容。然后創建配置文件 configs.py :
$ mkdir -p PyFly/fly_bbs $ cd PyFly $ touch fly_bbs/configs.py在 configs.py 文件中添加如下所示代碼:
import osclass DevConfig:'''開發環境配置'''MONGO_URI = 'mongodb://localhost:27017/pyfly'class ProConfig(DevConfig):'''生產環境配置'''configs = {'Dev': DevConfig,'Pro': ProConfig }6.創建視圖函數
在 fly_bbs 目錄下新建一個子目錄 controllers ,用來放置我們項目的交互邏輯:
$ cd /home/shiyanlou/Code/PyFly/fly_bbs $ mkdir controllers $ touch controllers/__init__.py這里先實現一個返回 Hello,World 頁面的函數,在 controllers/init.py 文件里寫入:
def config_route(app):@app.route('/')def home():return '<h1>Hello, World!</h1>'7.創建初始化app的函數
在 fly_bbs 目錄下新建 init.py 文件并寫入創建應用的相關代碼:
from flask import Flask from .configs import configs from .controllers import config_routedef create_app(config_name):app = Flask(__name__)# from_object 會從傳入的對象中讀取配置信息app.config.from_object(configs[config_name])# controllers 中的路由函數config_route(app)return app8.使用Flask Script
為了更容易地進行后面內容的實現和學習,我們使用 flask-script 來運行我們的應用。
在終端虛擬環境下執行如下命令安裝此包:
$ pip install flask-scriptFlask Script 有一些自帶的默認命令,可以用來運行應用,或者開啟帶應用上下文的命令行。
在 PyFly 目錄新建 manager.py 文件,并寫入如下代碼:
from fly_bbs import create_app from flask_script import Manager import osconfig_name = os.environ.get('FLASK_CONFIG') or 'Dev'app = create_app(config_name) # 把 app 傳給 Manager 對象 manager = Manager(app)if __name__ == '__main__':manager.run()9.運行應用
現在,你可以通過 python3 manager.py runserver 命令來運行開發環境服務器了。
運行成功,訪問 http://127.0.0.1:5000/ 就可以看到我們的項目顯示的 Hello,World 了。
10.本章總結
本節實驗介紹了虛擬環境的作用以及如何使用 virtualenv 創建虛擬環境,在 Code 目錄下創建了項目最初的目錄結構,編寫了配置文件 configs.py 并創建了一個視圖函數以打開網站首頁,并對 flask-script 進行了使用。
下一節實驗我們學習數據庫的使用和藍圖的創建。
獲取完整教程和源碼,可訪問實驗樓官網的《Flask實現一個問答社區》獲取。
總結
以上是生活随笔為你收集整理的Flask 实战:如何从零开发“知乎”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端三大技术 HTML、CSS、Java
- 下一篇: Java 面试必考难点,这一个教程全搞定