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

Flask学习日志(五) - Flask扩展_第1张图片
壁纸.jpg

文 / 秦未

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

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

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

1.官方获取扩展包

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

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

Flask学习日志(五) - Flask扩展_第2张图片
网页.png

2.Pycharm获取扩展包

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

Flask学习日志(五) - Flask扩展_第3张图片
动图.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 '

about

' @app.route('/user/') def user(username): return F'

{username}

' @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 '

上传成功!

' 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---

你可能感兴趣的:(Flask学习日志(五) - Flask扩展)