關(guān)鍵字 flask setuptools mvc blueprint pycharm python2.7.13
背景
基于flask開發(fā)了一款產(chǎn)品抗蠢,屆時會部署到客戶的環(huán)境亿絮,為了避免重要的代碼泄露厚柳,故而對部分代碼進行打包封裝。在這里blueprint不是必須要使用的凯砍,但樓主為了以后做準(zhǔn)備愤炸,這里也用上了。于是乎矾睦,開始一路嘗試...總結(jié)下分享給大家參考晦款。
開始
step1 pycharm創(chuàng)建flask項目
剛新建ok的項目,都是空的枚冗,不多說
step2 項目新建python package
- 創(chuàng)建frame
- 創(chuàng)建web
- web下創(chuàng)建controller
- calculate下添加calculate.py文件
- web下創(chuàng)建controller
- 創(chuàng)建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缓溅?
其實像剛創(chuàng)建好項目放在Flask-blueprint初始化也是可以的,這里是為了深度隱藏app初始化的一些內(nèi)容赁温,在web下的_init_.py 其實還會放請求攔截坛怪,日志初始化等功能性代碼淤齐。
2.web下的_init_.py為何先初始化app后在導(dǎo)入controller?
這里是因為controller需要導(dǎo)入web下的app來注冊藍圖袜匿。反過來說更啄,如果web下的_init.py還沒初始化app,controller下的_init.py就無法從web導(dǎo)入app沉帮,那直接就導(dǎo)入報錯锈死,更別談注冊藍圖。
3.setup.py代碼釋義
packages=find_packages()這里請務(wù)必使用這個函數(shù)來找需要打包的packages穆壕。最開始看了一篇博客待牵,寫法類似于 packages={'web'},后面解壓縮了打包后的文件一看,只把我的web第一級目錄打包進去了喇勋,web下的controller完全沒有缨该。
4.controller 下的代碼及Flask-blueprint.py代碼釋義
這里代碼都很簡單,就是藍圖的簡單實例川背,以及app的run贰拿。用manager來跑項目的自行擴展
5.附注
其實不添加setup.py 已經(jīng)可以運行了,右鍵Flask-blueprint.py文件熄云,run或debug膨更,然后瀏覽器訪問http://127.0.0.1:5000/calculate/ 會打印 calculate到頁面
step 5 開始打包
pycharm下直接alt f12 喚出自帶的terminal。執(zhí)行:
python setup.py sdist
刷新項目結(jié)構(gòu)會發(fā)現(xiàn)自動生成了dist,和zsf_test.egg-info文件夾.如圖所示:
pip可以直接安裝dist下的壓縮包,代碼:
pip install zsf-test-1.0.0.tar.gz
解壓縮看一下缴允,如圖:
樓主平時用linux系統(tǒng)開發(fā)荚守,用tar -zxvf 解壓的該文件,其他系統(tǒng)用戶自行解決练般〈Q可以看到所有的項目代碼都已經(jīng)打包進來了到這里。下面我們實際運用一下薄料,來驗證一下這個包是否能正常工作敞贡。
step 6 項目認(rèn)證
1.新建一個virtualenv
創(chuàng)建一個新的virtualenv并安裝之前生成好的python包
2.創(chuàng)建一個新的flask項目
創(chuàng)建一個新的flask項目,并使用剛剛創(chuàng)建的virtualenv運行
這兩步有難度的可以參考我的另一篇文章Python virtualenv
目前項目如圖:
3.coding
from web import app
if __name__ == '__main__':
app.run(port=1234)#為了和上個項目做區(qū)分摄职,特地?fù)Q個端口
4.運行setuptoolsTest.py
瀏覽器訪問http://127.0.0.1:1234/calculate/ 出現(xiàn)如圖效果
step 7 結(jié)束
????新項目只導(dǎo)入app誊役,并啟動,其余代碼都在python packages里面谷市。至此蛔垢,一切都完成。屆時部署到客戶環(huán)境時歌懒,對于代碼起到一定程度的保護性(遇到python大神另說了)啦桌。
新年了,項目要上線,每天早上八點到公司寫的這篇文章甫男,有不清晰或者有漏洞的且改,請大家不吝賜教,本人積極改正板驳。也歡迎各路朋友關(guān)注本人又跛,陸續(xù)更新一點項目使用的心得給大家。