Flask學習日誌(五) - Flask擴充套件

weixin_34208283發表於2017-08-05
3980526-04f1870db880b546.jpg
桌布.jpg

文 / 秦未

眾所周知,Flask是自由的,它極易擴充套件,擁有非常多的第三方擴充套件包,這些第三方擴充套件包主要特點就是簡單,即學即用,這也是我們學習Flask的主要原因之一。

當我們想要實現某項功能之前,網上很有可能已經有別人寫好的外掛了,我們不需要重複造輪子,而更應該將時間花費在我們想要實現的功能上。

那麼這些第三方擴充套件包我們從哪裡獲取呢?

1.官方獲取擴充套件包

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

在這個網頁我們能獲取官方團隊驗證的第三方擴充套件包,並且也提供詳細的文件供我們查詢。

3980526-4b3954a602634d7b.png
網頁.png

2.Pycharm獲取擴充套件包

我們也可以通過Pycharm獲取擴充套件包,按照下圖所示步驟去做,我們就可以下載安裝擴充套件包。

3980526-4da7bbdec8676233.gif
動圖.gif

3.備份與恢復環境

我們如果安裝了這些擴充套件包,那麼我們如何在不同系統,不同環境中同樣也擁有相同版本的第三方擴充套件包(庫)呢?

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

pip freeze > requirements.txt

恢復:

pip install -r requirements.txt

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

好的,現在我們需要一個管理工具,管理我們的專案:

pip install flask-script

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

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

from flask_script import Manager
# 這裡app已經例項化了
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--引數1:名稱,引數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方式時資料是在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))
        # 跳轉upload函式
        return redirect(url_for('upload'))
    else:
        # GET方式時資料是在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

有時候我們還會遇到一個問題,就是如果我們修改一下程式碼就要手動重啟一次服務,那簡直太浪費我們的時間了,有這樣一個庫可以解決我們的問題,它叫livereload(可理解為即時重新整理),還是一樣的先安裝它:

pip install livereload

使用它的方法其實也很簡單,我們先在app.py中建立一個函式:

@manager.command
def dev():
    # 匯入包
    from livereload import Server
    # 封裝
    live_server = Server(app.wsgi_app)
    # 設定監測檔案路徑
    live_server.watch('**/*.*')
    # 同時讓它重新整理
    live_server.serve(open_url=True)

啟動它,終端輸入:

python app.py dev

這樣它就會預設監測專案檔案變動,並即時重新整理。

---end---

相關文章