Python 如何在 Flask 中获取表单数据?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/42154602/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 21:18:55  来源:igfitidea点击:

How to get form data in Flask?

javascriptpythonjsonflask

提问by Grey Li

I need get data from form.

我需要从表单中获取数据。

I use JavaScript to create form:

我使用 JavaScript 创建表单:

<script>   
function checkAuth() {
                var user = ADAL.getCachedUser();
                if (user) {
                    var form = $('<form style="position: absolute; width: 0; height: 0; opacity: 0; display: none; visibility: hidden;" method="POST" action= "{{ url_for("general.microsoft") }}">');

                    form.append('<input type="hidden" name="token" value="' + ADAL.getCachedToken(ADAL.config.clientId) + '">');
                    form.append('<input type="hidden" name="json" value="' + encodeURIComponent(JSON.stringify(user)) + '">');
                    $("body").append(form);
                    form.submit();
                }
            }
</script> 

then I need to get data from the input field which name="json".

然后我需要从输入字段中获取数据name="json"

Here is my view function:

这是我的视图函数:

@general.route("/microsoft/", methods=["GET", "POST"])
@csrf.exempt
def microsoft():
    form = cgi.FieldStorage()
    name = form['json'].value
    return name

But I get an error:

但我收到一个错误:

builtins.KeyError KeyError: 'json'

builtins.KeyError KeyError: 'json'

Help me get data from form.

帮我从表单中获取数据。

回答by Grey Li

Get form data from Flask's request object:

从 Flask 的请求对象中获取表单数据:

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    data = request.form['input_name']
    ...

You can also set a default value to avoid 400 error, like this:

您还可以设置默认值以避免 400 错误,如下所示:

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    default_name = '0'
    data = request.form.get('input_name', default_name)
    ...