对于IntegerField形式,Flask中不允许使用方法

2024-04-19 10:48:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在Flask中的窗体上设置整型字段验证,但一直得到“Method Not Allowed”。我看不出我的路线有什么问题?你知道吗

我的主要文件是:

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import IntegerField

# from perfect_numbers import classify

app = Flask(__name__)
app.config['SECRET_KEY'] = 'MySecretKey'

# num = 12
# Classify = classify(num)

class PerfectForm(FlaskForm):
    number = IntegerField(4)

@app.route('/', methods=['POST'])
def form():
    form = PerfectForm()
    return render_template('index.html', form = form)

if __name__ == '__main__':
    app.run(debug=True)

那我有个标准布局.html文件:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>PERFECT App</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
  </head>
  <body>
    {% block body %}{% endblock %}
  </body>
</html>

还有我的索引.html是:

{% extends 'layout.html' %}

{% block body %}
  <h1>PERFECT NUMBERS</h1>
  <p>This is a basic Flask App to illustrate Aliquot Sums and Perfect Numbers</p>

  <p>Input a number to check if it is abundant, perfect, or deficient</p>
  <form action="{{ url_for('/') }}" method="POST">
    {{ form.csrf_token }}
    {{ form.number }}
  </form>
  <!-- {{ num }} is {{ classify }} -->
{% endblock %}

Tags: fromhttpsimportformcomappflaskhtml
1条回答
网友
1楼 · 发布于 2024-04-19 10:48:25

首先,将app.route()签名改为

@app.route('/', methods=['POST', 'GET'])

你必须填写表格并提交,你的应用程序才能收到POST请求。当您第一次在浏览器上加载页面时,从技术上讲,您向flask发送一个GET请求,然后它返回页面。你知道吗

要单独处理POST请求,请执行以下操作:

@app.route('/', methods=['POST', 'GET'])
def form():
    if request.method == 'POST':
        # Do something with request (access form elements with request.get(key))
        return 'Somehing here'
    form = PerfectForm()
    return render_template('index.html', form = form)

相关问题 更多 >