使用 Flask-Restless 为 SQLAlchemy Table 创建 API
Creating API for SQLAlchemy Table using Flask-Restless
我用Python,Flask, Flask-SQLAlchemy and Flask-Restless to create a RESTful API. The database contains a table user
. Each user can follow other users and each user can be followed by other users (like in Twitter). So I also have a table followers
to link the users (I partially followed Miguel's tutorial)。这是我的代码:
# -*- coding: utf-8 -*-
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.restless import APIManager
# Create the Flask application and the Flask-SQLAlchemy object.
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id'), nullable=False),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'), nullable=False)
)
# Model declaration
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode, nullable=False)
# some other properties...
followed = db.relationship('User',
secondary=followers,
primaryjoin=(followers.c.follower_id == id),
secondaryjoin=(followers.c.followed_id == id),
backref=db.backref('followers', lazy='dynamic'),
lazy='dynamic')
# Create the database tables.
db.create_all()
# Create the Flask-Restless API manager.
manager = APIManager(app, flask_sqlalchemy_db=db)
# Create API endpoints, which will be available at /api/<tablename> by
# default. Allowed HTTP methods can be specified as well.
manager.create_api(User, methods=['GET', 'POST'])
if __name__ == '__main__':
app.run(debug=True)
在数据库中添加新用户很容易:
from requests import post
user = {'name':'John Doe'}
post('http://localhost:5000/api/user', json=user)
但是在followers
table中添加东西应该做什么请求呢?
您需要使用 PATCH。
来自这个docs:
PATCH /api/person/1
HTTP/1.1 Host: example.com
{ "computers":
{
"add": [ {"id": 1} ]
}
}
在你的情况下你会做这样的事情:
from requests import patch
follower = {'id':'37'}
cmd = {'followed': { 'add': [ follower ] } }
patch('http://localhost:5000/api/user/1', json=cmd)
我用Python,Flask, Flask-SQLAlchemy and Flask-Restless to create a RESTful API. The database contains a table user
. Each user can follow other users and each user can be followed by other users (like in Twitter). So I also have a table followers
to link the users (I partially followed Miguel's tutorial)。这是我的代码:
# -*- coding: utf-8 -*-
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.restless import APIManager
# Create the Flask application and the Flask-SQLAlchemy object.
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id'), nullable=False),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'), nullable=False)
)
# Model declaration
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode, nullable=False)
# some other properties...
followed = db.relationship('User',
secondary=followers,
primaryjoin=(followers.c.follower_id == id),
secondaryjoin=(followers.c.followed_id == id),
backref=db.backref('followers', lazy='dynamic'),
lazy='dynamic')
# Create the database tables.
db.create_all()
# Create the Flask-Restless API manager.
manager = APIManager(app, flask_sqlalchemy_db=db)
# Create API endpoints, which will be available at /api/<tablename> by
# default. Allowed HTTP methods can be specified as well.
manager.create_api(User, methods=['GET', 'POST'])
if __name__ == '__main__':
app.run(debug=True)
在数据库中添加新用户很容易:
from requests import post
user = {'name':'John Doe'}
post('http://localhost:5000/api/user', json=user)
但是在followers
table中添加东西应该做什么请求呢?
您需要使用 PATCH。
来自这个docs:
PATCH /api/person/1
HTTP/1.1 Host: example.com
{ "computers":
{
"add": [ {"id": 1} ]
}
}
在你的情况下你会做这样的事情:
from requests import patch
follower = {'id':'37'}
cmd = {'followed': { 'add': [ follower ] } }
patch('http://localhost:5000/api/user/1', json=cmd)