國美&華為,戰略合作簽約!
978
2025-03-31
目錄
創建 Python Flask 示例應用程序
初始化項目
安裝依賴
編寫應用程序代碼
在本地運行 Python Flask 示例
使用 Git 跟蹤更改
將應用程序部署到 Heroku
Heroku 帳戶設置
Heroku 命令行界面 (CLI)
應用程序部署到 Heroku
使用 Heroku 管道實現部署工作流
了解部署工作流程
在 Heroku 中實現部署工作流
部署和升級到登臺和生產
管理不同環境的設置和Secrets
結論
在本教程中,您將創建一個 Python?Flask示例應用程序并使用Heroku部署它,使其在網絡上公開可用。Heroku 消除了與構建和運行Web 應用程序相關的大部分基礎設施負擔,讓您可以專注于創建出色的應用程序。
除了部署應用程序之外,您還將使用 Git 來跟蹤代碼更改,并且您還將使用不同的環境配置部署工作流以進行暫存和生產。使用此設置,您將能夠在發布應用程序之前對其進行測試和預覽。
在本教程中,您將學習如何:
創建 Python?Flask 示例 Web 應用程序
使用 Heroku部署Web 應用程序
使用 Heroku管道實現部署工作流
以安全的方式管理不同環境的配置和機密
本教程假設您了解 Web 應用程序如何工作的基礎知識,并且您有一些使用 Git 的經驗。要快速了解這些主題,請查看使用 Flask 的 Python Web 應用程序(教程系列)和Python 開發人員的 Git 和 GitHub 簡介。
正如您將通過本教程了解到的,通過結合 Flask 和 Heroku,您可以最大限度地減少創建和運行 Web 應用程序所需的工作量。您可以單擊下面的鏈接以獲取本教程應用程序的完整源代碼:
創建 Python Flask 示例應用程序
在本節中,您將學習如何創建 Python Flask 示例應用程序并在本地運行它。您將初始化項目、安裝 Flask、創建應用程序并在您的計算機上運行它。您還將學習如何使用 Git 對應用程序代碼進行版本控制。
初始化項目
項目初始化包括為您的應用程序創建一個目錄、設置將安裝依賴項的Python 虛擬環境以及初始化Git 存儲庫。您不必使用虛擬環境或 Git 進行本地開發,但它們非常方便,將使開發和部署到 Heroku 變得更簡單。
首先為 Python Flask 示例應用程序創建一個新目錄。您可以通過運行以下命令來完成:
$ mkdir realpython-example-app $ cd realpython-example-app
上述命令創建一個realpython-example-app/文件夾并將當前工作目錄更改為該文件夾。
接下來,您必須創建一個 Python 虛擬環境。使用虛擬環境可以讓您管理項目的依賴項,而不會弄亂所有應用程序共享的系統級文件。運行以下命令為您的應用程序創建和激活虛擬環境。realpython-example-app/如果您還沒有,請記住將目錄更改為:
$ python3 -m venv venv $ source venv/bin/activate
這些命令創建一個名為的虛擬環境venv并激活它,因此將從該環境加載和安裝包,而不是使用系統級包。
安裝依賴
第一步是安裝 Flask Python 包。您可以運行以下命令來使用以下命令安裝 Flask?pip:
$ python3 -m pip install Flask==1.1.2
上面的命令安裝 Flask 版本1.1.2。這是您將在本教程中使用的版本。接下來,您需要創建一個requirements.txt列出項目依賴項的文件。您可以使用以下python3 -m pip freeze命令執行此任務:
$ python3 -m pip freeze > requirements.txt
您將requirements.txt在部署項目時使用來告訴 Heroku 必須安裝哪些包才能運行您的應用程序代碼。要了解有關如何在虛擬環境中安裝 Flask 和其他pip選項的更多信息,請查看Flask 安裝文檔和什么是 Pip?新 Pythonistas 指南。
現在,應用程序目錄應如下所示:
realpython-example-app/ │ ├── venv/ │ └── requirements.txt
在以下部分中,您將添加更多文件來實現應用程序邏輯、設置 Git,然后將其部署到 Heroku。
編寫應用程序代碼
在本節中,您將創建一個帶有單個路由的小型 Flask 應用程序,?index,Hello World!在請求時返回文本。要創建 Flask 應用程序,您必須創建一個Flask代表您的應用程序的對象,然后將視圖與路由相關聯。Flask 負責根據請求 URL 和您定義的路由將傳入請求分派到正確的視圖。
您可以單擊下面的鏈接以獲取本教程應用程序的完整源代碼:
示例代碼:?單擊此處下載您將用于在本教程中構建 Python Flask 示例應用程序的源代碼。
對于小型應用程序,例如您在本教程中使用的應用程序,您可以將所有代碼編寫在一個文件中,并按如下方式組織您的項目:
realpython-example-app/ │ ├── venv/ │ ├── app.py └── requirements.txt
app.py包含應用程序的代碼,您可以在其中創建應用程序及其視圖。以下代碼塊顯示了應用程序的完整源代碼:
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello World!"
你之后導入?flask,代碼創建對象app,屬于Flask類。視圖函數index()使用app.route()?裝飾器鏈接到主路由。當請求主路由時,Flask 將通過調用index()并使用其返回值作為響應來服務請求。
在本地運行 Python Flask 示例
您可以通過多種方式運行在上一節中創建的應用程序。為本地開發啟動 Flask 應用程序的最直接方法之一是使用flask run終端中的命令:
$ flask run
默認情況下,Flask 將運行您在app.py端口上定義的應用程序5000。在應用程序運行時,轉到http://localhost:5000使用 Web 瀏覽器。您將看到一個包含該消息的網頁Hello World!
在開發過程中,您通常希望在對應用程序進行更改時自動重新加載它。您可以通過將環境變量 , 傳遞FLASK_ENV=development給flask run:
$ FLASK_ENV=development flask run
當您設置 時FLASK_ENV=development,Flask 將監視對應用程序文件的更改并在發生更改時重新加載服務器。這樣,您無需在每次修改后手動停止和重新啟動應用服務器。
使用 Git 跟蹤更改
在本教程中,您將使用 Git(一種非常流行的版本控制系統 (VCS))跟蹤對項目文件的更改。因此,作為第一步,您應該為您的項目創建一個 Git 存儲庫。您可以通過在項目目錄中執行以下命令來實現此目的:
$ git init
上述命令初始化將用于跟蹤項目文件的存儲庫。存儲庫元數據存儲在名為 的隱藏目錄中.git/。
請注意,有些文件夾不應包含在 Git 存儲庫中,例如venv/和__pycache__/。您可以通過創建一個名為 .git 的文件來告訴 Git 忽略它們.gitignore。使用以下命令創建此文件:
$ echo venv > .gitignore $ echo __pycache__ >> .gitignore $ git add .gitignore app.py requirements.txt $ git commit -m "Initialize Git repository"
運行上述命令后,Git 將跟蹤對應用程序文件的更改,但會忽略venv/和__pycache__/文件夾。現在,項目目錄realpython-example-app/應如下所示:
realpython-example-app/ │ ├── .git/ │ ├── venv/ │ ├── .gitignore ├── app.py └── requirements.txt
您現在已準備好使用 Heroku 部署您的應用程序。查看Python 開發人員的 Git 和 GitHub 簡介,了解有關 Git 以及如何在 GitHub 中托管存儲庫的更多信息。
將應用程序部署到 Heroku
Heroku 使構建和部署應用程序對開發人員非常友好。它消除了與構建和運行 Web 應用程序相關的大部分負擔,處理大多數基礎架構細節,讓您專注于創建和改進應用程序。Heroku 處理的一些細節包括:
配置 HTTPS 證書
管理 DNS 記錄
運行和維護服務器
在本節的其余部分,您將學習如何使用 Heroku 將先前創建的 Web 應用程序部署到 Internet。到本節結束時,您的應用程序將在一個不錯的 URL 下公開可用,并使用HTTPS 提供服務。
Heroku 帳戶設置
您的第一步是創建一個 Heroku 帳戶。如果您還沒有,您可以使用免費和業余愛好計劃。它允許您在不花錢的情況下部署非商業應用程序、個人項目和實驗。
如果您轉到Heroku 注冊頁面,您將在注冊表單上看到以下字段:
完成所需信息并確認您的電子郵件地址后,您就可以開始使用 Heroku。
Heroku 命令行界面 (CLI)
Heroku 命令行界面 (CLI) 是一種允許您從終端創建和管理 Heroku 應用程序的工具。這是部署應用程序的最快捷、最方便的方式。您可以查看開發人員的文檔以獲取操作系統的安裝說明。在大多數 Linux 發行版上,您可以通過運行以下命令來安裝 Heroku CLI:
$ curl https://cli-assets.heroku.com/install.sh | sh
前面的命令下載 Heroku CLI 安裝程序并執行它。接下來,您必須通過運行以下命令登錄:
$ heroku login
這將打開一個帶有按鈕的網站以完成登錄過程。單擊登錄以完成身份驗證過程并開始使用 Heroku CLI:
登錄后,您就可以開始使用 Heroku CLI 來管理您的應用程序和工作流了。
應用程序部署到 Heroku
在本節中,您將學習如何使用 Heroku CLI 和 Git 部署您的 Web 應用程序。第一步是Procfile在項目的根目錄中創建一個名為的文件。這個文件告訴 Heroku 如何運行應用程序。您可以通過運行以下命令來創建它:
$ echo "web: gunicorn app:app" > Procfile
請注意,此文件名必須以大寫字母開頭。該文件告訴 Heroku 使用Gunicorn為您的應用程序提供服務,這是一種 Python?Web 服務器網關接口 (WSGI) HTTP 服務器,與各種 Web 框架(包括 Flask?)兼容。確保安裝 Gunicorn 并requirements.txt使用pip以下命令更新文件:
$ python3 -m pip install gunicorn==20.0.4 $ python3 -m pip freeze > requirements.txt
前面的命令安裝 Gunicorn 并更新requirements.txt以包含所有依賴項的列表。由于您添加和更改了文件,因此您需要將它們提交到 Git。您可以通過執行以下兩個命令來做到這一點:
$ git add Procfile requirements.txt $ git commit -m "Add Heroku deployment files"
當您執行上述命令時,您將提交最新版本的Procfile和requirements.txt到 Git 存儲庫。現在您已準備好將應用程序部署到 Heroku。首先使用 Heroku CLI創建 Heroku 應用程序。
注意:本教程使用realpython-example-app作為應用程序名稱。由于應用程序名稱在 Heroku 上必須是唯一的,因此您需要為部署選擇不同的名稱。
您可以通過運行以下命令在 Heroku 中創建應用程序:
$ heroku create realpython-example-app
運行上述命令初始化的Heroku應用程序,創建一個GIT中遠程命名heroku。接下來,您可以將 Git 存儲庫推送到此遠程以觸發構建和部署過程:
$ git push heroku master
將master分支推送到heroku遠程后,您將看到輸出顯示有關構建和部署過程的信息:
Enumerating objects: 6, done. 2Counting objects: 100% (6/6), done. 3Delta compression using up to 8 threads 4Compressing objects: 100% (4/4), done. 5Writing objects: 100% (6/6), 558 bytes | 558.00 KiB/s, done. 6Total 6 (delta 0), reused 0 (delta 0) 7remote: Compressing source files... done. 8remote: Building source: 9remote: 10remote: -----> Building on the Heroku-18 stack 11remote: -----> Python app detected 12remote: -----> Installing python-3.6.12 13remote: -----> Installing pip 20.1.1, setuptools 47.1.1 and wheel 0.34.2 14remote: -----> Installing SQLite3 15remote: -----> Installing requirements with pip 16remote: Collecting click==7.1.2 17remote: Downloading click-7.1.2-py2.py3-none-any.whl (82 kB) 18remote: Collecting Flask==1.1.2 19remote: Downloading Flask-1.1.2-py2.py3-none-any.whl (94 kB) 20remote: Collecting itsdangerous==1.1.0 21remote: Downloading itsdangerous-1.1.0-py2.py3-none-any.whl (16 kB) 22remote: Collecting Jinja2==2.11.2 23remote: Downloading Jinja2-2.11.2-py2.py3-none-any.whl (125 kB) 24remote: Collecting MarkupSafe==1.1.1 25remote: Downloading MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl 26remote: Collecting Werkzeug==1.0.1 27remote: Downloading Werkzeug-1.0.1-py2.py3-none-any.whl (298 kB) 28remote: Installing collected packages: click, Werkzeug, itsdangerous, 29MarkupSafe, Jinja2, Flask 30remote: Successfully installed Flask-1.1.2 Jinja2-2.11.2 MarkupSafe-1.1.1 31Werkzeug-1.0.1 click-7.1.2 itsdangerous-1.1.0 32remote: -----> Discovering process types 33remote: Procfile declares types -> (none) 34remote: 35remote: -----> Compressing... 36remote: Done: 45.1M 37remote: -----> Launching... 38remote: Released v1 39remote: https://realpython-example-app.herokuapp.com/ deployed to Heroku 40remote: 41remote: Verifying deploy... done. 42To https://git.heroku.com/realpython-example-app.git 43 * [new branch] master -> master
恭喜,該應用程序現已上線!輸出顯示了構建過程,包括依賴項的安裝和部署。在第 39 行,您將找到應用程序的 URL。在這種情況下,它是https://realpython-example-app.herokuapp.com/.?您還可以使用以下 Heroku CLI 命令打開應用程序的 URL:
$ heroku open
上面的命令將使用您的默認 Web 瀏覽器打開您的應用程序。
注意:輸出的第 12 行表明 Python 3.6.12 將用作應用程序的運行時。這是編寫本教程時的默認版本。要了解如何自定義 Python 版本和其他運行時設置,請查看Heroku 的 Python 運行時文檔。
現在讓我們對應用程序進行一些小的更改,看看如何重新部署它。編輯app.py和修改返回的字符串index(),如下一個代碼塊所示:
from flask import Flask 2 3app = Flask(__name__) 4 5@app.route("/") 6def index(): 7 return "Hello this is the new version!"
正如你在第 7 行看到的,"Hello World!"被替換為"Hello this is the new version!"You can deploy this version to Heroku by committing and push the changes to the?herokuremote:
$ git add app.py $ git commit -m "Change the welcome message" $ git push heroku master
使用這些命令,您將更改提交到本地 Git 存儲庫并將它們推送到heroku遠程。這將再次觸發構建和部署過程。您可以在需要部署應用程序的新版本時重復這些步驟。您會注意到后續部署通常花費的時間更少,因為需求已經安裝。
在本節中,您學習了如何使用 Git 和 Heroku CLI 在 Heroku 上創建和部署應用程序。有關使用 Heroku CLI 部署 Python 應用程序的更多詳細信息,請查看使用 Python 開始使用 Heroku。
使用 Heroku 管道實現部署工作流
在本節中,您將學習如何使用Heroku 管道為您的應用程序部署實現工作流。這個特定的工作流使用三個獨立的環境,稱為本地、暫存和生產。這種設置在專業項目中被廣泛使用,因為它允許在將新版本部署到生產環境并將其展示給真實用戶之前對其進行測試和審查。
了解部署工作流程
正如您在上面看到的,當您使用此工作流時,您將在三個獨立的環境中運行應用程序:
發展是當地的環境。
Staging是用于預覽和測試的預生產環境。
生產是最終用戶訪問的實時站點。
在前面的部分中,您看到了如何在本地環境和 Heroku 的生產環境中運行應用程序。添加臨時環境可以極大地有益于開發過程。此環境的主要目的是集成所有新分支的更改,并針對將成為下一個版本的構建運行集成測試。
接下來,您將看到如何在Heroku上創建臨時環境,以及如何創建一個管道,以促進從登臺到生產的版本。下圖顯示了此工作流程:
上圖顯示了三個環境、在每個環境中發生的活動以及部署和升級步驟。
在 Heroku 中實現部署工作流
在 Heroku 中實現工作流包括兩個步驟:
為登臺和生產創建單獨的應用程序
使兩個應用程序成為同一管道的一部分
甲Heroku的管道是一組由工作流捆綁在一起的應用程序。這些應用程序中的每一個都是開發工作流程中的一個環境,如登臺或生產。使用管道可確保在升級后,生產將運行您在暫存時查看的完全相同的代碼。
在本教程中,之前創建的 Heroku 應用程序realpython-example-app用作生產環境。您應該使用以下命令為暫存環境創建一個新的 Heroku 應用程序:
$ heroku create realpython-example-app-staging --remote staging $ git push staging master
運行這些命令會創建一個新的 Heroku 應用realpython-example-app-staging程序,并使用 Git 將應用程序部署到它。然后,您可以在 訪問登臺應用程序https://realpython-example-app-staging.herokuapp.com/。請注意,名為的 Git 遠程staging與此應用程序相關聯。
現在您擁有用于生產和登臺的 Heroku 應用程序,您已準備好創建將它們鏈接在一起的 Heroku 管道。您可以使用 Heroku CLI 創建管道:
$ heroku pipelines:create --app realpython-example-app \ --stage production \ realpython-example-app Creating realpython-example-app pipeline... done Adding ? realpython-example-app to realpython-example-app pipeline as production ... done
上面的命令創建一個名為管道realpython-example-app并添加名為realpython-example-app生產環境的應用程序。接下來,運行以下命令以創建指向此應用程序的 Git 遠程,并將其命名為prod:
$ heroku git:remote --app realpython-example-app --remote prod
從現在開始,您可以將生產部署稱為prod.
接下來,通過運行以下命令將暫存應用程序添加到同一管道:
$ heroku pipelines:add realpython-example-app \ --app realpython-example-app-staging \ --stage staging Adding ? realpython-example-app-staging to realpython-example-app pipeline as staging... done
此命令將應用程序添加realpython-example-app-staging到同一管道并指定此應用程序必須用于staging舞臺。這意味著您的管道現在包含兩個應用程序:
realpython-example-app
realpython-example-app-staging
第一個用作生產環境,第二個用作登臺環境。
部署和升級到登臺和生產
現在您已經配置了您的應用程序和管道,您可以使用它來將您的應用程序部署到暫存區,在那里進行審查,然后將其提升到生產環境。
例如,假設您想再次更改index()視圖返回的消息。在這種情況下,您必須編輯app.py和更改index().?以下代碼塊顯示了新版本:
1from flask import Flask 2 3app = Flask(__name__) 4 5@app.route("/") 6def index(): 7 return "This is yet another version!"
正如您在第 7 行看到的,index()返回"This is yet another version!"您可以通過運行以下命令將此新版本部署到您的登臺環境:
$ git add app.py $ git commit -m "Another change to the welcome message" $ git push staging master
這些命令提交app.py并將更改推送到staging遠程,觸發此環境的構建和部署過程。您應該會看到部署在 的新版本https://realpython-example-app-staging.herokuapp.com/。注意生產環境還在使用之前的版本。
當您對更改感到滿意時,您可以使用 Heroku CLI 將新版本提升到生產環境:
$ heroku pipelines:promote --remote staging
上面的命令將當前在暫存中運行的完全相同的版本部署到生產中。您會注意到,在這種情況下,沒有構建步驟,因為使用了來自暫存的相同構建并將其部署到生產中。您可以驗證https://realpython-example-app.herokuapp.com/應用程序是否已升級并且它運行的是最新版本。
在本節中,您了解了部署工作流并在 Heroku 中實現了它。要了解有關使用管道和更高級工作流的更多信息,請查看Heroku 管道文檔。
管理不同環境的設置和Secrets
大多數應用程序需要針對每個環境進行不同的設置來執行諸如啟用調試功能或指向其他數據庫之類的操作。其中一些設置(如身份驗證憑據、數據庫密碼和API 密鑰)非常敏感,因此您必須避免將它們硬編碼到應用程序文件中。
您可以創建一個config.py文件來保存非敏感配置值并從環境變量中讀取敏感配置值。在以下代碼塊中,您可以看到 的源代碼config.py:
import os 2 3class Config: 4 DEBUG = False 5 DEVELOPMENT = False 6 SECRET_KEY = os.getenv("SECRET_KEY", "this-is-the-default-key") 7 8class ProductionConfig(Config): 9 pass 10 11class StagingConfig(Config): 12 DEBUG = True 13 14class DevelopmentConfig(Config): 15 DEBUG = True 16 DEVELOPMENT = True
此代碼聲明了一個Config類,用作每個環境配置的基礎。請注意,在第 6 行,SECRET_KEY是使用os.getenv().?這避免了在源代碼中泄露實際密鑰。同時,您可以為每個環境自定義任何選項。
接下來,您必須app.py根據環境進行修改以使用不同的配置類。這是完整的源代碼app.py:
1import os 2from flask import Flask 3 4app = Flask(__name__) 5env_config = os.getenv("APP_SETTINGS", "config.DevelopmentConfig") 6app.config.from_object(env_config) 7 8@app.route("/") 9def index(): 10 secret_key = app.config.get("SECRET_KEY") 11 return f"The configured secret key is {secret_key}."
在第 5 行和第 6 行,配置是從config.py.?具體的配置類將取決于存儲在APP_SETTINGS環境變量中的值。如果變量未定義,則配置將回退到DevelopmentConfig默認值。
注意:對于這個例子,第 11 行的消息被修改為顯示SECRET_KEY由app.config.get().?您通常不會在回復中顯示敏感信息。這只是展示如何讀取這些值的示例。
現在您可以通過在啟動應用程序時傳遞一些環境變量來查看它在本地是如何工作的:
$ SECRET_KEY=key-read-from-env-var flask run
上述命令設置SECRET_KEY環境變量并啟動應用程序。如果您導航到http://localhost:5000,那么您應該會看到該消息The configured secret key is key-read-from-env-var。
接下來,通過運行以下命令提交更改并將它們推送到暫存環境:
$ git add app.py config.py $ git commit -m "Add config support" $ git push staging master
這些命令將更改app.py和新config.py文件提交到本地 Git 存儲庫,然后將它們推送到暫存環境,這會觸發新的構建和部署過程。在繼續之前,您可以使用 Heroku CLI 為此環境自定義環境變量:
$ heroku config:set --remote staging \ SECRET_KEY=the-staging-key \ APP_SETTINGS=config.StagingConfig
使用該config:set命令,您已經為暫存設置了SECRET_KEY和的值APP_SETTINGS。您可以通過轉到https://realpython-example-app-staging.herokuapp.com/并檢查頁面是否顯示消息來驗證更改是否已部署The configured secret key is the-staging-key。
使用 Heroku CLI,您還可以獲得任何應用程序的環境變量值。以下命令從 Heroku 獲取為暫存環境設置的所有環境變量:
$ heroku config --remote staging === realpython-example-app-staging Config Vars APP_SETTINGS: config.StagingConfig SECRET_KEY: the-staging-key
如您所見,這些值與之前設置的值相匹配。
最后,您可以使用 Heroku CLI 使用不同的配置值將新版本提升到生產環境:
$ heroku config:set --remote prod \ SECRET_KEY=the-production-key \ APP_SETTINGS=config.ProductionConfig $ heroku pipelines:promote --remote staging
第一條命令設置值SECRET_KEY,并APP_SETTINGS為生產環境。第二個命令提升新的應用程序版本,即具有該config.py文件的版本。同樣,您可以通過轉到https://realpython-example-app.herokuapp.com/并檢查頁面是否顯示來驗證更改是否已部署The configured secret key is the-production-key。
在本節中,您學習了如何為每個環境使用不同的配置以及如何使用環境變量處理敏感設置。請記住,在實際應用程序中,您不應公開諸如SECRET_KEY.
結論
恭喜,您現在已經知道如何使用 Flask 創建 Web 應用程序,以及如何通過使用 Heroku 部署來使其公開可用。您還知道如何設置不同的環境,讓您、您的團隊和您的客戶可以在發布應用程序之前對其進行審核。雖然本教程中創建的示例應用程序非常小,但您可以將其用作下一個項目的起點!
在本教程中,您學習了如何:
創建 Python?Flask 示例 Web 應用程序
使用Heroku部署 Web 應用程序
使用 Heroku管道實現部署工作流
以安全的方式管理不同環境的配置和機密
Heroku 提供了許多前幾節未涵蓋的功能,包括擴展、數據庫等。查看Heroku 開發中心和Heroku 平臺文檔,了解可幫助您加速開發的其他功能。最后,查看Flask by Example教程系列,了解如何創建和部署更復雜的應用程序。
Flask Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。