【问题标题】:How can the following issue be resolved in flask? "Method Not Allowed The method is not allowed for the requested URL"如何在烧瓶中解决以下问题? \"Method Not Allowed 请求的 URL 不允许该方法\"
【发布时间】:2022-11-02 22:21:33
【问题描述】:

这是代码

import os
import redis
import flask
import json
import urllib.parse
from flask import Flask, Response, request, render_template, abort
from flask_cors import CORS, cross_origin
#from flask.ext.cors import CORS, cross_origin

app = Flask(__name__)
app.config['CORS_HEADERS'] = 'Content-Type'
redis_handle = redis.Redis('localhost')
requiredFields = ("id", "title", "name")  # fields required for user object


@app.route('/')
@cross_origin()
def hello():
    return 'Hello World!'


@app.route('/users/<user_id>', methods=['GET'])
@cross_origin()
def get_user(user_id):
    response = {}
    # user_id = request.args.get("id")
    user = redis_handle.get(user_id)
    if not user:
        response["msg"] = "no user found"
        return Response(json.dumps(response), status=404, mimetype="application/json")
    return user


@app.route('/users', methods=['POST'])
@cross_origin()
def save_user():
    data = request.get_json(force=True)
    response = {}
    if all(field in data for field in requiredFields):
        redis_handle.set(data["id"], json.dumps(data))
        return Response(status=201)
    else:
        missing_key = str([val for val in requiredFields if val not in dict(data).keys()])
        response["msg"] = "required key " + missing_key + " not found"
        return Response(json.dumps(response), status=400)


@app.route('/users/<user_id>', methods=['DELETE'])
@cross_origin()
def delete_user(user_id):
    response = {}
    resp = redis_handle.delete(user_id)
    if resp == 0:
        response["msg"] = "no such entity found"
        status = 404
    else:
        response["msg"] = "Delete op is successful"
        status = 200
    return Response(json.dumps(response), status=status)


@app.route('/clear', methods=['GET'])
@cross_origin()
def clear_data():
    redis_handle.flushall()
    return "ok!"


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

据我所知,我什至也包含了 method = "POST" 但仍然不知道出了什么问题。

我尝试使用 redis、python、flask 创建一个小型 crud 应用程序,但没有遇到这个问题。有人能告诉我我在哪里做错了吗?

【问题讨论】:

  • @app.route('/users', methods=['POST', 'GET']) 将解决问题。
  • @fenderogi 不完全是。这将返回一个 400 状态页面

标签: python flask redis crud flask-restful


【解决方案1】:

浏览器不会在 &lt;form&gt; 条目或 AJAX 函数之外运行 POST 方法。因此,您正在运行“不允许”的 GET。

不清楚您的预期,但要查看所有用户,您需要编辑您的路线以首先添加 GET 方法,然后如果是这样,则返回返回/呈现所有用户的响应,而不是检查请求 json 正文,这不会t 存在于 GET 请求中

如果您只想获取一个用户,请编辑 url 以包含用户 ID

【讨论】:

    猜你喜欢
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2021-03-15
    • 2020-08-27
    • 1970-01-01
    • 2023-03-09
    • 2020-07-30
    相关资源
    最近更新 更多