Как исправить {"message": "Метод не разрешен для запрошенного URL." } для моего метода сообщения? - PullRequest
1 голос
/ 09 апреля 2019

Это первый раз, когда я создаю API для модификации Android. Я изменил этот код в соответствии с фрагментом, который я получил в Интернете. Основной функциональностью метода post является получение заданных параметров и их сохранение в базе данных sqlite3.

Моя схема следующих двух таблиц:

sqlite> .schema spending
CREATE TABLE spending(
   ID INTEGER PRIMARY KEY AUTOINCREMENT,
   date           TEXT      ,
   reason         TEXT      ,
   amount         INTEGER
);

CREATE TABLE receiving(
   ID INTEGER PRIMARY KEY AUTOINCREMENT,
   date           TEXT      ,
   from_reason           TEXT      ,
   amount         INTEGER
);
from flask import Flask, request
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from flask import jsonify

db_connect = create_engine('sqlite:///api.db')
app = Flask(__name__)
api = Api(app)

class AddSpending(Resource):
    def add_spending(self):
        try:
            _json = request.json
            _date = _json['date']
            _reason = _json['reason']
            _amount = _json['amount']
            # validate the received values
            if _date and _reason and _amount and request.method == 'POST':
                #do not save password as a plain text
                #_hashed_password = generate_password_hash(_password)
                # save edits
                sql = "INSERT INTO spending(date, reason, amount) VALUES(%s, %s, %d)"
                data = (_date, _reason, _amount)
                #conn = mysql.connect()
                conn = db_connect.connect()
                cursor = db_connect.cursor()
                conn.cursor()
                conn.execute(sql, data)
                conn.commit()
                #resp = jsonify('Spending added successfully!')
                #resp.status_code = 200
                return
            else:
                return 404
        except Exception as e:
            print(e)
        finally:
            cursor.close()        
            conn.close()

api.add_resource(AddSpending, '/spending_up',methods=['POST']) # Route_3

Когда пользователь передает данные через этот параметр. Данные должны храниться в базе данных

1 Ответ

1 голос
/ 09 апреля 2019

Думаю, проблема в том, что вы назвали свой метод как add_spending и должны называться post

изменить def add_spending(self) на def post(self)

код вашего API должен выглядеть так, без методов = 'POST'

class AddSpending(Resource):
    def post(self):
        try:
            _json = request.json
            _date = _json['date']
            _reason = _json['reason']
            _amount = _json['amount']
            # validate the received values
            if _date and _reason and _amount and request.method == 'POST':
                #do not save password as a plain text
                #_hashed_password = generate_password_hash(_password)
                # save edits
                sql = "INSERT INTO spending(date, reason, amount) VALUES(%s, %s, %d)"
                data = (_date, _reason, _amount)
                #conn = mysql.connect()
                conn = db_connect.connect()
                cursor = db_connect.cursor()
                conn.cursor()
                conn.execute(sql, data)
                conn.commit()
                #resp = jsonify('Spending added successfully!')
                #resp.status_code = 200
                return
            else:
                return 404
        except Exception as e:
            print(e)
        finally:
            cursor.close()        
            conn.close()

api.add_resource(AddSpending, '/spending_up') # Route_3

UPDATE

Я только что попробовал с кодом, похожим на ваш, и работал

enter image description here

ДРУГОЕ ОБНОВЛЕНИЕ

код вашего репо

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...