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的文件遭到損壞..........半年前就沒安裝好,半年后又是這樣。我的天啊.......心碎。。。。

--------------------------------------不要捉急,我先去歇歇,等你下次來的時候,我就已經更新了----------------------------------------------


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM