[英]Changing GET to POST in Python (Flask)
我正在嘗試創建一個簡單的應用程序,其中在服務器上生成整數數組並將其發送給客戶端。 這是app.py中的一些示例(工作)代碼:
from flask import Flask, render_template, request, url_for
import random
app = Flask(__name__)
@app.route('/')
def form():
s_abc = [random.random() for _ in range(40)]
return render_template('abc.html', s_abc=s_abc)
if __name__ == '__main__':
app.run(debug=True)
這是abc.html的(有效)代碼段:
<div>
{{s_abc}}
</div>
問題是,此代碼使用GET HTTP方法(當未指定時,Flask默認使用該方法)。 我想改用POST HTTP方法,因為它顯然更安全地發送數據。 (來源: http : //blog.teamtreehouse.com/the-definitive-guide-to-get-vs-post )
為此,我嘗試更改:
@app.route('/')
至:
@app.route('/', methods=['POST'])
不幸的是,我得到一個錯誤:“不允許使用方法:請求的URL不允許使用該方法。”
問題:我該如何解決?
[注意:據我目前的了解,我需要創建一個表單來使用POST方法,但是我認為我的網站不需要表單,因為客戶端沒有向服務器發送數據。 (在我的網站上,服務器正在向客戶端發送數據。)]
[注意:這與我之前詢問的問題類似,但不相同,因為在這里我詢問的是特定的錯誤消息,方法不允許。
當您使用瀏覽器訪問頁面時,瀏覽器總是向服務器發送“ GET”請求...因此,當您將方法更改為“ POST”時,flask找不到“ /”的任何GET路由並返回“方法不允許”錯誤,因為當瀏覽器要求該頁面時,“ /”不再允許GET。
您不應該為此使用POST。 POST僅在從表單或Ajax提交數據時使用。
在這種情況下,您不應使用POST方法。 POST方法用於在服務器上更改數據時使用。 在這種情況下,您僅要檢索數據,因此GET是在此處使用的更合適的方法。
無論如何,如果您決定使用POST,則您的代碼實際上是有效的。 如果使用POST請求訪問端點,則可以看到以下內容:
$ curl -X POST http://127.0.0.1:5000/
<div>
[0.03464541692036849, 0.5588700799957625, 0.4702806873145451, 0.7525198710149907, 0.0674801622743858, 0.28229897849445273, 0.17400190415782735, 0.48911931330821357, 0.8033543541248421, 0.16335301905982258, 0.3307436416488905, 0.11670066397858725, 0.552907551276049, 0.6699689958218984, 0.7444295210533091, 0.8258885497774587, 0.8656500198078877, 0.6826827672886756, 0.27219907080455874, 0.9053285546116574, 0.8328655798090894, 0.2323223157770763, 0.9775485685217323, 0.34887389370958166, 0.17092511319368353, 0.20875570398480459, 0.6744092445507751, 0.6176283706166301, 0.05070680888843082, 0.3441890248079591, 0.17701427714228501, 0.115329649057473, 0.325114272097177, 0.19386610624431766, 0.18892384889766745, 0.511139418514318, 0.019931284111035397, 0.5240369332606203, 0.8936272011794374, 0.9665936114223397]
</div>
如果僅在瀏覽器中訪問URL,則實際上將發送GET請求,並且您已經修改了代碼以專門僅允許POST方法-這就是為什么得到Method Not Allowed響應的原因。
$ curl -X GET http://127.0.0.1:5000/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>
最好的解決方案是在這種情況下使用GET。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.