我想创造一个服务器上生成一个整数数组,并发送给客户端一个简单的应用程序。 下面是一些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>
问题是,该代码使用HTTP GET方法(瓶默认使用未指定时)。 我想,而不是使用HTTP POST方法,因为它是用于发送数据显然更安全。 (来源: http://blog.teamtreehouse.com/the-definitive-guide-to-get-vs-post )
要做到这一点,我试图改变:
@app.route('/')
至:
@app.route('/', methods=['POST'])
不幸的是,我得到了一个错误:“不允许的方法:该方法是不允许的请求的URL”
问:我应该如何解决这个问题?
[注:从我目前了解,我需要创建一个表单使用POST方法,但我不认为我的网站需要一个形式,因为客户端不发送数据到服务器。 (在我的网站,服务器将数据发送到客户端。)
[注:这是类似的一个问题,我以前问过,但不一样的,因为我在这里问一个特定的错误消息,不许方法。]
你不应该使用在这种情况下POST方法。 POST方法是指,当你在服务器上改变数据使用。 在这种情况下,你只能检索数据,所以得到的是在这里使用的更合适的方法。
在任何情况下,如果你决定使用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方法 - 这就是为什么你会得到不允许的方法应对。
$ 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。
当您使用浏览器访问页面时,浏览器总是发出“GET”请求给服务器......所以,当你已经改变了方法为“POST”,烧瓶找不到“/”和返回任何GET路线“不允许的方法”错误,因为“/”没有允许GET了当浏览器请求该页面。
你不应该使用POST这一点。 POST只从提交表单或AJAX数据时使用。