日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask 项目实战|从零开发“StackOverflow”问答网站

發布時間:2024/4/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask 项目实战|从零开发“StackOverflow”问答网站 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

StackOverflow 是全球最大的 IT 技術問答網站之一,在程序員界無人不知無人不曉,堪稱“面向搜索引擎編程”神器。下圖就是 StackOverflow 網站首頁圖:

是不是有種似曾相識的感覺?其實國內很多技術問答網站都是仿照 StackOverflow 來做的,那么問題來了,開發一個 StackOverflow 這樣的網站需要哪些工作呢?

首先我們來看看 StackOverflow 有哪些主要功能:

1、提問功能;

2、回答功能;

3、點贊功能;

4、用戶管理功能;

圍繞上面的 4 大功能,開發方面就涉及到:

1、開發語言的選擇;

2、框架的選擇;

3、數據庫的設計;

4、接口開發;

5、部署;

……

今天就給大家帶來一門開發「仿 StackOverflow 問答網站」的課程,包含具體開發思路、過程詳解、代碼等。項目使用了 Python 的 Flask Web 框架,帶你實現屬于自己的“問答網站”,實現提問、回答、評論、點贊等完備功能,并有完整源碼可供下載。

效果顯示

  • 網站首頁

  • 問題詳情頁

課程地址:

https://www.shiyanlou.com/courses/1617

下面是課程的第一節內容:

歡迎來到 Flask 的世界

Flask 是一個使用 Python 開發的微型開發框架,基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。Flask 也被稱為 “microframework” ,因為它具有極簡的核心,然而卻可以通過擴展的方式增加其它功能。Flask 默認不支持數據庫連接,不支持用戶登錄認證等功能。但是,我們可以通過各種擴展獲得對這些功能的支持,比如數據庫 ORM、表單驗證、文件上傳、開放式身份驗證技術。這使得 Flask 成為具有高度擴展性和靈活性的 Python Web 框架。

為什么要學習 Flask ?

  • 正如上面所說, Flask 是一個 Web “微”框架,我們使用 Flask 可以快速的搭建網站。在互聯網時代,一個好的 idea 不能盡快展現在人們的面前,確實是令開發者很苦惱的事情。
  • 容易學習。學完了 Python 基礎之后想要接觸 Web 開發,Flask 非常易于學習。同時,稍后你能看到示例代碼所展示的那樣,這是一個十分簡單的框架。你的大腦很自然地就適應它了。使用 Flask ,可以更快地開發。
  • Flask 有非常活躍、生機勃勃的社區:很多人會推薦你從 Flask 入手, Flask 是最好的現代 web 開發的 Python 框架之一。
  • “微” 是什么意思?

    “微” 并不代表整個應用只能塞在一個 Python 文件內,盡管塞在單一文件內也是小事一樁。“微”也不代表 Flask 功能不強。微框架中的“微”字表示 Flask 的目標是保持核心簡單但是可擴展。Flask 不會替你做決定,比如選用何種數據庫。類似的決定,如使用何種模板引擎,是非常容易改變的。Flask 可以變成你任何想要的東西,不會變成任何你不想要的東西,一切由你做主。

    缺省情況下, Flask 不包含數據庫抽象層、表單驗證或者其他已有的庫可以處理的東西。然而, Flask 通過擴展為你的應用支持這些功能,就如同這些功能是 Flask 原生的一樣。有無數的擴展可以支持數據庫整合、表單驗證、上傳處理和各種開放驗證等等。Flask 可能是“微小”的,但絕不簡單,可以滿足各種生產需要。

    環境準備

    在本訓練營所提供的實驗環境中,已經安裝了 Python3.5 以及包管理工具 pip 。首先打開終端,執行如下語句切換到 /home/shiyanlou/Code 目錄下,升級 pip3 到最新版:

    $ cd ~/Code$ sudo pip3 install -U pip

    操作截圖如下:

    使用 virtualenv 創建虛擬環境

    目前 Python 中創建隔離開發環境的工具有多種選擇,其中 virtualenv 是最優秀的一個。所謂隔離是指 virtualenv 為每個 Python 項目創建虛擬環境,并保證該程序只能訪問該虛擬環境下的包,解決了“項目 A 依賴于版本 1.x ,而項目 B 需要版本 2.x ”的兩難問題,從而保持全局 Python 環境的干凈整潔。另外使用 virtualenv 還有個好處,那就是在安裝 Python 第三方庫的時候不需要管理員權限。

    安裝 virtualenv

    安裝 virtualenv 的途徑有很多,因為實驗環境中已經安裝了 pip 包管理工具,所以使用如下命令即可安裝,這也是最常用的方式:

    # 此命令無需在實驗環境中執行$ sudo pip3 install virtualenv

    而我們的實驗環境中已經安裝了 virtualenv ,需要執行如下命令升級它到最新版:

    $ sudo pip3 install -U virtualenv

    其中 -U 選項等同于 --upgrade ,采用簡寫的選項可以少敲幾下鍵盤。

    補充:想了解更多關于 virtualenv 的信息可以參考 Python 指南——虛擬環境。

    注意最新的版本是 20.x.x ,其中 20 是指當前年份的后兩位。2020 年的版本號是 20.x.x ,2021 年的版本號是 21.x.x 。

    使用 virtualenv

    接下來可以為我們的 Web 項目創建虛擬環境了,命令很簡單:

    $ virtualenv -p python3 venv

    其中 -p python 意為基于實驗環境中的 Python3.5 創建虛擬環境,新建環境中的默認 Python 解釋器就是 Python3.5 ;最后一個參數 venv 表示虛擬環境的目錄名,虛擬環境創建后會自動在當前目錄下生成一個環境目錄,目錄的名字就是 venv 。

    操作截圖如下:

    此時執行如下命令即可進入虛擬環境:

    $ source venv/bin/activate

    進入虛擬環境后,可以直接使用 python 命令,它指向 Python3.5 ;可以直接使用pip 命令,它指向虛擬環境的包管理工具。

    如下圖所示,進入虛擬環境后,在命令行提示符前面會有白顏色的括號,括號內是虛擬環境的目錄名:

    現在可以安裝我們的 Web 項目所需要的 Flask 工具包了,注意在虛擬環境中執行 python 和 pip 命令不要加 sudo :

    $ pip install flask

    操作截圖如下:

    使用 pip freeze 命令可以查看當前已經安裝的所有第三方庫及其版本。如上圖所示,除了 Flask 最新的 1.1.1 版本已經被安裝,一并安裝的還有一些依賴包。

    在虛擬環境中安裝了第三方庫之后,要再次執行如下命令重新進入虛擬環境,以使得新安裝的工具包生效:

    $ source venv/bin/activate

    創建項目的目錄結構

    項目最終完成后的目錄結構如下圖所示:

    首先,我們在 /home/shiyanlou/Code 目錄下創建多級目錄作為項目的主目錄結構:

    $ mkdir -p stackoverflow/stackoverflow

    進入 /home/shiyanlou/Code/stackoverflow 目錄,創建 manage.py 文件,該文件用于編寫創建 Flask 應用的代碼:

    $ cd stackoverflow$ touch manage.py

    切換到 /home/shiyanlou/Code/stackoverflow/stackoverflow 目錄下,創建一些必要的文件和目錄:

    $ cd stackoverflow$ touch app.py models.py configs.py __init__.py$ mkdir handlers templates

    操作截圖如下:

    其中 /home/shiyanlou/Code/stackoverflow 為文件主目錄,對其中的文件和目錄做一些說明:

    • stackoverflow/init.py 為非必須文件。在需要的時候,可以向其中引入一些變量,以使得上級目錄中的 manage.py 等文件可以將 stackoverflow 作為模塊引入其中的變量。
    • stackoverflow/app.py 為項目的核心文件,定義創建應用的函數以及注冊插件、藍圖等代碼寫在這里。
    • stackoverflow/configs.py 為配置文件,對于不同的場景,需要提供不同的配置條件。常見的場景有測試、開發、生產等。
    • stackoverflow/models.py 為編寫映射類的文件。
    • stackoverflow/handlers 為藍圖目錄,將項目分為多個部分:首頁、注冊、登錄/登出為一部分;問答相關的路由為一部分等等。
    • stackoverflow/templates 為前端模板文件目錄,用于存放 HTML 文件。
    • stackoverflow/static 為靜態文件目錄,該目錄暫未創建。

    一個最基本的項目

    本節實驗我們使用 Flask Web 框架只寫出一個最基本的網站首頁,并顯示 “Hello World” 字樣即可。

    首先使用 Vim 編輯器打開 stackoverflow/app.py 文件,將以下代碼寫入其中:

    from flask import Flaskapp = Flask(__name__)@app.route('/')def index(): return 'Hello World'if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)

    使用 Flask 框架,短短幾行代碼寫到一個文件里,就可以啟動一個 Web 應用了。

    對代碼進行一些簡單的說明:

    • 第 1 行引入 Flask 類,該類的實例即為 Web 應用,其有一個 run 方法,可以啟動 Web 項目。
    • 第 2 行 app = Flask(name) 創建 Flask 類的實例并賦值給變量 app ,其中的參數 name 可以寫成任何字符串,通常默認都會寫成 name ,即文件名 app 。
    • 第 3 至 5 行定義的是路由函數 index 。應用啟動后,當瀏覽器訪問網站主頁時,服務器會調用該函數來處理請求并返回帶有 ‘Hello World’ 字符串的響應對象。
    • 最后一行,調用應用的 run 方法啟動應用。實驗樓在 WebIDE 環境中提供了一個 “Web 服務” 功能,可以直接進入到實驗環境中 8080 端口運行的網站。所以我們在 app.run 方法中需要提供 ‘0.0.0.0’ 作為 host 參數的值以便任何局域網內的瀏覽器都可以請求該網址,并且將端口號設置為 8080 。

    終端執行 python app.py 啟動應用:

    點擊右側工具欄中的 “Web 服務” 按鈕:

    瀏覽器會新建一個標簽并訪問我們的網站首頁:

    這就是一個最基本的 Web 網站的樣式,在后面的實驗中我們會基于此深入學習。

    總結

    本節實驗內容較為簡單,主要介紹了 Flask Web 框架的特點,以及實驗環境的準備工作。在實驗環境中更新 pip 和 virtualenv ,并使用后者創建了虛擬環境。在虛擬環境中編寫了一個 Flask Web 應用,并成功啟動。

    下一節實驗我們繼續深入學習 Flask 的配置、映射類的編寫等操作。

    點擊《Flask 仿 StackOverflow 在線問答網站》,學習完整課程內容~

    總結

    以上是生活随笔為你收集整理的Flask 项目实战|从零开发“StackOverflow”问答网站的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。