最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Django和Flask獲取訪(fǎng)問(wèn)來(lái)源referrer

 更新時(shí)間:2021年04月23日 10:33:58   作者:彭世瑜  
這篇文章主要介紹了使用Django和Flask獲取訪(fǎng)問(wèn)來(lái)源referrer,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

Flask

request.referrer  # 來(lái)路
request.headers.get('User-Agent')  # 請(qǐng)求頭

Django

request.META['HTTP_REFERER']  # 來(lái)路
request.META.get("HTTP_USER_AGENT")  # 請(qǐng)求頭

補(bǔ)充:flask 重定向到上一個(gè)頁(yè)面,referrer、next參數(shù) --

>重定向會(huì)上一個(gè)頁(yè)面

在某些場(chǎng)景下,我們需要在用戶(hù)訪(fǎng)問(wèn)某個(gè)url后重定向會(huì)上一個(gè)頁(yè)面,比如用戶(hù)點(diǎn)擊某個(gè)需要登錄才能訪(fǎng)問(wèn)的連接,這時(shí)程序會(huì)重定向到登錄頁(yè)面,當(dāng)用戶(hù)登錄后比較合理的行為是重定向到用戶(hù)登錄前瀏覽的頁(yè)面。

下面的例中,在foo和bar視圖中生成連接,鏈接過(guò)去后,沒(méi)有重定向會(huì)上一個(gè)頁(yè)面

@app.route('/foo')
def foo():
return '<h1>Foo page </h1><a href="%s" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Do something</a>' %url_for('do_something')
@app.route('/bar')
def bar():
return '<h1>Bar page</h1><a href="%s" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Do something </a>' % url_for('do_something')
@app.route('/do_something')
def do_something():
return redirect(url_for('hello'))
@app.route('/hello')
def hello():
name = request.args.get('name')
if name is None:
name = request.cookies.get('name','xiaxiaoxu')#從cookie中獲取name值
response = '<h1>Hello, %s</h1>' % name
return response
if __name__ == '__main__':
app.run(debug = True)

結(jié)果:

訪(fǎng)問(wèn)127.0.0.1:5000/foo或者127.0.0.1:5000/bar后,頁(yè)面出現(xiàn)連接,點(diǎn)擊鏈接后,進(jìn)入hello頁(yè)面,之后停留在了hello頁(yè)面

點(diǎn)擊鏈接后重定向到了hello頁(yè)面

我們的目的是在鏈接后,返回原來(lái)的頁(yè)面

重定向會(huì)上一個(gè)頁(yè)面,關(guān)鍵是獲取上一個(gè)頁(yè)面的URL。

獲取上一個(gè)頁(yè)面的URL有兩種方法:

HTTP referrer

HTTP referrer是一個(gè)用來(lái)記錄請(qǐng)求發(fā)源地址的HTTP首部字段(HTTP_REFERER),即訪(fǎng)問(wèn)來(lái)源。當(dāng)用戶(hù)在某個(gè)站點(diǎn)點(diǎn)擊鏈接,瀏覽器想新鏈接所在的服務(wù)器發(fā)起請(qǐng)求,請(qǐng)求的數(shù)據(jù)中包含的HTTP_REFERER字段記錄了用戶(hù)所在的原站點(diǎn)URL。

在flask中,referer的值可以通過(guò)請(qǐng)求對(duì)象的referrer屬性獲取,即request.referrer

修改do_something視圖函數(shù):

@app.route('/do_something')
def do_something():
return redirect(request.referrer)

在bar頁(yè)面上再次點(diǎn)擊鏈接

有的時(shí)候,referrer字段可能是空值,比如用戶(hù)直接在瀏覽器地址欄輸入U(xiǎn)RL或者因?yàn)榉阑饓蛘邽g覽器設(shè)置自動(dòng)清除或修改referer字段,我們需要添加一個(gè)備選項(xiàng):

return redirect(request.referrer or url_for('hello'))

查詢(xún)參數(shù)next

除了自動(dòng)從referrer獲取,另一種更常見(jiàn)的方式是在URL中手動(dòng)加入包含當(dāng)前頁(yè)面URL的查詢(xún)參數(shù),這個(gè)查詢(xún)參數(shù)一般命名為next

在bar視圖中的鏈接do_something對(duì)應(yīng)的視圖添加next參數(shù)(在/do_someghing后加參數(shù))

def bar():
#print dir(request)
print "request.full_path:",request.full_path
#print "request.url:",request.url
return '<h1>Bar page</h1><a href="%s" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Do something and redirect </a>' % url_for('do_something', next = request.full_path)
@app.route('/do_something')
def do_something():
return redirect(request.args.get('next'))

為了避免next參數(shù)為空的情況,也可以加備選項(xiàng),如果為空就重定向到hello視圖

return redirect(request.args.get('next', url_for('hello')))

為了覆蓋更全面,可以將查詢(xún)參數(shù)next和referrer兩種方式結(jié)合起來(lái)使用:

先獲取next參數(shù),如果為空就嘗試獲取referer,如果仍然為空,就重定向到默認(rèn)的hello視圖

因?yàn)樵诓煌晥D執(zhí)行這部分操作的代碼相同,我們可以創(chuàng)建一個(gè)通用的函數(shù)redirect_back()函數(shù)

在do_something視圖中調(diào)用這個(gè)函數(shù)

@app.route('/bar')
def bar():
print "request.full_path:",request.full_path
return '<h1>Bar page</h1><a href="%s" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow" >Do something and redirect </a>' % url_for('do_something', next = request.full_path)
def redirect_back(default = 'hello',**kwargs):
for target in request.args.get('next'),request.referrer:
if target:
return redirect(target)
return redirect(url_for(default,**kwargs))
@app.route('/do_something_and_redirect')
def do_something():
return redirect_back()
if __name__ == '__main__':
app.run(debug = True)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Pygame如何使用精靈和碰撞檢測(cè)

    Pygame如何使用精靈和碰撞檢測(cè)

    本文主要介紹了Pygame如何使用精靈和碰撞檢測(cè),它們能夠幫助我們跟蹤屏幕上移動(dòng)的大量圖像。我們還會(huì)了解如何檢測(cè)兩個(gè)圖像相互重疊或者碰撞的方法。
    2021-11-11
  • Python 獲得命令行參數(shù)的方法(推薦)

    Python 獲得命令行參數(shù)的方法(推薦)

    本篇將介紹python中sys, getopt模塊處理命令行參數(shù)的方法,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-01-01
  • 詳解Python 定時(shí)框架 Apscheduler原理及安裝過(guò)程

    詳解Python 定時(shí)框架 Apscheduler原理及安裝過(guò)程

    Apscheduler是一個(gè)非常強(qiáng)大且易用的類(lèi)庫(kù),可以方便我們快速的搭建一些強(qiáng)大的定時(shí)任務(wù)或者定時(shí)監(jiān)控類(lèi)的調(diào)度系統(tǒng),這篇文章主要介紹了Python 定時(shí)框架 Apscheduler ,需要的朋友可以參考下
    2019-06-06
  • 在Python的Flask框架中實(shí)現(xiàn)全文搜索功能

    在Python的Flask框架中實(shí)現(xiàn)全文搜索功能

    這篇文章主要介紹了在Python的Flask框架中實(shí)現(xiàn)全文搜索功能,這個(gè)基本的web功能實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單,需要的朋友可以參考下
    2015-04-04
  • python3.9和pycharm的安裝教程并創(chuàng)建簡(jiǎn)單項(xiàng)目的步驟

    python3.9和pycharm的安裝教程并創(chuàng)建簡(jiǎn)單項(xiàng)目的步驟

    這篇文章主要介紹了python3.9和pycharm的安裝教程并創(chuàng)建簡(jiǎn)單項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python實(shí)現(xiàn)水仙花數(shù)實(shí)例講解

    python實(shí)現(xiàn)水仙花數(shù)實(shí)例講解

    這篇文章主要介紹了python實(shí)現(xiàn)水仙花數(shù)實(shí)例講解,有正在學(xué)習(xí)python的同學(xué)可以跟著小編一起來(lái)學(xué)習(xí)下水仙花數(shù)怎么用python計(jì)算吧
    2021-03-03
  • python爬蟲(chóng)利用代理池更換IP的方法步驟

    python爬蟲(chóng)利用代理池更換IP的方法步驟

    這篇文章主要介紹了python爬蟲(chóng)利用代理池更換IP的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • python django生成遷移文件的實(shí)例

    python django生成遷移文件的實(shí)例

    今天小編就為大家分享一篇python django生成遷移文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • 關(guān)于Python中jieba庫(kù)的使用

    關(guān)于Python中jieba庫(kù)的使用

    這篇文章主要介紹了關(guān)于Python中jieba庫(kù)的使用,jieba (“結(jié)巴”) 是 Python 中一個(gè)重要的第三方中文分詞函數(shù)庫(kù),除了分詞,jieba 還提供增加自定義中文單詞的功能,需要的朋友可以參考下
    2023-04-04
  • 詳解Python中while無(wú)限迭代循環(huán)方法

    詳解Python中while無(wú)限迭代循環(huán)方法

    Python 有 while 語(yǔ)句和 for 語(yǔ)句作為循環(huán)處理。雖然 for 語(yǔ)句具有一定數(shù)量的進(jìn)程,但 while 語(yǔ)句是直到滿(mǎn)足條件類(lèi)型的循環(huán)進(jìn)程。本文將詳解while無(wú)限迭代循環(huán)方法,需要的可以了解一下
    2022-04-04

最新評(píng)論

徐闻县| 定南县| 松原市| 龙门县| 临夏县| 新巴尔虎左旗| 云林县| 广德县| 芜湖市| 南和县| 军事| 依安县| 九台市| 金塔县| 呈贡县| 茌平县| 如东县| 元朗区| 江孜县| 余干县| 延安市| 宁都县| 丹巴县| 东丰县| 南通市| 韶关市| 达孜县| 措勤县| 昌黎县| 酉阳| 融水| 丰宁| 肃宁县| 栾城县| 庆阳市| 修文县| 开江县| 长兴县| 栾川县| 奈曼旗| 南华县|