我有一个简单的 Web 应用程序,可以使用以下代码向选定的受访者发送消息(使用 Twilio API):
app.py
client = Client(account_sid, auth_token)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/send_sms',methods=['POST'])
def send_sms():
message = request.form['message']
selected_groups = request.form.getlist('groups')
selected_secretariat_member = request.form.get('selected_secretariat_member')
# more code ...
return redirect(url_for('index'))
templates/index.html
<div class="container mt-5">
<h1 class="text-center">Send Mass SMS</h1>
<form method="post" action="{{ url_for('send_sms') }}">
<div class="form-group">
<label for="message">Message</label>
<textarea class="form-control" id="message" name="message" rows="3" required></textarea>
</div>
<div class="form-group">
<label>Select Groups</label>
<!-- Groups -->
</div>
<button type="submit" class="btn btn-primary">Send SMS</button>
</form>
</div>
我相信我使用的是 VS Code 实时服务器扩展提供的实时服务器。当我点击提交表单时,我收到了 405 错误。当我查看开发人员工具中的网络部分时,响应标头有一行说明允许哪些方法以及仅允许
GET, HEAD, OPTIONS
我尝试了人们提出的其他解决方案,例如:
-
将以下内容添加到
web.config
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
-
在
index()
函数之前定义方法
@app.route('/', methods=['GET','POST'])
def index():
return render_template('index.html')
-
检查处理程序映射以查看
POST
是否是其允许的动词的一部分 -
添加
GET
到send_sms()
app.route('/send_sms',methods=['GET','POST'])
def send_sms():
的方法中我真的很困惑要做什么。我曾经在学习 HTML Forms 和 php 时遇到过这个错误,但我没有理会它,因为我没有专用的 Web 服务器。然而,这似乎是一般方法的问题。感谢您的帮助。
你遇到的问题是 VS Code Live Server 扩展的限制。它主要用于提供静态内容,并且不支持像 POST 这样的 HTTP 方法来进行动态路由。这就是为什么你只看到
GET
、
HEAD
和
OPTIONS
方法被允许。
为了处理
POST
请求并使你的 Flask 应用按预期工作,你需要一个合适的 Web 服务器来运行你的 Flask 应用,而不是 Live Server。
以下是一些可以与 Flask 配合使用的流行选择:
- Flask 的内置开发服务器:
这是开始使用最简单的方法。你可以在终端中使用以下命令运行你的应用:
bash
flask --app app run
确保将
app
替换为你的 Flask 应用实例所在的 Python 文件名或包名(如果有)。
- Gunicorn:
Gunicorn 是一个 Python WSGI HTTP 服务器,更适合生产环境。你可以使用 pip 安装它:
bash
pip install gunicorn
然后,你可以使用以下命令运行你的应用:
bash
gunicorn app:app
同样,将
app:app
替换为你的 Flask 应用实例所在的 Python 文件名或包名以及应用实例的名称。
- Waitress:
Waitress 是另一个 Python WSGI 服务器,以其在 Windows 上的可靠性而闻名。你可以使用 pip 安装它:
bash
pip install waitress
然后,你可以使用以下命令运行你的应用:
bash
waitress-serve --port=8000 app:app
在使用上述任何一种方法启动 Flask 应用后,你应该可以使用 POST 请求访问
/send_sms
路由,而不会遇到 405 方法不允许错误。
请记住,VS Code Live Server 非常适合开发静态网站,但对于涉及服务器端处理(如 Flask 应用)的内容,你需要一个合适的 Web 服务器来处理路由和 HTTP 方法。
标签:python,forms,flask,methods From: 78832050