使用 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 获取表单数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Jquery和Flask:如何理解表单提交功能中的'return false' [重复]