Flask學習日志(五) - Flask擴展

壁紙.jpg

文 / 秦未

眾所周知队寇,F(xiàn)lask是自由的吩屹,它極易擴展啸驯,擁有非常多的第三方擴展包,這些第三方擴展包主要特點就是簡單祟峦,即學即用罚斗,這也是我們學習Flask的主要原因之一。

當我們想要實現(xiàn)某項功能之前宅楞,網(wǎng)上很有可能已經(jīng)有別人寫好的插件了针姿,我們不需要重復造輪子,而更應該將時間花費在我們想要實現(xiàn)的功能上厌衙。

那么這些第三方擴展包我們從哪里獲取呢距淫?

1.官方獲取擴展包

地址:http://flask.pocoo.org/extensions/

在這個網(wǎng)頁我們能獲取官方團隊驗證的第三方擴展包,并且也提供詳細的文檔供我們查詢婶希。

網(wǎng)頁.png

2.Pycharm獲取擴展包

我們也可以通過Pycharm獲取擴展包榕暇,按照下圖所示步驟去做,我們就可以下載安裝擴展包喻杈。

動圖.gif

3.備份與恢復環(huán)境

我們?nèi)绻惭b了這些擴展包彤枢,那么我們?nèi)绾卧诓煌到y(tǒng),不同環(huán)境中同樣也擁有相同版本的第三方擴展包(庫)呢筒饰?

這里我們就利用一個pip的命令就可以了:

pip freeze > requirements.txt

恢復:

pip install -r requirements.txt

4.使用類似Django的manage管理工具

好的缴啡,現(xiàn)在我們需要一個管理工具,管理我們的項目:

pip install flask-script

當然在Pycharm中安裝也是很方便的瓷们。

接下來使用它业栅,我們在app.py中導入它:

from flask_script import Manager
# 這里app已經(jīng)實例化了
manager = Manager(app)

然后項目啟動那里改成:

if __name__ == '__main__':
    # app.run(debug=True)
    manager.run()

為避免不清楚具體情況,我將所有代碼貼出:

# /app/app.py
# -*- coding:utf-8 -*-
import datetime
from flask import Flask, render_template, request, redirect, url_for, make_response
from os import path
from flask_script import Manager
from werkzeug.routing import BaseConverter
from werkzeug.utils import secure_filename


class RegexConverter(BaseConverter):
    def __init__(self, url_map, *items):
        super(RegexConverter, self).__init__(url_map)
        self.regex = items[0]


app = Flask(__name__)
app.url_map.converters['regex'] = RegexConverter

manager = Manager(app)

@app.route('/')
def index():
    # 獲取cookies
    # username = request.cookies.get('username')
    # 封裝render_template
    response = make_response(render_template('blog/index.html', **{
        'text': 'Hello, World',
    }))
    # 設置cookies--參數(shù)1:名稱谬晕,參數(shù)2:值碘裕,expires指定過期時間;(記得導入datetime模塊攒钳!)
    outdate = datetime.datetime.today() + datetime.timedelta(days=30)
    response.set_cookie('username', 'admin', expires=outdate)
    return response


@app.route('/about')
def about():
    return '<h1>about</h1>'


@app.route('/user/<username>')
def user(username):
    return F'<h1>{username}</h1>'


@app.route('/login/', methods=['GET', 'POST'])
def login():
    # 判斷請求方式
    if request.method == 'POST':
        # POST方式時數(shù)據(jù)是在form里面
        username = request.form.get('username')
        password = request.form.get('password')
        # 獲取文件
        my_file = request.files.get('file')
        # 獲取當前路徑
        basepath = path.abspath(path.dirname(__file__))
        # 將路徑連接
        upload_path = path.join(basepath, 'static/uploads/')
        # 保存文件并將文件名獲取封裝
        my_file.save(upload_path + secure_filename(my_file.filename))
        # 跳轉(zhuǎn)upload函數(shù)
        return redirect(url_for('upload'))
    else:
        # GET方式時數(shù)據(jù)是在args里面
        username = request.args.get('username')
        password = request.args.get('password')
    return render_template('blog/login.html', method='GET')


@app.route('/upload')
def upload():
    return '<h1>上傳成功帮孔!</h1>'

if __name__ == '__main__':
    # app.run(debug=True)
    manager.run()

終端中運行:

python app.py runserver

也可以在Pycharm中配置一下啟動命令:

在 run 選項的下拉箭頭,選擇 edit configure 選項夕玩,然后在 script parameters 里添加 runserver 即可你弦。

地址還是一樣的:http://127.0.0.1:5000

有時候我們還會遇到一個問題,就是如果我們修改一下代碼就要手動重啟一次服務燎孟,那簡直太浪費我們的時間了禽作,有這樣一個庫可以解決我們的問題,它叫l(wèi)ivereload(可理解為即時刷新)揩页,還是一樣的先安裝它:

pip install livereload

使用它的方法其實也很簡單旷偿,我們先在app.py中建立一個函數(shù):

@manager.command
def dev():
    # 導入包
    from livereload import Server
    # 封裝
    live_server = Server(app.wsgi_app)
    # 設置監(jiān)測文件路徑
    live_server.watch('**/*.*')
    # 同時讓它刷新
    live_server.serve(open_url=True)

啟動它,終端輸入:

python app.py dev

這樣它就會默認監(jiān)測項目文件變動爆侣,并即時刷新萍程。

---end---

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市兔仰,隨后出現(xiàn)的幾起案子茫负,更是在濱河造成了極大的恐慌,老刑警劉巖乎赴,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍法,死亡現(xiàn)場離奇詭異,居然都是意外死亡榕吼,警方通過查閱死者的電腦和手機饿序,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羹蚣,“玉大人原探,你說我怎么就攤上這事⊥缢兀” “怎么了咽弦?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胁出。 經(jīng)常有香客問我离唬,道長,這世上最難降的妖魔是什么划鸽? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任输莺,我火速辦了婚禮,結(jié)果婚禮上裸诽,老公的妹妹穿的比我還像新娘嫂用。我一直安慰自己,他們只是感情好丈冬,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布嘱函。 她就那樣靜靜地躺著,像睡著了一般埂蕊。 火紅的嫁衣襯著肌膚如雪往弓。 梳的紋絲不亂的頭發(fā)上疏唾,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音函似,去河邊找鬼槐脏。 笑死,一個胖子當著我的面吹牛撇寞,可吹牛的內(nèi)容都是我干的顿天。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蔑担,長吁一口氣:“原來是場噩夢啊……” “哼牌废!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啤握,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤鸟缕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后排抬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叁扫,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年畜埋,在試婚紗的時候發(fā)現(xiàn)自己被綠了莫绣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悠鞍,死狀恐怖对室,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咖祭,我是刑警寧澤掩宜,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站么翰,受9級特大地震影響牺汤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浩嫌,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一檐迟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧码耐,春花似錦追迟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春廓块,著一層夾襖步出監(jiān)牢的瞬間厢绝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工带猴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昔汉,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓浓利,卻偏偏與公主長得像挤庇,于是被迫代替她去往敵國和親钞速。 傳聞我的和親對象是個殘疾皇子贷掖,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容