当前位置: 首页 > 知识库问答 >
问题:

在同一个烧瓶视图中处理GET和POST

俞学
2023-03-14

当我键入请求时。表单[“name”],例如,要从POST提交的表单中检索名称,我还必须编写一个类似于请求的单独分支。类型获取[“名称”]?如果我想支持这两种方法,我需要为所有POST和GET请求编写单独的语句吗?

@app.route("/register", methods=["GET", "POST"])
def register():
    """Register user."""

我的问题与使用python和Flask获取请求变量的值密切相关。

共有3个答案

鱼渝
2023-03-14

您可以通过调用validate_on_submit()来处理“POST”方法,以检查表单是否使用有效数据提交,否则默认情况下,您的函数将响应GET请求。您的功能如下所示:

@app.route("/register", methods=["GET", "POST"])
def register():
    """Register user."""
    form = SomeForm() 
    # treat POST request 
    if form.validate_on_submit():
       # do something ... 
       # return redirect ... 


    # else response to GET request
    # return render_template... 
阎建德
2023-03-14

下面是一个例子,在这个例子中,您可以很容易地找到使用POST、GET方法的方法,并使用同样的方法添加其他curd操作。

#libraries to include

import os
from flask import request, jsonify
from app import app, mongo
import logger
ROOT_PATH = os.environ.get('ROOT_PATH')
@app.route('/get/questions/', methods=['GET', 'POST','DELETE', 'PATCH'])
def question():
# request.args is to get urls arguments 


    if request.method == 'GET':
        start = request.args.get('start', default=0, type=int)
        limit_url = request.args.get('limit', default=20, type=int)
        questions = mongo.db.questions.find().limit(limit_url).skip(start);
        data = [doc for doc in questions]
        return jsonify(isError= False,
                    message= "Success",
                    statusCode= 200,
                    data= data), 200

    # request.form to get form parameter

    if request.method == 'POST':
        average_time = request.form.get('average_time')
        choices = request.form.get('choices')
        created_by = request.form.get('created_by')
        difficulty_level = request.form.get('difficulty_level')
        question = request.form.get('question')
        topics = request.form.get('topics')

        ##Do something like insert in DB or Render somewhere etc. it's up to you....... :)
时修贤
2023-03-14

您可以使用请求来区分实际的方法。方法

我假设您想:

  • 使用GETmethod
  • 如果使用POST

因此,您的案例与docs:Flask Quickstart-HTTP方法中描述的案例类似

import flask
app = flask.Flask('your_flask_env')

@app.route('/register', methods=['GET', 'POST'])
def register():
    if flask.request.method == 'POST':
        username = flask.request.values.get('user') # Your form's
        password = flask.request.values.get('pass') # input names
        your_register_routine(username, password)
    else:
        # You probably don't have args at this route with GET
        # method, but if you do, you can access them like so:
        yourarg = flask.request.args.get('argname')
        your_register_template_rendering(yourarg)
 类似资料:
  • 问题内容: 例如,当我键入要从POST提交的表单中检索名称时,是否还必须编写一个类似于以下内容的单独分支?如果我想同时支持这两种方法,是否需要为所有POST和所有GET请求编写单独的语句? 问题答案: 你可以使用区分实际方法。 我假设你要: 使用GET方法触发路线时渲染模板 读取表单输入并注册用户(如果通过以下方式触发了路线) POST 因此,你的案例类似于文档中所述的案例:Flask Quick

  • 问题内容: 这是我的视图功能 Ajax发布请求的代码 在视图中,当我尝试打印请求对象时,得到以下数据 但是如果我尝试去做 我得到“无” 有人可以告诉我如何解决这个问题吗? 问题答案: 您将内容类型设置为,但正在发送数据。 设置正确的内容类型: 或更妙的是,通过完全省略键将其保留为默认值。

  • 我已经用flask在python上制作了一个restapi(端口:5000),我正在从一个网站(端口:80)发出get和post请求。我收到了cors错误,所以我尝试在RESTAPI中为站点创建一个响应头。但是我得到了导入错误: 我已经下载了烧瓶cors模块并升级它,并确保它是在正确的路径,但它仍然不工作。 API代码:

  • 我正在建立一个小网站,我已经在SQLAlChemy中拥有了我所有的模型。该网站将发布一些离线计算的信息。只有结果将被发布到一个精简的数据库,即它包含结果,而不是原始数据,但网站需要查询结果。 我将使用Flask,因为我的模型已经用Python驱动了(通过SWIG在C中进行了一些繁重的工作),我不想使用Django。 我敢肯定,以前有人问过这个问题,通常没有太多理由的咒语是“使用炼金术”。问题是为什

  • 问题内容: Flask中是否可以将响应发送给客户端,然后继续进行某些处理?我要完成一些簿记任务,但是我不想让客户等待。 请注意,这些实际上是我想做的非常快的事情,因此在这里实际上不适合创建新线程或使用队列。(这些快速的操作之一实际上是在作业队列中添加一些内容。) 问题答案: 可悲的是,将响应返回给客户端后,拆卸回调不执行: 卷曲时,您会注意到在显示响应之前有2s的延迟,而不是卷曲立即结束,然后在2

  • 我正在使用flask-RESTful开发API,并且对Flask的jsonify函数有问题。我正在使用flask-marshmlet进行JSON序列化。下面是一个非常简化的代码片段: 在本地,endpoint将返回具有键“data”和“error”的json;但是,当在Linux服务器上运行时,它会返回一个包含列表和在没有“data”和“error”键的情况下返回的结果。 我已经确定这种不一致是由