Exemple #1
0
def search():
    form = BookSearchValidator().validate_for_api()
    q = '%' + form.q.data + '%'
    books = Book.query.filter(or_(Book.title.like(q),
                                  Book.publisher.like(q))).all()  # 模糊查询
    books = [book.hide('summary') for book in books]  # 隐藏字段
    return Success(books)
Exemple #2
0
def get_complex_one(id):
    '''
	Theme详情接口
	:url /theme/:id
	:param id: 专题theme的id
	:return: 专题theme的详情
	'''
    id = IDMustBePositiveInt().validate_for_api().id.data
    theme_detail = Theme.get_theme_detail(id=id)
    return Success(theme_detail)
Exemple #3
0
def get_simple_list():
    '''
	:url /theme
	:arg /theme?ids=id1,id2,id3,...
	:return: 一组theme模型
	'''
    # args = IDCollection().validate_for_api()
    ids = IDCollection().validate_for_api().ids.data
    theme = Theme.get_themes(ids=ids)
    return Success(theme)
Exemple #4
0
def get_token():
    form = ClientValidator().validate_for_api()
    promise = {
        ClientTypeEnum.USER_EMAIL: User.verify_by_email,
        ClientTypeEnum.USER_WX: User.verify_by_wx,
    }
    # 微信登录则account为code(需要微信小程序调用wx.login接口获取), secret为空
    identity = promise[ClientTypeEnum(form.type.data)](form.account.data,
                                                       form.secret.data)

    # Token生成
    expiration = current_app.config['TOKEN_EXPIRATION']
    token = generate_auth_token(identity['uid'], form.type.data,
                                identity['scope'], expiration)
    return Success(data=token)
Exemple #5
0
def get_token_info():
    """获取令牌信息"""
    form = TokenValidator().validate_for_api()
    s = Serializer(current_app.config['SECRET_KEY'])
    try:
        data = s.loads(form.token.data, return_header=True)
    except SignatureExpired:
        raise AuthFailed(msg='token is expired', error_code=1003)
    except BadSignature:
        raise AuthFailed(msg='token is invalid', error_code=1002)

    r = {
        'scope': data[0]['scope'],
        'create_at': data[1]['iat'],  # 创建时间
        'expire_in': data[1]['exp'],  # 有效期
        'uid': data[0]['uid']
    }
    return Success(data=r)
Exemple #6
0
def detail(isbn):
    book = Book.query.filter_by(isbn=isbn).first_or_404()
    return Success(book)
def delete_one(id):
    id = IDMustBePositiveInt().validate_for_api().id.data
    product = Product.get_product_detail(id=id)
    return Success()
def get_all_in_category():
    id = IDMustBePositiveInt().validate_for_api().id.data
    products = Product.get_product_by_category_id(id=id)
    return Success(products)
def get_recent():
    count = Count().validate_for_api().count.data
    products = Product.get_most_recent(count=count)
    return Success(products)
Exemple #10
0
def fetch_user():
	uid = g.user.uid  # g变量是「线程隔离」的
	user = User.query.filter_by(id=uid).first_or_404()
	return Success(user)
Exemple #11
0
def super_fetch_user(uid):
	# user = User.query.get_or_404(uid) # 会查询到已经被删除的数据
	user = User.query.filter_by(id=uid).first_or_404()
	return Success(user)
Exemple #12
0
def place_order():
	products = OrderPlace().validate_for_api().products.data

	return Success(products)
Exemple #13
0
def get_all_categories():
    categories = Category.get_all_categories()
    return Success(categories)
Exemple #14
0
def get_address():
    uid = g.user.uid
    with db.auto_check_empty(UserException(error_code=6001, msg='用户地址不存在')):
        user_address = UserAddress.query.filter_by(user_id=uid).first_or_404()
    return Success(user_address)
Exemple #15
0
def get_banner(id):
    id = IDMustBePositiveInt().validate_for_api().id.data
    banner = Banner.get_banner_by_id(id=id)
    # banner.hide('description') # 临时隐藏
    return Success(banner)