美文网首页
Flask学习日志(五) - Flask扩展

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

作者: 煮茶忘放糖 | 来源:发表于2017-08-05 21:58 被阅读72次
    壁纸.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---

    相关文章

      网友评论

          本文标题:Flask学习日志(五) - Flask扩展

          本文链接:https://www.haomeiwen.com/subject/kuhwlxtx.html