Flask学习日志(五) - Flask扩展

壁纸.jpg

文 / 秦未

众所周知,Flask是自由的,它极易扩展,拥有非常多的第三方扩展包,这些第三方扩展包主要特点就是简单,即学即用,这也是我们学习Flask的主要原因之一。

当我们想要实现某项功能之前,网上很有可能已经有别人写好的插件了,我们不需要重复造轮子,而更应该将时间花费在我们想要实现的功能上。

那么这些第三方扩展包我们从哪里获取呢?

1.官方获取扩展包

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

在这个网页我们能获取官方团队验证的第三方扩展包,并且也提供详细的文档供我们查询。

网页.png

2.Pycharm获取扩展包

我们也可以通过Pycharm获取扩展包,按照下图所示步骤去做,我们就可以下载安装扩展包。

动图.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---

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容