關鍵字 flask setuptools mvc blueprint pycharm python2.7.13
背景
基于flask開發了一款產品,屆時會部署到客戶的環境,為了避免重要的代碼泄露,故而對部分代碼進行打包封裝。在這里blueprint不是必須要使用的,但樓主為了以后做準備,這里也用上了。于是乎,開始一路嘗試...總結下分享給大家參考。
開始
step1 pycharm創建flask項目
剛新建ok的項目,都是空的,不多說
step2 項目新建python package
- 創建frame
- 創建web
- web下創建controller
- calculate下添加calculate.py文件
- web下創建controller
- 創建setup.py
項目目前如圖:
step3 coding
controller->_init__.py
from web import app
from web.controller.calculte
import calculate_blueprint
app.register_blueprint(calculate_blueprint)
controller->calculate.py
from flask import Blueprint
calculate_blueprint = Blueprint('calculate', __name__,url_prefix='/calculate')
@calculate_blueprint.route('/')
def home():
return 'calculate'
web->_init_.py:
from flask import Flask
app = Flask(__name__)
import controller
Flask-blueprint.py
from web import app
if __name__ == '__main__':name="zsf-test",
version="1.0.0",
description="zsf-test",
author="zsf",
author_email="zsfbest@gmail.com",
long_description=textwrap.dedent("""zsf-test"""),
packages=find_packages(),
install_requires=[
"Flask",
"xmltodict",
],
include_package_data=True,
zip_safe=False,
)
app.run(threaded=True)
setup.py
import setuptools
import textwrap
from setuptools import find_packages
if __name__ == "__main__":
setuptools.setup(
name="zsf-test",
version="1.0.0",
description="zsf-test",
author="zsf",
author_email="zsfbest@gmail.com",
long_description=textwrap.dedent("""zsf-test"""),
packages=find_packages(),
install_requires=[
"Flask",
"xmltodict",
],
include_package_data=True,
zip_safe=False,
)
step 4 代碼釋義
1.為何要在web下的_init_.py初始化app?
其實像剛創建好項目放在Flask-blueprint初始化也是可以的,這里是為了深度隱藏app初始化的一些內容,在web下的_init_.py 其實還會放請求攔截,日志初始化等功能性代碼。
2.web下的_init_.py為何先初始化app后在導入controller?
這里是因為controller需要導入web下的app來注冊藍圖。反過來說,如果web下的_init.py還沒初始化app,controller下的_init.py就無法從web導入app,那直接就導入報錯,更別談注冊藍圖。
3.setup.py代碼釋義
packages=find_packages()這里請務必使用這個函數來找需要打包的packages。最開始看了一篇博客,寫法類似于 packages={'web'},后面解壓縮了打包后的文件一看,只把我的web第一級目錄打包進去了,web下的controller完全沒有。
4.controller 下的代碼及Flask-blueprint.py代碼釋義
這里代碼都很簡單,就是藍圖的簡單實例,以及app的run。用manager來跑項目的自行擴展
5.附注
其實不添加setup.py 已經可以運行了,右鍵Flask-blueprint.py文件,run或debug,然后瀏覽器訪問http://127.0.0.1:5000/calculate/ 會打印 calculate到頁面
step 5 開始打包
pycharm下直接alt f12 喚出自帶的terminal。執行:
python setup.py sdist
刷新項目結構會發現自動生成了dist,和zsf_test.egg-info文件夾.如圖所示:
pip可以直接安裝dist下的壓縮包,代碼:
pip install zsf-test-1.0.0.tar.gz
解壓縮看一下,如圖:
樓主平時用linux系統開發,用tar -zxvf 解壓的該文件,其他系統用戶自行解決。可以看到所有的項目代碼都已經打包進來了到這里。下面我們實際運用一下,來驗證一下這個包是否能正常工作。
step 6 項目認證
1.新建一個virtualenv
創建一個新的virtualenv并安裝之前生成好的python包
2.創建一個新的flask項目
創建一個新的flask項目,并使用剛剛創建的virtualenv運行
這兩步有難度的可以參考我的另一篇文章Python virtualenv
目前項目如圖:
3.coding
from web import app
if __name__ == '__main__':
app.run(port=1234)#為了和上個項目做區分,特地換個端口
4.運行setuptoolsTest.py
瀏覽器訪問http://127.0.0.1:1234/calculate/ 出現如圖效果
step 7 結束
????新項目只導入app,并啟動,其余代碼都在python packages里面。至此,一切都完成。屆時部署到客戶環境時,對于代碼起到一定程度的保護性(遇到python大神另說了)。
新年了,項目要上線,每天早上八點到公司寫的這篇文章,有不清晰或者有漏洞的,請大家不吝賜教,本人積極改正。也歡迎各路朋友關注本人,陸續更新一點項目使用的心得給大家。