国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

?? 歡迎大家來到景天科技苑??

???? 養(yǎng)成好習(xí)慣,先贊后看哦~????

?? 作者簡介:景天科技苑
??《頭銜》:大廠架構(gòu)師,華為云開發(fā)者社區(qū)專家博主,阿里云開發(fā)者社區(qū)專家博主,CSDN新星創(chuàng)作者,掘金優(yōu)秀博主,51CTO博客專家等。
??《博客》:Python全棧,前后端開發(fā),人工智能,js逆向,App逆向,網(wǎng)絡(luò)系統(tǒng)安全,數(shù)據(jù)分析,Django,fastapi,flask等框架,linux,shell腳本等實(shí)操經(jīng)驗(yàn),網(wǎng)站搭建,面試寶典等分享。

所屬的專欄:flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué)
景天的主頁:景天科技苑

終端腳本命令

flask在0.11版本之前都是采用flask-script第三方模塊來實(shí)現(xiàn)終端腳本命令的執(zhí)行,flask在0.11版本以后不再使用這個(gè)模塊了,因?yàn)榇嬖诩嫒菪詥栴},所以內(nèi)置了Click模塊來實(shí)現(xiàn)終端腳本命令的執(zhí)行。

flask1.0時(shí)代的終端命令使用

注意python3.9已不再支持flask1的版本,如果要運(yùn)行flask1,就需要安裝python3.8或以下版本

flask-script模塊的作用可以讓我們通過終端來控制flask項(xiàng)目的運(yùn)行,類似于django的manage.py

官方文檔:https://flask-script.readthedocs.io/en/latest/

安裝命令

conda create -n py38 python=3.8
conda activate py38
pip install -U flask==1.1.4
pip install -U flask-script -i https://pypi.douban.com/simple

集成 Flask-Script到flask應(yīng)用中,創(chuàng)建一個(gè)主應(yīng)用程序,一般我們叫manage.py/run.py/main.py都行。

manage.py,代碼:

from flask import Flas 

app = Flask(__name__)

"""使用flask_script啟動(dòng)項(xiàng)目"""
from flask_script import Manager
manage = Manager(app)

@app.route('/')
def index():
    return 'hello world'

if __name__ == "__main__":
    manager.run()

啟動(dòng)終端腳本的命令:

# 端口和域名不寫,默認(rèn)為127.0.0.1:5000
python manage.py runserver

# 通過-h設(shè)置啟動(dòng)域名,-p設(shè)置啟動(dòng)端口 -d
python manage.py runserver -h0.0.0.0 -p8888     # 關(guān)閉debug模式
python manage.py runserver -h0.0.0.0 -p8888  -d # 開啟debug模式


# 進(jìn)入flask交互終端,在這個(gè)終端下,可以直接調(diào)用flask代碼進(jìn)行測試。
python manage.py shell

安裝flask==1.1.4版本啟動(dòng)項(xiàng)目時(shí),如果出現(xiàn)錯(cuò)誤如下:
from markupsafe import soft_unicode

則找到報(bào)錯(cuò)代碼位置,修改如下:
from markupsafe import soft_str as soft_unicode

自定義終端命令

Flask-Script 還可以為當(dāng)前應(yīng)用程序添加腳本命令

  1. 引入Command命令基類
    from flask_script import Command
  2. 創(chuàng)建命令類必須直接或間接繼承Command,并在內(nèi)部實(shí)現(xiàn)run方法或者_(dá)_call__()方法,
    同時(shí)如果有自定義的其他參數(shù),則必須實(shí)現(xiàn)get_options方法或者option_list屬性來接收參數(shù)
  3. 使用flask_script應(yīng)用對(duì)象manage.add_command對(duì)命令類進(jìn)行注冊(cè),并設(shè)置調(diào)用終端別名。

manage.py,代碼:

from flask import Flask


app = Flask(__name__)

"""使用flask_script管理項(xiàng)目"""
from flask_script import Manager
manager = Manager(app)

from abc import ABC
from flask_script import Command, Option

class PrintCommand(Command, ABC):
    """
    命令的相關(guān)描述: 打印數(shù)據(jù)
    """
    def get_options(self):
        # 必須返回選項(xiàng)
        return (
            # Option('簡寫選項(xiàng)名', '參數(shù)選項(xiàng)名', dest='變量名', type=數(shù)據(jù)類型, default="默認(rèn)值"),
            Option('-h', '--host', dest='host', type=str, default="127.0.0.1"),
            Option('-p', '--port', dest='port', type=int, default=8000),
            Option('-d', '--debug', dest='debug', type=bool, default=False)
        )

    # 也可以使用option_list來替代get_options
    # option_list = (
    #     Option('-h', '--host', dest='host', type=str, default="127.0.0.1"),
    #     Option('-p', '--port', dest='port', type=int, default="7000"),
    #     Option('-d', '--debug', dest='debug', type=bool, default=False)
    # )

    # 沒有flask的應(yīng)用實(shí)例對(duì)象---->app對(duì)象
    # def run(self, host, port, debug):
    #     print("測試命令")
    #     print(f"self.host={host}")
    #     print(f"self.port={port}")
    #     print(f"self.debug={debug}")

    def __call__(self, app, host, port, debug):  # 會(huì)自動(dòng)傳遞當(dāng)前flask實(shí)例對(duì)象進(jìn)來
        print(f"測試命令,{app}")
        print(f"self.host={host}")
        print(f"self.port={port}")
        print(f"self.debug={debug}")


# manage.add_command("終端命令名稱", 命令類)
manager.add_command("print", PrintCommand)  # python manage.py print

@app.route("/")
def index():
    return "ok"

if __name__ == '__main__':
    manager.run()

使用效果:
【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

(flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print -h 0.0.0.0 -p 8000
測試命令
self.host=0.0.0.0
self.port=8000
self.debug=False

(flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print -h 0.0.0.0 -p 8000 -d true
測試命令
self.host=0.0.0.0
self.port=8000
self.debug=True

(flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print -h 0.0.0.0 -d true
測試命令
self.host=0.0.0.0
self.port=8000
self.debug=True

(flask) moluo@ubuntu:~/Desktop/flaskdemo$ python manage.py print --host=0.0.0.0 -debug=true
測試命令
self.host=0.0.0.0
self.port=8000
self.debug=True

flask2.0以后版本的終端命令使用

flask0.11.0版本以后,flask內(nèi)置了一個(gè)Click模塊,這個(gè)模塊是終端命令模塊,可以讓我們直接通過Click的裝飾器,編寫和運(yùn)行一些終端命令。
在flask2.0版本已經(jīng)不能兼容flask-script模塊了,所以需要改成使用Click模塊來運(yùn)行和自定義管理終端命令了。

安裝了flask2.0以后,當(dāng)前項(xiàng)目所在的python環(huán)境就提供了一個(gè)全局的flask命令,這個(gè)flask命令是Click提供的。

要使用Click提供的終端命令flask,必須先在環(huán)境變量中聲明當(dāng)前flask項(xiàng)目的實(shí)例對(duì)象所在的程序啟動(dòng)文件。

例如:manage.py中使用了 app = Flask(__name__),則manage.py就是程序啟動(dòng)文件

使用flask終端命令之前,可以配置2個(gè)環(huán)境變量。

#注意,這樣配置環(huán)境變量,適合mac和linux系統(tǒng),不適合Windows

# 指定入口文件,開發(fā)中入口文件名一般:app.py/run.py/main.py/index.py/manage.py/start.py
export FLASK_APP=manage.py

# 指定項(xiàng)目所在環(huán)境
export FLASK_DEBUG=True   # 開發(fā)環(huán)境,開啟DEBUG模式
# export FLASK_DEBUG=False    # 生產(chǎn)環(huán)境,關(guān)閉DEBUG模式

默認(rèn)情況下,flask命令提供的子命令。

flask routes  # 顯示當(dāng)前項(xiàng)目中所有路由信息
flask run     # 把flask項(xiàng)目運(yùn)行在內(nèi)置的測試服務(wù)器下
#flask run --host=0.0.0.0 --port=5055
flask shell   # 基于項(xiàng)目的應(yīng)用上下文提供終端交互界面,可以進(jìn)行代碼測試。

代碼:

from flask import Flask


app = Flask(__name__)


@app.route("/")
def index():
    return "ok"


if __name__ == '__main__':
    app.run()

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

終端配置

export FLASK_APP=manage.py
export FLASK_DEBUG=True   # 開發(fā)環(huán)境,開啟DEBUG模式

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

查看支持的命令

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

#查看下路由信息

flask routes

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

#進(jìn)入shell,在shell中可以執(zhí)行相關(guān)flask代碼

flask shell

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

#運(yùn)行

flask run     # 把flask項(xiàng)目運(yùn)行在內(nèi)置的測試服務(wù)器下

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

#指定ip和端口運(yùn)行

flask run --host=10.10.0.50 --port=5050

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

Click自定義終端命令

在終端自定義執(zhí)行的命令行參數(shù)

案例剖析

#自定義終端命令需要導(dǎo)入click
import click
from flask import Flask


app = Flask(__name__)

#注冊(cè)commond,自定義一個(gè)跟在flask后面的命令
@app.cli.command("faker")  # 假設(shè)這個(gè)用于生成測試數(shù)據(jù)
#faker后面跟的子命令參數(shù)。每個(gè)子命令名不能一樣
@click.argument("data", type=str, default="user") # 位置參數(shù)
@click.argument("position", type=str, default="mysql") # 位置參數(shù)
#第一個(gè)是參數(shù)簡寫,第二個(gè)是詳細(xì)寫全,第三個(gè)是函數(shù)內(nèi)部調(diào)用的名字,type是類型,default是默認(rèn)值,help是輔助信息
@click.option('-n', '--number', 'number', type=int, default=1, help='生成的數(shù)據(jù)量.')  # 選項(xiàng)參數(shù)
#我們上面自定義的faker,接子命令執(zhí)行后,要實(shí)現(xiàn)的功能,通過下面這個(gè)函數(shù)來定義
def faker_command(data, position, number):
    """
    命令的說明文檔:添加測試信息
    """
    print("添加測試信息")
    print(f"數(shù)據(jù)類型:data={data}")
    print(f"數(shù)據(jù)類型:position={position}")
    print(f"生成數(shù)量:number={number}")


@app.route("/")
def index():
    return "ok"

if __name__ == '__main__':
    app.run()

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

終端運(yùn)行,可以看到我們自定義的faker
【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

flask faker

不寫子命令,會(huì)打印出默認(rèn)值
【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

也可以自定義

flask faker teacher

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

指定選項(xiàng)參數(shù)

flask faker teacher -n200

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

實(shí)戰(zhàn)案例

大家都知道,Django在終端命令行可以實(shí)現(xiàn)創(chuàng)建Django項(xiàng)目,自動(dòng)創(chuàng)建好相關(guān)文件的操作,但是這一功能在flask中是沒有集成進(jìn)去的。
我們通過今天的學(xué)的知識(shí)可以自己來實(shí)現(xiàn)

要求:
flask3.0的終端下,輸入 python manage.py startapp home 則可以在當(dāng)前目錄下創(chuàng)建以下目錄和文件
項(xiàng)目目錄/
└── home
├── views.py
├── models.py
├── documents.py
├── ws.py
├── services.py
├── urls.py
└── tests.py

代碼實(shí)現(xiàn):

import click, os
from flask import Flask


app = Flask(__name__)
# 配置
app.config.update({
    "DEBUG": False
})


@app.cli.command("startapp")
@click.argument("name")
# @click.option('-n', 'name', help='app name')
def startapp(name):
    """生成子模塊或子應(yīng)用"""
    if os.path.isdir(name):
        print(f"當(dāng)前{name}目錄已存在!請(qǐng)先處理完成以后再創(chuàng)建。")
        return

    os.mkdir(name)
    open(f"{name}/views.py", "w")
    open(f"{name}/models.py", "w")
    open(f"{name}/documents.py", "w")
    open(f"{name}/ws.py", "w")
    open(f"{name}/services.py", "w")
    open(f"{name}/urls.py", "w")
    open(f"{name}/test.py", "w")
    print(f"{name}子應(yīng)用創(chuàng)建完成....")


@app.route("/")
def index():
    return "ok"


if __name__ == '__main__':
    app.run()

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

終端調(diào)用:
【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

創(chuàng)建名為home的項(xiàng)目

flask startapp home

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

查看創(chuàng)建的文件
【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

創(chuàng)建名為users的項(xiàng)目:

flask startapp users

【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn),flask框架零基礎(chǔ),進(jìn)階應(yīng)用實(shí)戰(zhàn)教學(xué),python,flask,開發(fā)語言,終端命令運(yùn)行項(xiàng)目

當(dāng)然,也可以運(yùn)用模板,在創(chuàng)建文件時(shí),生成指定的模板,感興趣的朋友試一下吧!

總結(jié)

本文講述了flask1.0和falsk2.0以后的版本在終端腳本命令運(yùn)行項(xiàng)目的方式,在工作中,我們經(jīng)常以這種方式運(yùn)行項(xiàng)目,有用得到的朋友一鍵三連,flask高階應(yīng)用持續(xù)更新中!!!文章來源地址http://www.zghlxwxcb.cn/news/detail-843720.html

到了這里,關(guān)于【python】flask各種版本的項(xiàng)目,終端命令運(yùn)行方式的實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包