2016-11-02 15 views
0

Я продолжаю получать ошибку на URL-адресе, когда пытаюсь реализовать POST в своем API. Я продолжаю получать сообщение об ошибке в URL-адресе, в котором для этого URL-адреса не указан METHOD. Я что-то упускаю? Не работает ли POST напрямую, когда вы пытаетесь открыть сервер? Я потерян.колба с использованием 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

На каком URL-адресе вы получите эту ошибку? – Fejs

+0

Это/p/one, связанный с POST –

+0

Говорит ли он, какой метод не разрешен? Я предполагаю, что вы пытаетесь загрузить страницу, посещая http: //some.address/p, и приложение жалуется, потому что у вас нет метода GET. – Fejs

ответ

0

Вы должны добавить метод GET в список разрешенных методов. Когда вы пытаетесь загрузить страницу, вам сначала нужно получить страницу, используя метод GET. Затем, заполнив что-то на странице, вы используете метод POST для передачи некоторых данных в приложение. В приложении вы должны проверить, с какой функцией метода вызывается. Что-то вроде этого:

@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

Что вы подразумеваете, заполнив что-то на странице? Я ничего не могу добавить в браузер. –

+0

Какие данные вы отправляете в приложение? Я полагаю, у вас есть поле ввода, переключатель, раскрывающийся список? – Fejs

+0

Я не придумал приложение. Просто базовый API, который получает, помещает, удаляет и удаляет данные из базы данных. –

 Смежные вопросы

  • Нет связанных вопросов^_^