• flask中的return、过滤器详解


      之前吧一直学习flask的时候,一直不明白response是怎么产生,今天是明白了。retrun  哎呀,这个地方看着挺小心的东西, 蕴含的能量可不小啊。今天我详细总结总结。

      先来写jinjia2语法,jinjia2还是比较简单的,这是flask中的一个模板,配合着前端来用(巨爽~~)。跟那个jsp里面的语法差不多,python跟java还是挺像的。4

    00x1: return返回  

        用flask创建路由的时候,里面有个return 。先来看下return的效果

        

    @app.route('/test/')
    def test():
        return "hello,world"

        

      可以看到有个response,这里用的是burpsuite,有兴趣的小伙伴,可以百度去搜下。

      return是有参数的,不可以返回字典,列表啦。但是吧,在rerun里面可以看到的是有个状态码是200,这个200,我们是可以修改的,是加在return 后面的。下面来具体演示下

    代码:

    @app.route('/test/')
    def test():
        return  "hello ,world" , 400

     效果:

        return 还有第三个参数,其返回一个字典,这个东西是比较好玩的,我经常在ctf里面见到这种题,这是一个json格式。嘻嘻,更新下。

      

      代码:

    @app.route('/test/')
    def test():
        return  "hello ,world" , 400 , {'hint' : 'xxx.txt'}

      

      总结 return的三个参数  字符串、元组| 状态码 | 响应头信息

    过滤器:

      小知识.....过滤器之前,需要说一下,后端和前端交互数据的时候,不是一直都是前端把数据传给后端,后端经过处理就可以了。其实不是这样,后端也是要向前端传数据的。过滤器就是这样,数据从后端传输到经过过滤器才会传输到前端。

      flask中过滤器用到的还是比较多的,在flask开发web中用到的还是蛮多的。先看到几个用法吧,有一个阅读全文,这是一个省略的地方,这有个阅读全文的地方,这也是一个过滤的地方。比如要显示多少个阅读量,这些都是过滤器完成的地方。

        过滤器:

       过滤器的本质就是函数,用法和Linux中的管道符差不多。都是用 | 。

       基本的过滤器语法:

        

    @app.route('/')
    def index():
        user = {
            'username' : 'xxx',
            'password' : 'avc'  ,
            'email' : 'balala',
            'test' : 'fuck aaa difoashfid,fuck,fuck,fuck.fdsadfafuck',
            'now' : 1221441
        }
        return render_template('index.html' , content = user)

      通过rend_templete中的content传入到前端的index,html中,然后前端的index.html中会有一个。随便添加因为是jinjia2语法。

      

    {{ content.now | abs }}
    

      这样的就是一个简单的过滤器,这个过滤器是绝对值,后端的那个字典,通过content传给前端,想要过滤的地方加上 | 过滤器函数,就可以实现过滤器的效果了。这是一个基本的过滤器函数,还有其他类似的。

      

     

    字符串操作

    • safe:禁用转义              <p>{{ '<em>hello</em>' | safe }}</p> 

    • capitalize:把变量值的首字母转成大写,其余字母转小写        <p>{{ 'hello' | capitalize }}</p>

    • lower:把值转成小写     <p>{{ 'HELLO' | lower }}</p>

    • upper:把值转成大写      <p>{{ 'hello' | upper }}</p>

    • title:把值中的每个单词的首字母都转成大写  <p>{{ 'hello' | title }}</p>

    • reverse:字符串反转     <p>{{ 'olleh' | reverse }}</p>

    • format:格式化输出      <p>{{ '%s is %d' | format('name',17) }}</p>

    • striptags:渲染之前把值中所有的HTML标签都删掉      <p>{{ '<em>hello</em>' | striptags }}</p>

    • truncate: 字符串截断          <p>{{ 'hello every one' | truncate(9)}}</p>

    列表操作

    • first:取第一个元素        <p>{{ [1,2,3,4,5,6] | first }}</p>

    • last:取最后一个元素      <p>{{ [1,2,3,4,5,6] | last }}</p>

    • length:获取列表长度      <p>{{ [1,2,3,4,5,6] | length }}</p>

    • sum:列表求和        <p>{{ [1,2,3,4,5,6] | sum }}</p>

    • sort:列表排序          <p>{{ [6,2,3,1,5,4] | sort }}</p>

     

    那么多过滤器还是不一定能够满足我们的需求的,如果我们需要把一个敏感词给替换掉,那么我们就需要自己写一个过滤器,虽然说可以用replace进行替换,但是在前端页面中怎么用replace替换呢?还是要写一个过滤器。

    下面写一个替换'fuck'的字符串的过滤器。

    @app.template_filter('cut')
    def cut(value):
        new_value = value.replace('fuck' , '')
        return  new_value

    @app.route('/')
    def index():
        user = {
            'username' : 'xxx',
            'password' : 'avc'  ,
            'email' : 'balala',
            'test' : 'fuck aaa difoashfid,fuck,fuck,fuck.fdsadfafuck',
            'now' : 1221441
        }
        return render_template('index.html' , content = user)

      其中app.templete_filter()是一个装饰器,装饰器在前面就已经说过了。()里面是定义的一个过滤器函数的函数名称。比如现在这个是cut,这样利用了一个replace就可以替换掉了。

    {{ content.test  | cut }}
    

      

     效果:

    嗯~~哈哈哈,把那个敏感词汇给替换掉了。

    过滤时间函数,这个函数其实也容易写,就是需要注意的地方多一点。比如要导入datatime,还有一些小细节的问题:

    @app.templete_filter(cal_time)

    def  cal_time():

     -------------------------更新-------------------------------------------------------------------------

      TMD,谷歌的hackbar依旧不能使,还要用火狐的,说实话,谷歌做的页面好看,访问googel也方便,火狐做的页面是真心的丑。吐槽坑一波,不要尝试谷歌里面安装代理软件,还有Hackbar了,一按一个坑,还弄不好。气死我了,在用代理插件的时候,会有那个https的证书的问题。这个坑,即使你导入受访问的根目录权限之后,也是会找不到的,弃坑。hackbar,网上帖子都是巴啦啦,乌拉拉变身一样,就能用了。到我这边又是不能用了,我按照网上大部分人的帖子上面的改disable_xxx 什么注释改为init(),又或者true改成false。我的都不行,跟小魔仙一样,巴啦啦变身--->hackbar的文件遭到损坏..........半年前就没安装好,半年后又是这样。我的天啊.......心碎。。。。

    --------------------------------------不要捉急,我先去歇歇,等你下次来的时候,我就已经更新了----------------------------------------------

  • 相关阅读:
    HDU 4267 A Simple Problem with Integers
    java实现滑动解锁
    java实现滑动解锁
    java实现滑动解锁
    java实现滑动解锁
    java实现排列序数
    Delphi中文件流的使用方法
    基于Delphi7 WebService 在Apache发布及Apache使用说明
    资源文件的编译
    Delphi下IOC 模式的实现(反转模式,即Callback模式)
  • 原文地址:https://www.cnblogs.com/Triangle-security/p/11352268.html
Copyright © 2020-2023  润新知