503

Flask 学习笔记01

一、URL传参

一开始编写Flask网页开发时,有时候一个路由函数同时需要被几个页面访问,一开始的做法是在路由函数头部用多个URL路径,如下:

@test.route('/index', methods=['POST', 'GET'])
@test.route('/index/<int:status>')
@test.route('/index/<int:status>/<int:sort_type>')
@login_required
def test(status=0, sort_type=0):
    pass

以上做法如果页面不是很多就还好,如果十几二十个的话,那就太长了,不过这种写法,所有的变量都在URL中,且函数中得事先声明才行,否则会报错,函数中如果想识别到底我们访问时哪个页面直接判断某些参数是否存在即可。后面发现其实我们可以直接用路径跳转的方式进行访问该函数,只不过与上面那种写法不同的是,该方法采用GET请求方式访问,例如:

@test.route('/index', methods=['POST', 'GET'])
@login_required
def test():
    status = request.args.get('status')
    sort_type = request.args.get('sort_type')
    pass

上面这种方法明显跟第一种不一样,不过这种写法也能传多个仓库,也是通过访问页面链接,在函数里用request获取参数。访问链接格式如下:

    http://www.test.com?a=1&b=2&c=3

在URL长度允许的情况下,这种格式可以传多个参数,且第一个用问号(?)连接并赋值,后面用与(&)连接并赋值。

二、前端用js导出csv数据(没有保存到服务器)

    <a id="test" onclick="clickDownload(this)" download="test.csv" href="#">导出CSV</a>
    <script type="text/javascript">
        function clickDownload(aLink){
        var html = ''
        html += '数据01'
        html += ','
        html += '数据02'
        html += '\n'
        var str = "第一列数据,第二列数据\n"+html;
        str =  encodeURIComponent(str);
        aLink.href = "data:text/csv;charset=utf-8,\ufeff"+str;
        }
    </script>

三、Flask网页防止过于频繁退出登录

LoginManager 对象的session_protection 属性可以设为None、’basic’ 或’strong’,以提供不同的安全等级防止用户会话遭篡改。设为’strong’ 时,Flask-Login 会记录客户端IP地址和浏览器的用户代理信息,如果发现异动就登出用户,例如:

    from flask_login import LoginManager
    login_manager = LoginManager()
    #设置为basic防止过于频繁退出
    login_manager.session_protection = 'basic'
    #设置默认登录的视图
    login_manager.login_view = 'auth.login'

发表评论

邮箱地址不会被公开。 必填项已用*标注