无码人妻丰满熟妇奶水区码,成年高潮网址,观看免费干B,欧美日韩深喉

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

前言:

在學(xué)習(xí)Falsk框架的時(shí)候發(fā)現(xiàn)了網(wǎng)上資源比較繁雜,而涉及到工程項(xiàng)目的文件配置和管理也是各有千秋。所以花了點(diǎn)時(shí)間專門整理一個(gè)配置項(xiàng)目工程目錄的文章,本篇文章從最初始化最簡(jiǎn)潔的Flask安裝樣例出發(fā),從零開始編寫代碼和配置文件,旨在幫助本人以及廣大讀者理解項(xiàng)目目錄文件之間的關(guān)系。

那么接下來就讓我們進(jìn)入到flask目錄配置的學(xué)習(xí)中。

首先這里我選擇pycharm進(jìn)行開發(fā),毋庸置疑,pycharm是最好最流行的python IDE,功能強(qiáng)大,方便實(shí)用。借助于使用virtualenv創(chuàng)建好的虛擬環(huán)境,開始創(chuàng)建一個(gè)新的python空項(xiàng)目(這里不選擇直接使用flask框架創(chuàng)建項(xiàng)目)。

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

創(chuàng)建好一個(gè)空項(xiàng)目后,由我們自己手動(dòng)新建各部分所需文件目錄,并編寫原始代碼。在這之前,我們先來了解一下Flask程序的默認(rèn)(初始)結(jié)構(gòu)。

Flask框架默認(rèn)(初始)項(xiàng)目結(jié)構(gòu)

app.pyfrom flask import Flaskapp = Flask(__name__)?@app.route('/')def index(): return 'Hello Flask'??if __name__ == '__main__': app.run()

創(chuàng)建一個(gè)app.py 文件之后,寫下上面的代碼,點(diǎn)擊運(yùn)行。可以得到以下界面。

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

很顯然,程序運(yùn)行成功了。

現(xiàn)在我們來編寫一些配置所需要的代碼。

1.在單一文件中構(gòu)建所有依賴工具

manage.py

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom flask_SESSION import Sessionfrom flask_wtf import CSRFProtect?import redis??app = Flask(__name__)??class BaseConfig(object): """配置信息""" DEBUG = True? SECRET_KEY = "sdsadafafsfsd@$%9"? # 數(shù)據(jù)庫(kù) SQLALCHEMY_DATABASE_URL = "mysql://root:mysql@127.0.0.1:3306/database_name" SQLALCHEMY_TRACK_MODIFICATIONS = True? # redis REDIS_HOST = "127.0.0.1" REDIS_PORT = 6379? # flask_session 配置 SESSION_TYPE = "redis" SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST,port=REDIS_PORT) # 若是上線運(yùn)行,此處可能是另一臺(tái)redis服務(wù)器 session_USE_SIGNER = True # 對(duì)cookie中session_id 進(jìn)行隱藏處理 SESSION_SESSION_LIFETIME = 86400 # session數(shù)據(jù)的有效期,單位 秒??app.config.from_object(Config)?# 數(shù)據(jù)庫(kù)db = SQLAlchemy(app)?# 創(chuàng)建redis連接對(duì)象redis_store = redis.StrictRedis(host=BaseConfig.REDIS_HOST,port=BaseConfig.REDIS_PORT)?# 利用flask-session,將session數(shù)據(jù)保存到redis中Session(app)?# 為flask補(bǔ)充csrf防護(hù)CSRFProtect(app)??@app.route('/')def index(): return 'Hello Flask'??if __name__ == '__main__': app.run()

2.(自定義)創(chuàng)建工程目錄

在實(shí)際生產(chǎn)中,我們將單一配置文件中的依賴工具和功能提取抽離出來,寫到不同的模塊中,便于代碼的管理和復(fù)用

2.1 第一次抽取

(1)第一次的抽取,先用工廠模式將app的創(chuàng)建抽離出來,并分匹配【配置模式】,將【配置模式】作為 類 來傳遞

config.py

# 所有的配置項(xiàng)都放到config.py中# flask的配置項(xiàng)目,名字都是大寫字母?import redis?class BaseConfig(object): DEBUG = True? # 秘鑰 SECRET_KEY = "sdsadafafsfsd@$%9"? # 數(shù)據(jù)庫(kù) SQLALCHEMY_DATABASE_URL = "mysql://root:mysql@127.0.0.1:3306/database_name" SQLALCHEMY_TRACK_MODIFICATIONS = True? # redis REDIS_HOST = "127.0.0.1" REDIS_PORT = 6379? # flask_session 配置 SESSION_TYPE = "redis" SESSION_REDIS = redis.StrictRedis(host=REDIS_HOST,port=REDIS_PORT) # 若是上線運(yùn)行,此處可能是另一臺(tái)redis服務(wù)器 SESSION_USE_SIGNER = True # 對(duì)cookie中session_id 進(jìn)行隱藏處理 SESSION_SESSION_LIFETIME = 86400 # session數(shù)據(jù)的有效期,單位 秒??# 發(fā)行環(huán)境class ProductionConfig(BaseConfig): DEBUG = False??# 開發(fā)環(huán)境class DevelopmentConfig(BaseConfig): DEBUG = True??# 測(cè)試環(huán)境class TestingConfig(BaseConfig): pass??# 配置信息config_map = { 'develop': DevelopmentConfig, 'product': ProductionConfig, 'test': TestingConfig}

(2)第一次抽取后的manage.py 文件還剩下

manage.py

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom flask_session import Sessionfrom flask_wtf import csrfProtectfrom config import config_map?import redis??# 工廠模式def create_app(config_name): """ 創(chuàng)建flask的應(yīng)用對(duì)象 :param config_name: str 配置模式的 模式的名字 ("develop","product") :return: """ app = Flask(__name__)? # 獲取配置模式的名字,獲取配置參數(shù)的類 config_class = config_map.get(config_name) app.config.from_object(config_class)? return app??app = create_app('develop')?# 數(shù)據(jù)庫(kù)db = SQLAlchemy(app)?# 創(chuàng)建redis連接對(duì)象redis_store = redis.StrictRedis(host=Config.REDIS_HOST,port=Config.REDIS_PORT)?# 利用flask-session,將session數(shù)據(jù)保存到redis中Session(app)?# 為flask補(bǔ)充csrf防護(hù)CSRFProtect(app)??@app.route('/')def index(): return 'Hello Flask'??if __name__ == '__main__': app.run()

2.2 第二次抽取

(1)第二次抽取,首先在項(xiàng)目根目錄創(chuàng)建一個(gè)新的 文件夾app,在app文件夾下創(chuàng)建–init–.py、models.py、views.py文件。

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

(2)將工廠模式函數(shù)create_app復(fù)制到–init–.py文件,同時(shí)將 數(shù)據(jù)庫(kù)初始化/實(shí)例化 app應(yīng)用程序的代碼抽離過來,如下:

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

(3)此時(shí)有一個(gè)問題,db = SQLAlchemy(app) 中 app還沒有被創(chuàng)建,當(dāng)然我們可以導(dǎo)入manage模塊來解決這個(gè)問題,如下

import manage# 數(shù)據(jù)庫(kù)db = SQLAlchemy(manage.app)

但這樣很明顯就失去了一開始想要分隔抽離代碼功能的作用,所以這里采用以下方法解決:

先創(chuàng)建SQLAlchemy對(duì)象,但不進(jìn)行賦值,而后在工廠函數(shù)中進(jìn)行賦值。

——init——.py

from flask import Flaskfrom config import config_mapfrom flask_sqlalchemy import SQLAlchemy??# 數(shù)據(jù)庫(kù) 初始化關(guān)聯(lián)appdb = SQLAlchemy()??# 工廠模式def create_app(config_name): """ 創(chuàng)建flask的應(yīng)用對(duì)象 :param config_name: str 配置模式的 模式的名字 ("develop","product") :return: """ app = Flask(__name__)? # 獲取配置模式的名字,獲取配置參數(shù)的類 config_class = config_map.get(config_name) app.config.from_object(config_class)? # db初始化關(guān)聯(lián)app過程 # 使用app初始化db db.init_app(app)? return app

manage.py

from flask_session import Sessionfrom flask_wtf import CSRFProtect?import redis?from app import create_app??app = create_app('develop')?# 創(chuàng)建redis連接對(duì)象redis_store = redis.StrictRedis(host=Config.REDIS_HOST,port=Config.REDIS_PORT)?# 利用flask-session,將session數(shù)據(jù)保存到redis中Session(app)?# 為flask補(bǔ)充csrf防護(hù)CSRFProtect(app)??@app.route('/')def index(): return 'Hello Flask'??if __name__ == '__main__': app.run()

2.3 第三次抽取

(1)這里將redis連接對(duì)象也抽取到–init–.py文件中,和上一個(gè)抽取中的db一樣,其他模塊中的代碼也會(huì)使用到redis,所以這里db、redis不能放在工廠函數(shù)中,否則會(huì)導(dǎo)致其他模塊導(dǎo)包是無法導(dǎo)入。

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

(2)設(shè)置全局變量redis_store = None,然后在工廠函數(shù)中再進(jìn)行初始化。

PythonWeb之Flask框架配置管理(一)(python web flask開發(fā)框架)

2.4 第四次抽取

(1)第四次抽取,將session和csrf兩個(gè)功能同樣抽取到–init–.py文件中,因?yàn)閟ession和csrf是Flask的補(bǔ)充功能,在程序執(zhí)行中只需要初始化一次以修改 flask機(jī)制或引入該功能,初始化對(duì)象后,后續(xù)操作直接在視圖函數(shù)中使用flask自己的全局對(duì)象session和flask_wtf中csrf生成的內(nèi)容就可以了,并不使用Session(app)、CSRFProtect(app)對(duì)象。

因此,將Session(app)、CSRFProtect(app)對(duì)象直接寫在工廠函數(shù)中,創(chuàng)建時(shí)初始化一次就可以了。

manage.py

from app import create_app??app = create_app('develop')???@app.route('/')def index(): return 'Hello Flask'??if __name__ == '__main__': app.run()

–init–.py

from flask import Flaskfrom config import config_mapfrom flask_sqlalchemy import SQLAlchemyfrom flask_session import Sessionfrom flask_wtf import CSRFProtect?import redis?# 數(shù)據(jù)庫(kù) 初始化關(guān)聯(lián)appdb = SQLAlchemy()?# 創(chuàng)建redis連接對(duì)象redis_store = None??# 工廠模式def create_app(config_name): """ 創(chuàng)建flask的應(yīng)用對(duì)象 :param config_name: str 配置模式的 模式的名字 ("develop","product") :return: """ app = Flask(__name__)? # 獲取配置模式的名字,獲取配置參數(shù)的類 config_class = config_map.get(config_name) app.config.from_object(config_class)? # db初始化關(guān)聯(lián)app過程 db.init_app(app)? # 初始化redis工具 global redis_store redis_store = redis.StrictRedis(host=config_class.REDIS_HOST, port=config_class.REDIS_PORT)? # 利用flask-session,將session數(shù)據(jù)保存到redis中 Session(app)? # 為flask補(bǔ)充csrf防護(hù) CSRFProtect(app)? return app

好了,到此將項(xiàng)目目錄文件的一些基本配置完成了。接下來需要引入Flask藍(lán)圖的概念,繼續(xù)進(jìn)行代碼分離,以及一些需要修改的地方,且放到下一篇文章來講。

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。

(0)
上一篇 2022年7月26日 下午5:06
下一篇 2022年7月26日 下午5:20

相關(guān)推薦

  • 需求管理——項(xiàng)目管理的核心(項(xiàng)目管理之需求管理)

    作為產(chǎn)品經(jīng)理,面對(duì)各種需求,我們需要有管理好各項(xiàng)需求,統(tǒng)籌安排的能力。作者總結(jié)了在項(xiàng)目過程中需求管理的一些方法,希望對(duì)你有所幫助。 今天聊一聊需求管理~ 之前有寫過一篇文章叫《需求…

    科研百科 2024年4月25日
    72
  • 寧夏:2025年社區(qū)黨組織和自治組織實(shí)現(xiàn)全覆蓋

    近日,寧夏回族自治區(qū)民政廳聯(lián)合自治區(qū)黨委組織部、住房和城鄉(xiāng)建設(shè)廳、衛(wèi)健委印發(fā)《城市社區(qū)規(guī)范化標(biāo)準(zhǔn)化建設(shè)三年行動(dòng)方案(2023—2025年)》(以下簡(jiǎn)稱《方案》),明確到2025年,…

    科研百科 2023年1月18日
    307
  • 發(fā)改委科研項(xiàng)目申報(bào)指南

    發(fā)改委科研項(xiàng)目申報(bào)指南 隨著國(guó)家經(jīng)濟(jì)的發(fā)展,科研項(xiàng)目的申報(bào)已經(jīng)成為發(fā)改委的重要工作之一。作為國(guó)家 level 1 機(jī)構(gòu),發(fā)改委負(fù)責(zé)國(guó)家發(fā)展全局戰(zhàn)略規(guī)劃和政策制定,同時(shí)也在各類科技創(chuàng)…

    科研百科 2025年3月11日
    6
  • 科研項(xiàng)目管理存在問題及整改措施

    科研項(xiàng)目管理存在問題及整改措施 科研項(xiàng)目管理是確保科研項(xiàng)目成功的關(guān)鍵之一。然而,目前科研項(xiàng)目管理存在一些問題,這些問題可能會(huì)影響科研項(xiàng)目的進(jìn)展和成果。本文將探討這些問題,并提出相應(yīng)…

    科研百科 2024年11月6日
    123
  • 項(xiàng)目研究實(shí)驗(yàn)條件

    項(xiàng)目研究實(shí)驗(yàn)條件 隨著科技的不斷進(jìn)步,人們對(duì)科學(xué)研究的需求也越來越高。在科學(xué)研究中,實(shí)驗(yàn)條件是非常重要的一個(gè)因素,它們決定了實(shí)驗(yàn)結(jié)果的可靠性和有效性。因此,在進(jìn)行任何科學(xué)研究時(shí),都…

    科研百科 2024年11月17日
    5
  • 聚焦人才培養(yǎng) 共商學(xué)科發(fā)展大計(jì)——“新時(shí)代中共黨史黨建人才培養(yǎng)”高端論壇簡(jiǎn)述

    【信息與動(dòng)態(tài)】 作者:潯邑 近日,“新時(shí)代中共黨史黨建人才培養(yǎng)”高端論壇暨中國(guó)人民大學(xué)中共黨史黨建學(xué)院成立大會(huì)在京舉行。中國(guó)人民大學(xué)黨委書記張東剛,國(guó)務(wù)院學(xué)位委員會(huì)辦公室副主任、教…

    科研百科 2023年9月26日
    180
  • 管理施工進(jìn)度的軟件

    管理施工進(jìn)度的軟件 隨著現(xiàn)代建筑行業(yè)的發(fā)展,施工管理已經(jīng)成為了一項(xiàng)非常重要的任務(wù)。如何有效地管理施工進(jìn)度成為了建筑行業(yè)中的一項(xiàng)重要任務(wù)?,F(xiàn)在,有許多軟件可以幫助人們管理施工進(jìn)度。 …

    科研百科 2025年1月11日
    2
  • java超市管理系統(tǒng)項(xiàng)目框架

    Java超市管理系統(tǒng)項(xiàng)目框架 隨著互聯(lián)網(wǎng)的普及,超市已經(jīng)成為了人們生活中不可或缺的一部分。而一個(gè)高效的超市管理系統(tǒng)可以幫助超市管理者更好地管理超市,提高運(yùn)營(yíng)效率。今天,我們將介紹一…

    科研百科 2025年6月6日
    1
  • 科研項(xiàng)目人員費(fèi)用開支

    科研項(xiàng)目人員費(fèi)用開支是科研項(xiàng)目中非常重要的一項(xiàng)支出,因?yàn)樗苯記Q定了項(xiàng)目的進(jìn)度和成果。在預(yù)算中設(shè)置合適的人員費(fèi)用開支是非常重要的,因?yàn)樗苯雨P(guān)系到項(xiàng)目的實(shí)施和成功。本文將探討科研項(xiàng)…

    科研百科 2025年3月13日
    3
  • 四川省省部級(jí)科研項(xiàng)目

    四川省省部級(jí)科研項(xiàng)目 近年來,四川省在科技創(chuàng)新方面取得了顯著進(jìn)展。為了推動(dòng)科技創(chuàng)新,四川省政府高度重視科研項(xiàng)目的管理和實(shí)施。在此背景下,我們開展了多項(xiàng)省部級(jí)科研項(xiàng)目,旨在推動(dòng)科學(xué)技…

    科研百科 2025年5月6日
    3
国产欧美三级福利午夜在线| 欧美久久一3一区三区| 一品道亚洲视频在线免费观看| 一区二区三区……综合影院| 大尺度无码视频网站| 欧美內射porn| 大香蕉伊人免费看| 久久久久久久久久久久久9999| 人人操在线免费看| 91黄旧版本在线播放| 亚洲自拍偷拍自拍| 日本免费一区2| 日韩性情片一区二区三区| 国产精品性感美女教师自慰| 韩 中文字幕 无码| 性欧美videos高清hd4k| 亚洲日韩熟女吃瓜| 亚洲最新3级黄片中文字幕| 欧区一区二区三区人妻| 一区二区爽歪歪| 亚汌AV图库导航| 欧美福利三区| 国产拍偷拍一区二区| 日本美女视频一区二区三区免费看| 国产久久免费在线| 中文字幕三级色情免费看处女| 中文字幕一区二区三区区| 日韩无码中文字幕网| 超碰在线超碰91| 午夜精品一区二区三区在线视频| 最新中文字幕一页二页三页| 亚洲影院欧美| 亚洲 av男人天堂| 国产精品亚洲五月天| 久久精品中文字幕A区| 亚洲无码麻豆91| 2019亚州精品露脸| 一区二区三区国产麻豆| 欧亚成人在线视频| 另类老熟妇X| 精品久久91蜜桃卡一区二区 |