使用 Flask 获取表单数据 [重复]

Posted

技术标签:

【中文标题】使用 Flask 获取表单数据 [重复]【英文标题】:Getting Form data with Flask [duplicate] 【发布时间】:2013-11-17 07:36:39 【问题描述】:

当从 Flask 中获取数据时,我可以在不使用 Jinja 模板的情况下以某种方式将 html 元素及其值绑定到一个对象。

或者我必须通过手动 HTTP Post 发送数据吗?

【问题讨论】:

我不确定你在问什么,但你看过flask-wtf吗?它将出色的wtforms library 与 Flask 集成在一起,让表单处理变得不那么繁琐。 是的,我有,但您似乎必须为此使用 Jinja 模板 您要解决的实际问题是什么? 我注册了我的网站。我希望能够通过 POST 请求或某种类型的 html 数据绑定来发送该数据。但是我不想使用 Jinja,因为它不能很好地与 bootstrap 配合使用 Jinja 与 bootstrap 无关 - 你能用一个突出你所面临问题的例子来更新你的问题吗? 【参考方案1】:

我认为您真正要问的是“给定一个客户端 javascript 对象,我如何序列化它以便我可以轻松访问服务器端的数据”。如果这是您的问题,有两种方法:

    您在答案中提供的方式,将您的对象序列化为 JSON 并将其作为您的 POST 请求的正文提交:

    @app.route("/user", methods=("POST",))
    def save_user():
        data = request.get_json()
        # ... etc. ...
    

    在客户端使用FormData

    var yourUser = 
        firstname: "Joe",
        lastname: "Smith",
        email: "joe@smith.com",
        password: "12345"
    ;
    
    var formData = new FormData();
    Object.keys(yourUser).forEach(function(key) 
        formData.append(key, yourUser[key]);
    );
    // Post formData back to your controller using XHR
    

    结合服务器端正常的request.form访问:

    @app.route("/user", methods=("POST",))
    def save_user():
        data = request.form
        # ... etc. ...
    

【讨论】:

您好,我尝试通过ajax(blog.teamtreehouse.com/uploading-files-ajax) 上传文件,然后尝试获取表单中的数据。我必须在 ajax 中将 processData 设置为 false。但是, ImmutableMultiDict 仅包含 ImmutableMultiDict([('------WebKitFormBoundaryoQPpntEvtoR8exZF\r\nContent-Disposition: form-data; name', u'"paper_json"\r\n\r\n.......\r\n------WebKitFormBoundaryoQPpntEvtoR8exZF--\r\n')]) 键和值是混乱的。 request.files 什么也不返回。你有什么主意吗?谢谢。【参考方案2】:

用这个解决问题

@app.route('/post/user',methods=['POST','GET'])
def saveuser():
 data = json.loads(request.data)
 firstname = data['firstname']
 newuser = User(firstname,lastname,email,password)

 db.session.add(newuser)
 db.session.commit()

首先我从 request.data 中获取 json 字符串,然后将其解析为 dict 并将其保存到我的数据库中

【讨论】:

仅供参考,request 有一个 get_json 方法(或 json 0.10 之前的属性),它将为您提供等效于 json.loads 的方法。所以你可以这样做:data = request.get_json().

以上是关于使用 Flask 获取表单数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法打印从 Flask 后端发送的表单中的元素 [重复]

Jquery和Flask:如何理解表单提交功能中的'return false' [重复]

flask学习笔记(-Web 表单)

TypeError Ajax Post - Flask Python [重复]

flask 使用宏渲染表单(包含错误信息)

通过 POST 从 React 获取数据到 Flask [重复]