def waterfall(): if request.method == "GET": return abort(404) res = dict(code=1, msg=None) #: 依次根据ctime、filename排序 sort = request.args.get("sort") or "desc" #: 符合人类习惯的page,第一页是1(程序计算需要减1) page = request.args.get("page") or 1 #: 返回数据条数 limit = request.args.get("limit") or 10 #: 管理员账号读取所有图片数据 is_mgr = is_true(request.args.get("is_mgr")) try: page = int(page) - 1 limit = int(limit) if page < 0: raise ValueError except (ValueError, TypeError): res.update(code=2, msg="Parameter error") else: if g.userinfo.username: if is_mgr and g.is_admin: uk = rsp("index", "global") else: uk = rsp("index", "user", g.userinfo.username) pipe = g.rc.pipeline() for sha in g.rc.smembers(uk): pipe.hgetall(rsp("image", sha)) try: result = pipe.execute() except RedisError: res.update(msg="Program data storage service error") else: data = [] if result and isinstance(result, (tuple, list)): for i in result: i.update( senders=json.loads(i["senders"]), ctime=int(i["ctime"]), ) data.append(i) data = sorted(data, key=lambda k: (k.get('ctime', 0), k.get('filename', '')), reverse=False if sort == "asc" else True) count = len(data) data = ListEqualSplit(data, limit) pageCount = len(data) if page < pageCount: res.update(code=0, count=count, data=data[page], pageCount=pageCount) else: res.update(code=3, msg="No data") else: res.update(msg="No valid username found") return res
def userapp(): """管理接口""" res = dict(msg=None, code=1) if request.method == "GET": # 定义参数 sort = request.args.get("sort") or "desc" page = request.args.get("page") or 1 limit = request.args.get("limit") or 10 # 参数检查 try: page = int(page) limit = int(limit) page -= 1 if page < 0: raise except: res.update(code=2, msg="There are invalid parameters") else: # 从封装类中获取数据 res.update(g.api.userapp.listUserApp()) data = res.get("data") if data and isinstance(data, (list, tuple)): data = [i for i in sorted(data, reverse=False if sort == "asc" else True)] count = len(data) data = ListEqualSplit(data, limit) pageCount = len(data) if page < pageCount: res.update(code=0, data=data[page], pageCount=pageCount, page=page, limit=limit, count=count) else: res.update(code=3, msg="There are invalid parameters") else: res.update(code=4, msg="No data") elif request.method == "POST": name = request.form.get("name") description = request.form.get("description") app_redirect_url = request.form.get("app_redirect_url") res.update(g.api.userapp.createUserApp(name=name, description=description, app_redirect_url=app_redirect_url)) elif request.method == "PUT": name = request.form.get("name") description = request.form.get("description") app_redirect_url = request.form.get("app_redirect_url") res.update(g.api.userapp.updateUserApp(name=name, description=description, app_redirect_url=app_redirect_url)) elif request.method == "DELETE": name = request.form.get("name") res.update(g.api.userapp.deleteUserApp(name=name)) FastPushMessage(res, "您于<i>{}</i>删除了一个SSO客户端应用:<strong>{}</strong>".format(timestamp_to_timestring(get_current_timestamp()), name)) logger.info(res) return jsonify(dfr(res))
def wx_view(): """获取图片数据(以redis为基准)""" res = dict(code=-1, msg=None) Action = request.args.get("Action") # 公共函数 _get_pics = lambda: [ g.redis.hgetall("{}:{}".format(GLOBAL['ProcessName'], imgId)) for imgId in list(g.redis.smembers(current_app.config["picKey"])) ] # GET请求段 if request.method == "GET": if Action == "getList": # 获取图片列表 sort = request.args.get("sort") or "desc" page = request.args.get("page") or 0 limit = request.args.get("limit") or 10 # 参数检查 try: page = int(page) limit = int(limit) except: res.update(code=2, msg="Invalid page or limit") else: data = _get_pics() if data: data = sorted(data, key=lambda k: (k.get('ctime', 0), k.get('imgUrl', 0)), reverse=False if sort == "asc" else True) WX_LABEL = SYSTEM["WX_LABEL"] if WX_LABEL: data = [ i for i in data if i.get("label", current_app. config["labelDefault"]) == WX_LABEL ] data = ListEqualSplit(data, limit) pageCount = len(data) if page < pageCount: res.update(code=0, data=data[page], pageCount=pageCount) else: res.update(code=3, msg="No more") else: res.update(code=4, msg="No data") return jsonify(res)
def blog_get_single_index(self, sort="desc", limit=None, page=0, length=5): "获取所有文章简单数据索引" res = {"msg": None, "data": [], "code": 0, "page": {}} LIMIT = "LIMIT " + str(limit) if limit else "" sql = "SELECT id,title,create_time,update_time,tag,author,catalog FROM blog_article ORDER BY id %s %s" % ( sort, LIMIT) logger.api.info("query single index SQL: %s" % sql) try: page = int(page) blog = self.mysql_read.query(sql) data = ListEqualSplit(blog, length) length = int(length) res.update(statistics=len(blog)) except Exception, e: logger.api.error(e, exc_info=True) res.update(msg="query single index fail", code=100006)
def api_view(): """获取图片数据(以redis为基准)""" res = dict(code=-1, msg=None) Action = request.args.get("Action") # GET请求段 if request.method == "GET": if Action == "getList": # 获取图片列表 sort = request.args.get("sort") or "desc" page = request.args.get("page") or 0 length = request.args.get("length") or 10 # 参数检查 try: page = int(page) length = int(length) except: res.update(code=2, msg="Invalid page or length") else: data = [ g.redis.hgetall("{}:{}".format(GLOBAL['ProcessName'], imgId)) for imgId in list(g.redis.smembers(picKey)) ] if data: data = [ i for i in sorted(data, key=lambda k: (k.get('ctime', 0), k.get('imgUrl', 0)), reverse=False if sort == "asc" else True) ] data = ListEqualSplit(data, length) pageCount = len(data) if page < pageCount: res.update(code=0, data=data[page], pageCount=pageCount, page=page, length=length) else: res.update(code=3, msg="IndexOut with page {}".format(page)) else: res.update(code=4, msg="No data") elif Action == "getInfo": # 获取系统相关信息 data = dict(site=g.site, imageNumber=g.redis.scard(picKey)) res.update(data=data, code=0) elif Action == "getOne": # 获取随机一张图片 res.update(data=g.redis.hgetall("{}:{}".format( GLOBAL['ProcessName'], g.redis.srandmember(picKey))), code=0) elif request.method == "POST": if Action == "setSystem": # 更新系统配置 data = { k: v for k, v in request.form.iteritems() if k in ("site_TitleSuffix", "site_RssTitle", "site_License", "site_Copyright", "author_Email", "github", "sys_Close", "sso_AllowedUsers", "site_UploadMax") } res.update(setSystem(g.redis, sysKey, **data)) logger.debug(res) return jsonify(res)
def waterfall(): res = dict(code=1, msg=None) #: 依次根据ctime、filename排序 sort = request.args.get("sort") or "desc" #: 符合人类习惯的page,第一页是1(程序计算需要减1) page = request.args.get("page") or 1 #: 返回数据条数 limit = request.args.get("limit") or 10 #: 管理员账号读取所有图片数据 is_mgr = is_true(request.args.get("is_mgr")) #: 相册,当album不为空时,近返回此相册数据,允许逗号分隔多个 album = request.args.get("album", request.form.get("album")) try: page = int(page) - 1 limit = int(limit) if page < 0: raise ValueError except (ValueError, TypeError): res.update(code=2, msg="Parameter error") else: if g.userinfo.username: if is_mgr and g.is_admin: uk = rsp("index", "global") else: uk = rsp("index", "user", g.userinfo.username) pipe = g.rc.pipeline() for sha in g.rc.smembers(uk): pipe.hgetall(rsp("image", sha)) try: result = pipe.execute() except RedisError: res.update(msg="Program data storage service error") else: #: 最终返回的经过过滤、排序等处理后的数据 data = [] #: 该用户或管理员级别所能查看的所有相册 albums = [] ask_albums = parse_valid_comma(album) if result and isinstance(result, (tuple, list)): for i in result: albums.append(i.get("album")) i.update( senders=json.loads(i["senders"]), ctime=int(i["ctime"]), ) if ask_albums: if i.get("album") in ask_albums: data.append(i) else: data.append(i) data = sorted(data, key=lambda k: (k.get('ctime', 0), k.get('filename', '')), reverse=False if sort == "asc" else True) count = len(data) data = ListEqualSplit(data, limit) pageCount = len(data) if page < pageCount: res.update( code=0, count=count, data=data[page], pageCount=pageCount, albums=list(set([i for i in albums if i])), ) else: res.update(code=3, msg="No data") else: res.update(msg="No valid username found") return res
res.update(code=2, msg="Invalid page or limit") else: data = _get_pics() if data: data = sorted(data, key=lambda k: (k.get('ctime', 0), k.get('imgUrl', 0)), reverse=False if sort == "asc" else True) if label: data = [ i for i in data if i.get("label", current_app. config["labelDefault"]) == label ] count = len(data) data = ListEqualSplit(data, limit) pageCount = len(data) if page < pageCount: res.update(code=0, data=data[page], pageCount=pageCount) else: res.update(code=3, msg="IndexOut with page {}".format(page)) else: res.update(code=4, msg="No data") elif Action == "getInfo": # 获取系统相关信息 data = dict(site=g.site, imageNumber=g.redis.scard( current_app.config["picKey"]))