flask.request.form["xxx"]、flask.request.form.get("xxx")和之间有什么区别flask.request.args.get("xxx")?
我有这个问题,因为我正在使用flask-login 来处理身份验证。
特别是在下面的代码中(取自flask-login github页面),我不明白为什么 with req.form.get("email"), email 是None,而 with req.form["email"], email 没有值。这是代码。
@login_manager.request_loader
def request_loader(req):
email = req.form.get('email')
if email not in users:
return
user = User()
user.id = email
# DO NOT ever store passwords in plaintext and always compare password
# hashes using constant-time comparison!
user.is_authenticated = req.form['pw'] == users[email]['pw']
return user
Run Code Online (Sandbox Code Playgroud) 所以,我在Flask中有以下路线:
@app.route("/menu-card/<google_place_id>", methods=['GET'])
Run Code Online (Sandbox Code Playgroud)
在导航到http://127.0.0.1:5000/menu-card/ChIJAxXhIUMUrjsR5QOqVsQjCCI时,我得到了正确的回复.
但是,我尝试更改URL模式,如下所示:
@app.route("/menu-card?id=<google_place_id>", methods=['GET'])
Run Code Online (Sandbox Code Playgroud)
在导航到http://127.0.0.1:5000/menu-card?id=ChIJAxXhIUMUrjsR5QOqVsQjCCI时,我现在收到404错误.我究竟做错了什么 ?
我想使用 Ajax 调用服务器端函数。
我在这篇文章中找到了一个简单的 PHP 示例。我认为如果我们可以包含这个非常相同的示例,但对于 Python / Flask MVC 框架,社区会有所改善。
这是View端的ajax代码,叫做test.html:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
function create () {
$.ajax({
url:"test1", //the page containing python script
type: "post", //request type,
dataType: 'json',
data: {registration: "success", name: "xyz", email: "abc@gmail.com"},
success:function(result){
console.log(result.abc);
}
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
这将是控制器上的 Python 代码:
@app.route('/test', methods=['GET','POST'])
def test():
return render_template("test.html", brand = brand)
@app.route('/test1', methods=['GET','POST'])
def test1():
if registration == "success":
return json.dump({"abc":'successfuly registered'});
Run Code Online (Sandbox Code Playgroud) flask_restful.reqparse已被弃用(https://flask-restful.readthedocs.io/en/latest/reqparse.html):
Flask-RESTful 的整个请求解析器部分将被删除,并将被有关如何与其他更好地执行输入/输出内容的包(例如marshmallow)集成的文档所取代。这意味着它将一直保持到 2.0,但认为它已被弃用。别担心,如果您现在有使用它的代码并希望继续这样做,它不会很快消失。
我已经简要地看了棉花糖,如果我想替换reqparse.RequestParser(). 我们会写什么而不是像下面这样的东西:
from flask import Flask, request, Response
from flask_restful import reqparse
@app.route('/', methods=['GET'])
def my_api() -> Response:
parser = reqparse.RequestParser()
parser.add_argument('username', type=str, required=True)
args = parser.parse_args()
return {'message': 'cool'}, 200
Run Code Online (Sandbox Code Playgroud)
(在阅读了更多文档半小时后......)
RequestParserMultiDict request.values默认查看(显然是查询参数,然后根据/sf/answers/1166506351/形成正文参数)。那么我们只需要以request.values某种方式验证数据。
这是来自 Marshmallow 的一些相关代码的片段。似乎比reqparse以下更复杂:首先创建一个模式类,然后实例化它,然后让它加载请求 JSON。我宁愿不必为每个 API 端点编写单独的类。是否有类似于 的更轻量级的东西reqparse,您可以在定义端点的函数中编写所有类型的参数验证信息?
from flask import Flask, request, Response
from flask_restful import reqparse
from marshmallow import (
Schema,
fields,
validate,
pre_load, …Run Code Online (Sandbox Code Playgroud) 我正在将文件上传到我的烧瓶后端,但我不知道如何访问多部分表单中的参数值。
我可以通过这样做轻松访问上传的文件,file = request.files['file']但无法找到获取参数值的方法。
我尝试了以下但没有任何运气:
print(request.data['share'])
print(request.data['title'])
print(request.get('share'))
print(request.get('title'))
Run Code Online (Sandbox Code Playgroud) 我需要从表单中获取数据.
我使用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>
Run Code Online (Sandbox Code Playgroud)
然后我需要从输入字段中获取数据name="json".
这是我的视图功能:
@general.route("/microsoft/", methods=["GET", "POST"])
@csrf.exempt
def microsoft():
form = cgi.FieldStorage()
name = form['json'].value
return name
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
builtins.KeyError KeyError: 'json'
帮我从表格中获取数据.
我使用POST方法提交表单.表单有一个输入字段:time.
我试着检查是否存在参数:
if 'time' in request.data:
pass
Run Code Online (Sandbox Code Playgroud)
但它不起作用
我是 React 和 Flask API 系统的新手。我创建了一个网站,允许用户通过搜索栏进行搜索。\n我希望能够通过 POST 请求将查询从 React 搜索栏发送到 Flask API。\n但是我得到的是空字符串或 ImmutableDict
\n\n反应代码
\n\nfunction handlePostQuery(query){\n\n if (query != "") {\n axios.post(\'http://localhost:5000/api/query\', query)\n .then(function(response){\n console.log(response);\n //Perform action based on response\n })\n .catch(function(error){\n console.log(error);\n //Perform action based on error\n });\n } else {\n alert("The search query cannot be empty")\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n烧瓶代码
\n\n@app.route(\'/api/query\', methods = [\'POST\'])\ndef get_query_from_react():\n data = request.form\n print(data)\n return data\nRun Code Online (Sandbox Code Playgroud)\n\n按照这个答案:\n获取 Flask 请求中收到的数据
\n\n我尝试了所有这些,但我总是得到(在 Flask 中)一个空字符串,除非我使用request.form它返回类似的内容:
ImmutableMultiDict([(\'what I type …
Model.save()在backbone.js中,将模型数据作为POST发送到服务器,作为JSON编码的字符串.它只是一个字符串而不是variable=jsonString普通的POST请求.所以我无法在Flask中访问它request.form.get('variable').我应该在哪里编辑代码?Flask可以处理这样的请求吗?Backbone.js可以像普通的post请求一样发送数据而不是JSON编码的字符串吗?
如果需要,可以提供更多信息.
flask ×9
python ×6
json ×2
python-2.7 ×2
ajax ×1
backbone.js ×1
flask-login ×1
javascript ×1
reactjs ×1
rest ×1
routing ×1
werkzeug ×1