亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Django和Flask怎么獲取訪問來源

發布時間:2021-04-30 15:31:11 來源:億速云 閱讀:302 作者:Leah 欄目:開發技術

使用Django和Flask怎么獲取訪問來源?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Flask

request.referrer  # 來路
request.headers.get('User-Agent')  # 請求頭

Django

request.META['HTTP_REFERER']  # 來路
request.META.get("HTTP_USER_AGENT")  # 請求頭

補充:flask 重定向到上一個頁面,referrer、next參數 --

>重定向會上一個頁面

在某些場景下,我們需要在用戶訪問某個url后重定向會上一個頁面,比如用戶點擊某個需要登錄才能訪問的連接,這時程序會重定向到登錄頁面,當用戶登錄后比較合理的行為是重定向到用戶登錄前瀏覽的頁面。

下面的例中,在foo和bar視圖中生成連接,鏈接過去后,沒有重定向會上一個頁面

@app.route('/foo')
def foo():
return '<h2>Foo page </h2><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 '<h2>Bar page</h2><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 = '<h2>Hello, %s</h2>' % name
return response
if __name__ == '__main__':
app.run(debug = True)

結果:

訪問127.0.0.1:5000/foo或者127.0.0.1:5000/bar后,頁面出現連接,點擊鏈接后,進入hello頁面,之后停留在了hello頁面

使用Django和Flask怎么獲取訪問來源

點擊鏈接后重定向到了hello頁面

使用Django和Flask怎么獲取訪問來源

我們的目的是在鏈接后,返回原來的頁面

重定向會上一個頁面,關鍵是獲取上一個頁面的URL。

獲取上一個頁面的URL有兩種方法:

HTTP referrer

HTTP referrer是一個用來記錄請求發源地址的HTTP首部字段(HTTP_REFERER),即訪問來源。當用戶在某個站點點擊鏈接,瀏覽器想新鏈接所在的服務器發起請求,請求的數據中包含的HTTP_REFERER字段記錄了用戶所在的原站點URL。

在flask中,referer的值可以通過請求對象的referrer屬性獲取,即request.referrer

修改do_something視圖函數:

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

在bar頁面上再次點擊鏈接

使用Django和Flask怎么獲取訪問來源

有的時候,referrer字段可能是空值,比如用戶直接在瀏覽器地址欄輸入URL或者因為防火墻或者瀏覽器設置自動清除或修改referer字段,我們需要添加一個備選項:

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

查詢參數next

除了自動從referrer獲取,另一種更常見的方式是在URL中手動加入包含當前頁面URL的查詢參數,這個查詢參數一般命名為next

在bar視圖中的鏈接do_something對應的視圖添加next參數(在/do_someghing后加參數)

def bar():
#print dir(request)
print "request.full_path:",request.full_path
#print "request.url:",request.url
return '<h2>Bar page</h2><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'))

使用Django和Flask怎么獲取訪問來源

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

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

為了覆蓋更全面,可以將查詢參數next和referrer兩種方式結合起來使用:

先獲取next參數,如果為空就嘗試獲取referer,如果仍然為空,就重定向到默認的hello視圖

因為在不同視圖執行這部分操作的代碼相同,我們可以創建一個通用的函數redirect_back()函數

在do_something視圖中調用這個函數

@app.route('/bar')
def bar():
print "request.full_path:",request.full_path
return '<h2>Bar page</h2><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)

使用Django和Flask怎么獲取訪問來源

關于使用Django和Flask怎么獲取訪問來源問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

葫芦岛市| 武宁县| 潼南县| 广州市| 广水市| 呼伦贝尔市| 黔东| 保康县| 扶余县| 容城县| 兴文县| 西藏| 新余市| 凤翔县| 栾城县| 寻乌县| 湖州市| 丹巴县| 剑川县| 桃园县| 恭城| 三都| 台南市| 申扎县| 巫山县| 揭西县| 龙山县| 包头市| 昌宁县| 淮阳县| 穆棱市| 泾阳县| 进贤县| 太白县| 太仓市| 上思县| 五原县| 沅江市| 红河县| 吐鲁番市| 大余县|