2016-11-02 2 views
0

Je continue d'obtenir une erreur sur l'URL lorsque j'essaie d'implémenter POST dans mon API. Je continue d'obtenir l'erreur dans l'URL indiquant METHODE non autorisée pour cette URL. Est-ce que je manque quelque chose? Est-ce que POST ne fonctionne pas directement lorsque vous essayez d'ouvrir le serveur? Je suis tellement perdu.flacon utilisant POST, PUT, DELETE

from flask import Flask, jsonify,json, request, abort 
from flask_sqlalchemy import SQLAlchemy 


app = Flask(__name__) 
app.config.from_pyfile('Config.py') 
db = SQLAlchemy(app) 
db.create_all() 

class JsonModel(object): 
    def as_dict(self): 
     return {c.name: getattr(self, c.name) for c in self.__table__.columns} 

class User(db.Model, JsonModel): 
    User_ID = db.Column(db.Integer, primary_key = True) 
    FirstName = db.Column(db.String(20)) 
    LastName = db.Column(db.String(20)) 

    def __init__(self,FirstName, LastName): 
     self.FirstName = FirstName 
     self.LastName = LastName 

class Todo(db.Model, JsonModel): 
    todo_ID = db.Column(db.Integer, primary_key = True) 
    UserID = db.Column(db.Integer, db.ForeignKey('User_ID')) 
    details = db.Column(db.String(30)) 

    def __init__(self,details): 
     self.details = details 

@app.route('/', methods = ['GET']) 
def index(): 
    return json.dumps([u.as_dict() for u in User.query.all()+Todo.query.all()]) 

@app.route('/todo/<int:UserID>', methods = ['GET']) 
def get(UserID): 
    return (list[Todo.query.get(UserID)]) 

@app.route('/p/', methods = ['POST']) 
def create_dev(): 
    if not request.json or not 'name' in request.json: 
    abort(400) 
    dev = Todo(request.json.details,request.json.get('details','')) 
    db.session.add(dev) 
    db.session.commit() 
    return json.dumps([{'dev': dev}]), 201 

if __name__ == '__main__': 
    app.run() 
+0

Sur quelle URL Avez-vous cette erreur? – Fejs

+0

C'est le/p/one qui a à voir avec POST –

+0

Est-ce que ça dit quelle méthode n'est pas autorisée? Ma conjecture est que vous essayez de charger la page en visitant http: //some.address/p et l'application se plaint parce que vous n'avez pas la méthode GET couverte ici. – Fejs

Répondre

0

Vous devez ajouter la méthode GET à la liste des méthodes autorisées. Lorsque vous essayez de charger la page, vous devez d'abord obtenir la page elle-même en utilisant la méthode GET. Ensuite, après avoir rempli quelque chose sur la page, vous utilisez la méthode POST pour transmettre des données à l'application. Dans l'application, vous devez vérifier avec quelle méthode méthode est appelée. Quelque chose comme ceci:

@app.route('/p', methods=['GET', 'POST']) 
def create_dev(): 
    if request.method == 'GET': 
     return render_template('p_page.html') 

    # If You get to this line, it means it is POST method 
    do_something_here() 
+0

Que voulez-vous dire en remplissant quelque chose dans la page? Je ne peux rien ajouter dans le navigateur. –

+0

Quelles données envoyez-vous à l'application? Je suppose que vous avez un champ de saisie, un bouton radio, une liste déroulante? – Fejs

+0

Je ne fais pas une application. Juste une API de base qui obtient, met, supprime et supprime des choses d'une base de données –