def app_rebuild(): """To regenerate the secret""" uapp = Application.query.filter_by(id=g.form.id.data, user_id=g.user.id).first() if not uapp: return return_result(20005) secret = generate_appkey() uapp.secret = secret return return_result(result=dict(secret=secret))
def app_add(): uapp_max_count=current_app.config['UAPP_MAX_COUNT'] if g.user.app.count() >= uapp_max_count: return return_result(10016, reason='用户可新建的应用数已达最大值({})'.format(uapp_max_count)) uapp = Application(user_id=g.user.id, appkey=generate_appkey(), secret=generate_appkey(), **g.form.data) db.session.add(uapp) db.session.commit() return return_result(result={'id': uapp.id, 'appkey': uapp.appkey, 'secret': uapp.secret})
def app_edit(): """To regenerate the secret""" uapp=Application.query.filter_by(id=g.form.id.data, user_id=g.user.id).first() if not uapp: return return_result(20005) uapp.appdes=g.form.appdes.data db.session.commit() return return_result()
def app_edit(): """重新生成secret""" user_id = request.json.get('user_id') # 登录用户 _id = request.json.get('id') secret = generate_appkey() uapp = Application.query.get(_id) print(type(uapp.user_id), type(user_id)) if str(uapp.user_id) != user_id: return return_result(10013) uapp.secret = secret return return_result(result=dict(secret=secret))
def app_list(page, num): uapps = g.user.app.order_by(Application.create_timed.desc()).paginate( page, num, error_out=False) records = apps_schema.dump(uapps.items).data records = add_timestamp(records) return return_result( result=dict(total=uapps.total, pages=uapps.pages, records=records))
def inner(*args, **kwargs): # The method for wrap_formdata of the FlaskForm class # implements the values from request.form and json. form = form_class() if not form.validate(): return return_result(errcode=20100, result=form.errors) g.form = form return f(*args, **kwargs)
def gets(): appkey = g.appkey ids = g.form.ids.data query = Content.query.filter(Content.appkey == appkey, Content.enabled == True) if ids: query = query.filter(Content.id.in_(ids)) contents = query.all() records = contents_schema.dump(contents).data records = add_timestamp(records) return return_result(result=records)
def claim_account(): """Multiple resource statistics""" appkey = g.appkey claim_ids = g.form.claim_ids.data query = Consume.query.with_entities( Consume.claim_id, db.func.sum(Consume.price).label('sum'), db.func.count( Consume.price).label('count')).filter(Consume.appkey == appkey) if claim_ids: query = query.group_by(Consume.claim_id).having( Consume.claim_id.in_(claim_ids)) records = query.all() return return_result(result=records)
def claim_id_consume(page, num): """All relevant consumption records of a resource""" appkey = g.appkey claim_id = g.form.claim_id.data query = Consume.query.filter_by(appkey=appkey, claim_id=claim_id) consumes = query.order_by(Consume.create_timed.desc()).paginate( page, num, error_out=False) total = consumes.total pages = consumes.pages records = consumes_schema.dump(consumes.items).data records = add_timestamp(records) return return_result( result=dict(total=total, pages=pages, records=records))
def published(page, num): """List of published resources""" appkey = g.appkey author = g.form.author.data contents = Content.query.filter_by(author=author, appkey=appkey, enabled=True).paginate(page, num, error_out=False) total = contents.total pages = contents.pages records = contents_schema.dump(contents.items).data records = add_timestamp(records) return return_result( result=dict(total=total, pages=pages, records=records))
def content_list(page, num): """因为price使用了Numeric类型, 在转换为python对象时,对应 Decimal 类型 Decimal类型,在使用jsonify进行json转换时会发生异常, 这是因为标准库json不支持转换Decimal 解决办法: 安装simplejson, 此库的dumps有一个use_decimal参数(默认True,可以转换Decimal) 当你安装了simplejson, flask的jsonify会自动使用它,而放弃系统标准库中的json库 ref: https://github.com/pallets/flask/issues/835 """ appkey = g.appkey contents = Content.query.filter( Content.appkey == appkey, Content.enabled == True).order_by( Content.create_timed.desc()).paginate(page, num, error_out=False) total = contents.total pages = contents.pages result = contents_schema.dump(contents.items).data return return_result(result=dict(total=total, pages=pages, data=result))
def app_add(): user_id = request.json.get('user_id') appname = request.json.get('appname') apptype_id = request.json.get('apptype_id') appdes = request.json.get('appdes') appkey = generate_appkey() secret = generate_appkey() uapp = Application(user_id=user_id, appname=appname, apptype_id=apptype_id, appdes=appdes, appkey=appkey, secret=secret) db.session.add(uapp) db.session.commit() return return_result(result={ 'id': uapp.id, 'appkey': uapp.appkey, 'secret': uapp.secret })
def published(page, num): """作者已发布资源被消费记录""" appkey = g.appkey author = request.json.get('author') category = request.json.get('category') # 0: 资源收入 1: 广告支出 其他:all query = Content.query.with_entities(Content.id, Content.title, Consume.txid, Content.enabled, Content.claim_id, Consume.customer,Consume.price, Consume.create_timed). \ join(Consume,Content.claim_id==Consume.claim_id). \ filter(Content.appkey == appkey, Content.author==author) if category == 0: query = query.filter(Consume.price > 0) if category == 1: query = query.filter(Consume.price < 0) records = query.order_by(Consume.create_timed.desc()).paginate( page, num, error_out=False) total = records.total pages = records.pages result = content_publishs_schema.dump(records.items).data return return_result(result=dict(total=total, pages=pages, data=result))
def consumed(page, num): """用户已消费的资源记录""" appkey = g.appkey customer = request.json.get('customer') category = request.json.get('category') # 0: 消费支出 1: 广告收入 其他:all query = Content.query.with_entities(Content.id, Content.author, Content.title, Consume.txid, Content.enabled, Content.claim_id, Consume.price, Consume.create_timed). \ join(Consume,Content.claim_id==Consume.claim_id). \ filter(Content.appkey == appkey, Consume.customer == customer) if category == 0: query = query.filter(Consume.price > 0) if category == 1: query = query.filter(Consume.price < 0) records = query.order_by(Consume.create_timed.desc()).paginate( page, num, error_out=False) total = records.total pages = records.pages records = content_consumes_schema.dump(records.items).data return return_result( result=dict(total=total, pages=pages, records=records))
def published(page, num): """作者已发布资源被消费记录""" appkey = g.appkey author = g.form.author.data category = g.form.category.data # 0: Publish income 1: Advertising spending other:all query = Content.query.with_entities(Content.id, Content.title, Consume.txid, Content.enabled, Content.claim_id, Consume.customer,Consume.price, Consume.create_timed). \ join(Consume,Content.claim_id==Consume.claim_id). \ filter(Content.appkey == appkey, Content.author==author) if category == 0: query = query.filter(Consume.price > 0) if category == 1: query = query.filter(Consume.price < 0) records = query.order_by(Consume.create_timed.desc()).paginate( page, num, error_out=False) total = records.total pages = records.pages records = add_timestamp(records.items) return return_result( result=dict(total=total, pages=pages, records=records))
def consumed(page, num): """用户已消费的资源记录""" appkey = g.appkey customer = request.json.get('customer') category = request.json.get('category') # 0: 消费支出 1: 广告收入 其他:all query = Content.query.with_entities(Content.id, Content.author, Content.title, Consume.txid, Content.enabled, Content.claim_id, Consume.price, Consume.create_timed). \ join(Consume,Content.claim_id==Consume.claim_id). \ filter(Content.appkey == appkey, Consume.customer == customer) if category == 0: query = query.filter(Consume.price > 0) if category == 1: query = query.filter(Consume.price < 0) records = query.order_by(Consume.create_timed.desc()).paginate( page, num, error_out=False) total = records.total pages = records.pages # 联表查询的结果是sqlalchemy.util._collections.result对象, 不是一个model对象 # 所以不能够想content_list接口那样格式化数据 records = add_timestamp(records.items) return return_result( result=dict(total=total, pages=pages, records=records))
def app_remove(): _id = request.json.get('id') num = Application.query.filter_by(id=_id).delete() return return_result(result=dict(num=num))
def app_list(): user_id = request.json.get('user_id') # 正式场景, 可能不需要传参,直接从登录状态中获得 user = User.query.filter_by(id=user_id).first() uapps = user.app.all() result = apps_schema.dump(uapps).data return return_result(result=result)
def view(): """浏览量+1""" _id = request.json.get('id') num = Content.query.filter_by(id=_id).update( {Content.views: Content.views + 1}) return return_result(result=dict(num=num))
def purchase(): """资源购买量""" appkey = g.appkey claim_id = g.form.claim_id.data count = Consume.query.filter_by(claim_id=claim_id, appkey=appkey).count() return return_result(result=dict(count=count))
def app_remove(): num = Application.query.filter_by(id=g.form.id.data, user_id=g.user.id).delete() return return_result(result=dict(num=num))
def purchase(): """资源购买量""" appkey = g.appkey claim_id = request.json.get('claim_id') count = Consume.query.filter_by(claim_id=claim_id, appkey=appkey).count() return return_result(result=dict(count=count))