2017-03-21 136 views
2

我有一個小燒瓶應用程序,並在我的html頁面我有這樣的聯繫:如何重置/清理要求ARGS

<a href="/manage_items?delete=item_1"> Delete </a> 

我的瓶的應用程序處理請求如下:

@app.route('/manage_items', methods=['GET', 'POST']) 
def manage_items(): 
    delete_action = request.args.get("delete", None) 
    if delete_action is not None: 
     print("Deleting {} ".format(delete_action)) # Do something 
    return render_template('manage_items.html') 

我的問題是,當render_template後返回的頁面,在我的網址我看到了老刪除操作,是這樣的:

http://my-address/manage_items?delete=item_1 

如果我點擊刷新,它會嘗試再次刪除對象。這是一種不需要的行爲。我如何重置/清理老參數瓶的請求?

+0

一個想法可能是使用'重定向'。 –

+3

切勿使用鏈接來修改數據庫,特別是使用刪除操作。 Google抓取該網址時會發生什麼? –

+0

@DanielRoseman你是絕對正確的,謝謝你的提示,我會重新考慮這個結構。 – DarioB

回答

2

您可以使用一個redirect

from flask import redirect 

# ... 

@app.route('/manage_items', methods=['GET', 'POST']) 
def manage_items(): 
    delete_action = request.args.get("delete", None) 
    if delete_action is not None: 
     print("Deleting {} ".format(delete_action)) # Do something 
     # redirecting to the *same page*, but without parameters 
     return redirect(request.path,code=302) 
    return render_template('manage_items.html')

所以在這裏,而不是提供渲染模板,你返回一個重定向請求,那麼瀏覽器就會讀取/manage_items的頁面,但沒有參數。

儘管如此,作爲@DanielRoseman says,它通常是而不是是一個好主意,它在URL中編碼具有副作用的請求。抓取工具與Google的抓取工具一樣,通常會分析您的網頁,並且每網址訪問。這意味着爬蟲將在這種情況下意外刪除對象。你最好使用POST。