簡體   English   中英

在Python(Flask)中將GET更改為POST

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM