我正在使用Flask,Flask-SQLAlchemy,Flask-Marshmallow + marshmallow-sqlalchemy,试图实现REST api PUT方法.我没有找到任何使用SQLA和Marshmallow实现更新的教程.
这是代码:
class NodeSchema(ma.Schema):
# ...
class NodeAPI(MethodView):
decorators = [login_required, ]
model = Node
def get_queryset(self):
if g.user.is_admin:
return self.model.query
return self.model.query.filter(self.model.owner == g.user)
def put(self, node_id):
json_data = request.get_json()
if not json_data:
return jsonify({'message': 'Invalid request'}), 400
# Here is part which I can't make it work for me
data, errors = node_schema.load(json_data)
if errors:
return jsonify(errors), 422
queryset = self.get_queryset()
node = queryset.filter(Node.id == node_id).first_or_404()
# Here I need some way to update …
Run Code Online (Sandbox Code Playgroud) 我正在实施OAuth(使用rauth)并将提供JWT令牌(使用flask-jwt),javascript前端(Angular1).我已经完成了基于经典cookie /会话的应用程序.有用.现在我想用JWT令牌来做.
如果我理解正确,用户将被重定向到提供商(例如谷歌),登录帐户,我的服务器和提供商做魔术,然后提供商将用户重定向回我的页面.现在我获得了用户个人资料,结束了OAuth部分.通过正常会话,您可以为用户设置cookie以及其他用于设置会话的内容,然后将其重定向到主页.
这就是我被困住的地方.有什么好的做法如何在提供商发回给用户后给用户JWT令牌?在重定向到主页时将其作为cookie提供给用户?把它放在标题中?据我所知,我需要javascript将令牌保存到LocalStorage/SessionStorage.
我已经定义了模型:
tags = db.Table('tags',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
db.Column('photo_id', db.Integer, db.ForeignKey('photo.id')),
)
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32), unique=True)
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
sha1sum = db.Column(db.LargeBinary(20), unique=True)
...
tags = db.relationship('Tag', secondary=tags,
backref=db.backref('photos', lazy='dynamic'))
Run Code Online (Sandbox Code Playgroud)
在烧瓶控制器/视图中,我获得了一些输入标签['summer', 'selfie', ...]
.
问题:
['summ', 'elfi', ...]
?flask ×2
jwt ×1
many-to-many ×1
marshmallow ×1
oauth ×1
python ×1
rauth ×1
sqlalchemy ×1
tagging ×1