【问题标题】:Trouble with Flask and POST/GETFlask 和 POST/GET 的问题
【发布时间】:2016-07-23 09:24:12
【问题描述】:

所以我有以下 app.py 文件,我试图通过该文件处理一个发布请求,该请求基本上将读取名字、姓氏、用户名和密码,然后将其存储在 mongodb 中,但这是为了以后。截至目前,我在接收 post/get 请求时遇到了问题。

当我尝试使用邮递员向 localhost:5000/register 提交数据时,即使是我尝试运行的小型 sn-p 也会给我一个错误的请求错误。

任何帮助将不胜感激。

from flask import *
#from pymongo import MongoClient
#import json
app = Flask(__name__)

# main interface
@app.route("/")
def main():
    return render_template('index.html')

# Register Interface
@app.route('/register/', methods = ['GET'])
def register():
    #collection = db['userdb']
    firstname = request.form['firstname']
    lastname = request.form['lastname']
    username = request.form['username']
    password = request.form['password']
    #postData = { 'firstname': firstname, 'lastname': lastname,'username':username,'password':password}
    #json = json.dumps(postData)
    #try:
        #status = db.userdb.insert_one(postData).insert_id
    #except:
        #status = 'This user is already registerd'
    return 'This data works'

if __name__ == "__main__":
    app.run()

【问题讨论】:

    标签: python post flask get


    【解决方案1】:

    您确实需要将“POST”方法添加到路由装饰器,但您需要多一步。使用 if 语句使视图忽略 request.form 分配:

    from flask import *
    #from pymongo import MongoClient
    #import json
    app = Flask(__name__)
    
    # main interface
    @app.route("/")
    def main():
        return 'go to <a href="/register/">register</a>'
    
    # Register Interface
    @app.route('/register/', methods = ['GET','POST'])
    def register():
        #collection = db['userdb']
        if request.method == 'POST':
            firstname = request.form['firstname']
            lastname = request.form['lastname']
            username = request.form['username']
            password = request.form['password']
            #postData = { 'firstname': firstname, 'lastname': lastname,'username':username,'password':password}
    
    
        return 'This data works'
    
    if __name__ == "__main__":
        app.run(debug=True)
    

    这是同时使用 GET 和 POST 的视图中的常见模式。另请注意,我已将 debug=True 作为参数添加到 app.run。这将使您的代码更容易调试。

    【讨论】:

    • 这非常有效。真的非常感谢您的精彩回答。我对python相当陌生,所以不知道我必须这样做。谢谢。 :D
    【解决方案2】:
    @app.route('/register/', methods = ['GET'])
    

    上面的装饰器意味着处理程序只会被映射到 GET 请求。

    @app.route('/register/', methods = ['GET', 'POST'])
    

    尝试一下,你应该会很好。

    【讨论】:

    • 哎呀,感谢 T. Arboreus 接住了那个丢失的部分。
    猜你喜欢
    • 2015-05-02
    • 2015-09-13
    • 1970-01-01
    • 2017-05-22
    • 2021-06-25
    • 2021-05-15
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多