使用Flask框架构建服务器端
使用Flask构建RESTful风格的API服务器
#
构建RESTful风格的服务器可以使用Flask-RestFul框架
这个框架将资源视作一个类,我们需要提供POST,GET,PUT,DELETE等方法的具体实现,然后再绑定端点(URL)
但是我认为这样的开发体验不够便捷,我用Flask的原因是因为Flask可以非常方便的构建端点到view function的映射,所以我依然使用Flask框架作为RESTful风格API服务器的开发
准备
Flask是一个微框架,相对于Django来说,它不够完整,很多地方需要自己完成,同时它的易于扩展性可以允许我们很自由的选择第三方实现
我选择了一下第三部件:
Flask-HTTPAuth 用于简单验证
SQLAlchemy 用于SQL语言的ORM
Alembic 用于管理DB版本
Passlib 用于密码管理
以上都可以使用pip安装
Here we go
RESTful风格的中心是资源,资源指的是某种实体(而不是某种动作),比如围绕着用户登陆,注册登出这样的动作应该归结为用户资源,使用POST GET DELETE PUT等方法来表达用户登陆,获取登陆状态,登出,更新登陆状态的操作。
现在我们就来实现这一部分
首先我们应该在数据库里拥有User资源,也就User表
我们使用SQLAlchemy来声明数据库
首先构造base.py
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:tmp/iamstar.db', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
def init_db():
# remember import your models
from Model import xxxxxx
Base.metadata.create_all(bind=engine)
构造好base后,我们可以根据base来构建其他数据库模型
from sqlalchemy import Column, Integer, String, Text
from sqlalchemy.orm import relationship
from Model.base import Base
from passlib.apps import custom_app_context as pwd_context
class User(Base):
__tablename__ =