使用curl使用POST使用Python restfulapi

使用curl使用POST使用Python restfulapi,python,rest,curl,flask,Python,Rest,Curl,Flask,当我试图将一些信息发布到数据库中时,我不知道如何让curl工作。在说它无法读取txt文件之前,我遇到了一个错误,但后来我把完整路径放进去了,现在它说“发送了一个服务器无法理解的请求”,Tbh我不知道如何正确使用curl,如果我没有使用txt文件,我也不知道在url中放什么 我的卷发看起来像这样 C:\Windows>curl -X POST -d "C:/Users/Muba/PycharmProjects/API practise/todo.txt" http://127.0.0.1:

当我试图将一些信息发布到数据库中时,我不知道如何让curl工作。在说它无法读取txt文件之前,我遇到了一个错误,但后来我把完整路径放进去了,现在它说“发送了一个服务器无法理解的请求”,Tbh我不知道如何正确使用curl,如果我没有使用txt文件,我也不知道在url中放什么

我的卷发看起来像这样

C:\Windows>curl -X POST -d "C:/Users/Muba/PycharmProjects/API practise/todo.txt"
 http://127.0.0.1:5000/ --header "Content-Type:application/json"
我的todo.txt文件包含

todo_ID, 12
User_ID, 8
details, "Get rid of all the flies in the house."
这是我的密码

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

import requests


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('/', methods = ['POST'])
def create_dev():
    if not request.json or not 'name' in request.json:
        abort(400)
    dev = Todo(request.json.todo_ID, request.json.get('todo_ID',''), request.json.UserID, request.json.get('UserID',''),
               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()

首先,我不建议初学者使用cURL,例如,使用或查找您选择的其他HTTP测试工具

其次,您的数据实际上需要是JSON

todo.json

{
    "todo_ID": 12,
    "User_ID": 8,
    "details": "Get rid of all the flies in the house."
}
以这个非常简单的Flask应用程序为例

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods = ['POST'])
def sample():
    if request.method == 'POST':
        print("POST'd", request.json)
    return "handled"

if __name__ == '__main__':
    app.run()
cURL
it(替换为您的文件路径)

我看到请求的输出已处理,并且在服务器日志中看到

POST'd {'User_ID': 8, 'todo_ID': 12, 'details': 'Get rid of all the flies in the house.'}


现在,如果您主要处理JSON文档,可能最好不要像SQL一样使用面向列的关系数据库(因为将JSON“翻译”为列很烦人,尤其是对于嵌套对象和列表)。比如说,可以看看Couchbase或MongoDB

嗯<代码>--标题“内容类型:应用程序/json”。。。你知道JSON是什么样子吗,因为你发布的是CSV文件不,我是一个noob:(我的会是:text吗“如果你想让
request.json
正常工作,就不需要了。你需要完全重新编写
text.txt
,才能真正成为一个男人……我会想办法,然后我就不能把所有的都保存为.json吗?嗯,我尝试了你为curl写的东西,但它不起作用C:\Windows>curl-X POST-d todo.json-H”内容类型:application/json”http://1 27.0.0.1:5000/表示服务器无法理解请求,需要文件名上的
@
符号。还需要完整路径或首先导航到与文件相同的目录。我不认为您的文件位于
C:\Windows
。或者……就像我说的,不要使用cURL,我想学习cURL如何使用cURLgh.我在json文件中犯了一个错误,它应该是UserID。哦,等等,你在文档中更改了很多东西,一次只做一步。测试你可以在接触数据库连接之前发布任何内容。测试数据库操作而不发布…重点是,我的答案有效。至少在linux中。如果这个答案可以接受,你可以单击选中它旁边的复选标记,并提出一个新的问题与任何其他问题,你有
from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods = ['POST'])
def sample():
    if request.method == 'POST':
        print("POST'd", request.json)
    return "handled"

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