def change_info(message): """ 修改个人信息 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) params = request.values.to_dict() passwords = set_password(params['password']) sys_user = SysUser(params['username'], passwords, params['email'], params['avatar']) result = SysUser.update(sys_user) if result is None: # 为空说明存入数据库没有报错 sys_user = SysUser.get_info(params['username']) token = Verificate.encode_auth_token( sys_user.id, sys_user.last_login.strftime("%Y-%m-%d %H:%M:%S")) data = { 'info': { 'username': sys_user.username, 'password': sys_user.password, 'email': sys_user.email, 'avatar': sys_user.avatar }, 'token': token.decode() } return jsonify( response.return_message(data, Message.SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def archive(): """ 归档页面获取数据 :return: """ articles = Article.get_by_archive() if articles: publish_years = Article.get_archive_year() archive_list = [] for year in publish_years: article_list = [] for article in articles: if year[0] == article[1]: article_list.append({ "id": article[0].id, "publish_time": article[0].date_publish.strftime('%b %d,%Y'), "title": article[0].title }) archive_list.append({ 'publish_date': year[0], 'articles': article_list }) app.logger.info("request result: {}".format(article_list)) return jsonify( response.return_message(archive_list, Message.SUCCESS.value, Code.SUCCESS.value)) return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def upload(message): """ 上传图片 :return: 返回图片链接 """ if message['code'] != Code.SUCCESS.value: return jsonify(message) base64_str = request.values.get('img') username = request.values.get('username') CommonUtil.handle_img(base64_str, 'avatar.webp') result = CommonUtil.upload_img('avatar.webp') if result is not None: result_avatar = SysUser.update_avatar(username, result) if result_avatar is None: return jsonify( response.return_message(data={ 'image_url': result, 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.UPLOAD_SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.UPLOAD_FAILED.value, code=Code.BAD_REQUEST.value))
def upload_image(message): """ 图片上传到腾讯cos :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) base64_str = base64.b64encode(request.files['file'].read()).decode('utf-8') filename = "files.webp" CommonUtil.handle_img(base64_str, filename) result = CommonUtil.upload_img(filename) if result is not None: return jsonify( response.return_message(data={ 'image_url': result, 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.UPLOAD_SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.UPLOAD_FAILED, code=Code.BAD_REQUEST.value))
def get_publish(message): """ 查询文章 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) article_id = request.values.get("article_id") article = Article.get_by_id(article_id) if article: tags = [tag.tag for tag in article.tags.all()] result = { "id": article.id, "title": article.title, "tags": tags, "desc": article.desc, "content": article.content } return jsonify( response.return_message(data={ "article": result, "token": Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.BAD_REQUEST.value, code=Code.BAD_REQUEST.value))
def wrapper(): app.logger.info("request ip: {}".format(request.remote_addr)) params = request.values.get('params') result = CommonUtil.rsa_decrypt(ENCRYPT_KEY.get('private_key'), params) if result is None: return_result = response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value) else: result = eval(result) # 字符串类型的16位长度key,16进制字符串类型的data params = CommonUtil.aes_decrypt(result.get('key'), result.get('data')) app.logger.info("decrypt request params: {}".format(params)) return_result = response.return_message(eval(params), Message.SUCCESS.value, Code.SUCCESS.value) return func(return_result)
def verify(): """ 校验用户名和邮箱 :return: """ params = request.values.to_dict() enter_username = params['username'] enter_email = params['email'] # 用户信息校验成功 if SysUser.verify(enter_username, enter_email) is True: # 获取毫秒级时间戳 t = time.time() ms_t = int(round(t * 1000)) # 将邮箱前两位设为* ''' re.sub()有5个参数,三个必选参数pattern,repl,string;两个可选参数count,flags re.sub(pattern,repl,string,count,flags) pattern:表示正则表达式中的模式字符串; repl:被替换的字符串,或者是一个方法(既可以是字符串,也可以是函数); 当repl为字符串的时候,也就是需要 将string中与pattern匹配的字符串都替换成repl 当repl为方法的时候,就必须是一个带有一个参数,且参数为MatchObject类型的方法,该方法需要返回一个字符串。 string:要被处理的,要被替换的字符串; count:指的是最大的可以被替换的匹配到的字符串的个数,默认为0,就是所有匹配到的字符串。 flgas:标志位 ''' reset_email1 = re.sub(enter_email[:2], '**', enter_email) # 整合参数格式 encrypt_params = 'username={}&email={}×tamp={}'.format( enter_username, reset_email1, str(ms_t)) # .encode() :用来转换成bytes数组 sid = base64.b64encode(encrypt_params.encode()).decode() # 接收发送返回消息 send_result = CommonUtil.send_email(enter_email, sid) # 如果发送失败,则会返回失败原因 if send_result: return jsonify( response.return_message(data=send_result, msg=Message.EMAIL_SEND_FAILED.value, code=Code.FORBIDDEN.value)) # 否则发送成功 return jsonify( response.return_message(data=None, msg=Message.EMAIL_SEND_SUCCESS.value, code=Code.SUCCESS.value)) # 用户信息校验失败 else: return jsonify( response.return_message(data=None, msg=Message.VERIFY_FAILED.value, code=Code.BAD_REQUEST.value))
def detail_article(message): """ 文章详细页面数据 :param message: :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) article_id = message['data']['article_id'] app.logger.info("request params - article_id: {}".format(article_id)) article = Article.get_by_id(article_id) if article: tags = [] for tag in article.tags.all(): sin_tag = {"id": tag.id, "tag": tag.tag} tags.append(sin_tag) previous = Article.get_previous(article.date_publish) next = Article.get_next(article.date_publish) result = { "id": article.id, "title": article.title, "desc": article.desc, "content": article.content, "publish_time": 'Posted by yinan on ' + article.date_publish.strftime('%b %d,%Y'), "back_url": article.back_img, "tags": tags, "previous": previous[0] if previous else None, "next": next[0] if next else None } Article.update_click_count(article_id) app.logger.info("request result: {}".format(result)) return jsonify( response.return_message(data={ "article": result, }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.BAD_REQUEST.value, code=Code.BAD_REQUEST.value))
def get_editor_article(message): if message['code'] != Code.SUCCESS.value: return jsonify(message) params = request.values.to_dict() start_time = params['beginTime'] end_time = params['endTime'] page_no = params['pageNo'] result = Article.get_all_by_date(start_time, end_time, page_no) articles = [] for item in result.items: tags = [tag.tag for tag in item.tags.all()] article = { "id": item.id, "title": item.title, "tags": tags, "datetime": item.date_publish.strftime("%Y-%m-%d") } articles.append(article) return jsonify( response.return_message(data={ "articles": articles, "token": Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode(), "total": result.total }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value))
def verify(): params = request.values.to_dict() enter_username = params['username'] enter_email = params['email'] if SysUser.verify(enter_username, enter_email) is True: # 获取毫秒级时间戳 t = time.time() ms_t = int(round(t * 1000)) # 将邮箱前两位设为* ''' re.sub()有5个参数,三个必选参数pattern,repl,string;两个可选参数count,flags re.sub(pattern,repl,string,count,flags) pattern:表示正则表达式中的模式字符串; repl:被替换的字符串,或者是一个方法(既可以是字符串,也可以是函数); 当repl为字符串的时候,也就是需要 将string中与pattern匹配的字符串都替换成repl 当repl为方法的时候,就必须是一个带有一个参数,且参数为MatchObject类型的方法,该方法需要返回一个字符串。 string:要被处理的,要被替换的字符串; count:指的是最大的可以被替换的匹配到的字符串的个数,默认为0,就是所有匹配到的字符串。 flgas:标志位 ''' reset_email1 = re.sub(enter_email[:2], '**', enter_email) # .encode() :用来转换成bytes数组 sid = base64.b64encode( (enter_username + str(ms_t) + reset_email1).encode()).decode() print(sid) return CommonUtil.send_email('*****@*****.**', sid) else: return jsonify( response.return_message(data="test", msg=Message.VERIFY_FAILED.value, code=Code.BAD_REQUEST.value))
def tags(): """ 获取所有标签 :return: """ tags = Tag.get_all() if tags: data_tag = [] for tag in tags: sin_tag = {"id": tag.id, "tag": tag.tag} data_tag.append(sin_tag) app.logger.info("request result: {}".format(tags)) return jsonify( response.return_message({'tags': data_tag}, Message.SUCCESS.value, Code.SUCCESS.value)) return jsonify( response.return_message(None, Message.SUCCESS.value, Code.SUCCESS.value))
def reset_pwd(): """ 重置密码 :return: """ params = request.values.to_dict() passwords = None if params['password'] == '' else set_password( params['password']) sys_user = SysUser(params['username'], passwords, params['email'], params['avatar']) result = SysUser.update(sys_user) if result is None: return jsonify( response.return_message(None, Message.SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def register(): """ 注册管理员 :return: 用户基本信息 """ username = request.values.get('username') password = set_password(request.values.get('password')) email = request.values.get('email') avatar = request.values.get('avatar') sys_user = SysUser(username, password, email, avatar) result = SysUser.save(sys_user) if result is None: sys_user = SysUser.get_info(username) data = {"id": sys_user.id, "username": username} return jsonify( response.return_message(data, Message.REGISTER_SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.REGISTER_FAILED.value, Code.BAD_REQUEST.value))
def reset_pwd(): """ 重置密码 :return: """ params = request.values.to_dict() password = params['password'] if password is None or len(password) < Constant.PASSWORD_LENGTH.value: return jsonify( response.return_message(None, Message.PASSWORD_LENGTH_LESS_THAN.value, Code.BAD_REQUEST.value)) passwords = set_password(password) result = SysUser.reset_password(params['username'], passwords) if result is None: return jsonify( response.return_message(None, Message.SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.RESET_PASSWORD_FAILED.value, Code.BAD_REQUEST.value))
def search(message): if message['code'] != Code.SUCCESS.value: return jsonify(message) input_search = message['data']['search_params'] app.logger.info("request params - search_params: {}".format(input_search)) articles = Article.get_by_search(input_search) if articles: article_list = [] for item in articles: article = { "id": item.id, "title": item.title, "content": item.content } article_list.append(article) app.logger.info("request result: {}".format(article_list)) return jsonify( response.return_message({"articles": article_list}, Message.SUCCESS.value, Code.SUCCESS.value)) return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def put_publish(message): """ 修改文章 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) results = request.values.to_dict() if Article.get_by_id(results['article_id']) is None: return jsonify( response.return_message(data={ "token": Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.ARTICLE_NOT_EXISTS.value, code=Code.NOT_FOUND.value)) article = Article(results['title'], results['desc'], results['content'], datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), results['back_img']) article.id = results['article_id'] # 将前台传来的字符串,转换成列表,再转换成元组,然后通过标签查询id tag_ids = Tag.get_id_by_tag(tuple(eval(results['tags']))) if Article.update(article, tag_ids) is None: return jsonify( response.return_message(data={ "token": Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.BAD_REQUEST.value, code=Code.BAD_REQUEST.value))
def index(message): if message['code'] != Code.SUCCESS.value: return jsonify(message) page_num = message['data']['page'] app.logger.info("request params - page: {}".format(page_num)) articles = Article.get_article_by_pageno(page_num) if articles: article_list = [] for item in articles.items: article = { "id": item.id, "title": item.title, "desc": item.desc, "content": item.content, "publish_time": 'Posted by yinan on ' + item.date_publish.strftime('%b %d,%Y'), } article_list.append(article) top_articles = [] for item in Article.get_top5(): top_articles.append({'id': item.id, 'title': item.title}) app.logger.info( "request result - total: {}, articles: {}, top_articles: {}". format(articles.total, article_list, top_articles)) return jsonify( response.return_message( { "total": articles.total, "articles": article_list, 'top_articles': top_articles }, Message.SUCCESS.value, Code.SUCCESS.value)) return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def delete_publish(message): """ 删除文章 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) article_id = request.values.get('article_id') result = Article.delete(article_id) if result is None: return jsonify( response.return_message(data={ 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.DELETE_SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.DELETE_FAILED.value, code=Code.BAD_REQUEST.value))
def upload_image(message): """ 图片上传到腾讯cos :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) base64_str = base64.b64encode(request.files['file'].read()).decode('utf-8') if request.values.get('back_img'): img = CommonUtil.handle_img(base64_str, 'files', Constant.IS_BACK_IMG.value) else: img = CommonUtil.handle_img(base64_str, 'files') remote_name = str(int(time.time())) CommonUtil.upload_img('files.jpg', remote_name, '.jpg') result = CommonUtil.upload_img('files.webp', remote_name) if request.values.get('back_img'): remote_name = remote_name + '.tiny' CommonUtil.tiny_img_thumb(img, 'tiny_files') CommonUtil.upload_img('tiny_files.jpg', remote_name, '.jpg') CommonUtil.upload_img('tiny_files.webp', remote_name) if result is not None: return jsonify( response.return_message(data={ 'image_url': result, 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.UPLOAD_SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.UPLOAD_FAILED, code=Code.BAD_REQUEST.value))
def search_articles(message): if message['code'] != Code.SUCCESS.value: return jsonify(message) input_search = message['data']['search_params'] app.logger.info("request params - search_params: {}".format(input_search)) es = EsArticle(configs.ES_CONFIG.get('ip')) all_articles = es.get_articles(input_search) if all_articles['hits']: articles = all_articles['hits']['hits'] article_list = [] for item in articles: article = { "id": item['_source']['id'], "title": item['_source']['title'], "content": item['_source']['content'] } article_list.append(article) app.logger.info("request result: {}".format(article_list)) return jsonify( response.return_message({"articles": article_list}, Message.SUCCESS.value, Code.SUCCESS.value)) return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def get_tag_articles(message): if message['code'] != Code.SUCCESS.value: return jsonify(message) tag_id = message['data']['tag_id'] page_no = message['data']['page_no'] app.logger.info("request params - tag_id: {}, page_no: {}".format( tag_id, page_no)) articles = Tag.get_tag_by_id(tag_id, page_no) article_list = [] if articles: for item in articles.items: article_list.append({ 'id': item.id, 'title': item.title, 'desc': item.desc, 'content': item.content, 'publish_time': item.date_publish, 'back_url': item.back_img.replace('.webp', '.tiny.webp') if item.back_img else None }) app.logger.info("request result: {}".format(article_list)) return jsonify( response.return_message( { 'total': articles.total, 'articles': article_list }, Message.SUCCESS.value, Code.SUCCESS.value)) return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def addtag(message): """ 添加标签 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) new_tag = request.values.get('tag') tag = Tag(new_tag) result = Tag.save(tag) if result is None: return jsonify( response.return_message(data={ 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.BAD_REQUEST.value, code=Code.BAD_REQUEST.value))
def gettags(message): """ 获取标签 :param message: :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) tags = Tag.get_all() tags_value = [tag.tag for tag in tags] return jsonify( response.return_message(data={ 'tags': tags_value, 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value))
def get_by_tag(message): """ 模糊查询tag :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) tag_value = request.values.get('tag') tags = Tag.get_by_tag(tag_value) tags_value = [tag.tag for tag in tags] return jsonify( response.return_message(data={ 'tags': tags_value, 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.SUCCESS.value, code=Code.SUCCESS.value))
def info_page(message): """ 用户信息页面 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) username = request.values.get('username') sys_user = SysUser.get_info(username) token = Verificate.encode_auth_token( sys_user.id, sys_user.last_login.strftime("%Y-%m-%d %H:%M:%S")) data = { 'info': { 'username': sys_user.username, 'password': sys_user.password, 'email': sys_user.email, 'avatar': sys_user.avatar }, 'token': token.decode() } return jsonify( response.return_message(data, Message.SUCCESS.value, Code.SUCCESS.value))