def post(self): import app_config from app.database_models import Comments, Threads if g.user.role == app_config.USER_ROLE_ADMIN: comment_id = request.json.get('comment_id', None) if comment_id is not None: session = AppUtils.get_session() try: comment = session.query(Comments).filter_by( id=comment_id).first() if comment is not None: session.delete(comment) session.commit() return ResponseClass.ok() finally: session.close() else: thread_id = request.json.get('thread_id', None) comment_id = request.json.get('comment_id', None) if comment_id is None or thread_id is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() c = session.query(Comments).filter_by(id=comment_id, user_id=g.user.id).first() t = session.query(Threads).filter_by(id=thread_id).first() if t is None or c is None: session.close() return ResponseClass.warn(ResponseCode.COMMENT_NOT_FOUND) result = t.del_comment(comment_id) if result: session.close() return ResponseClass.ok() else: session.close() return ResponseClass.warn(ResponseCode.SERVER_ERROR)
def post(self): from app_config import USER_ROLE_ADMIN from app.database_models import Threads if g.user.role == USER_ROLE_ADMIN: # 系统删帖 t_id = request.json.get('thread_id', None) session = AppUtils.get_session() try: th = session.query(Threads).filter_by(id=t_id).first() if th is None: return ResponseClass.warn(ResponseCode.THREAD_NOT_EXIST) session.delete(th) session.commit() return ResponseClass.ok() finally: session.close() else: t_id = request.json.get('thread_id', None) session = AppUtils.get_session() th = session.query(Threads).filter_by(user_id=g.user.id, id=t_id).first() if th is None: return ResponseClass.warn(ResponseCode.THREAD_NOT_EXIST) AppUtils.delete_to_sql(th).close() return ResponseClass.ok()
def get(self, user_id): t1 = time.clock() session = AppUtils.get_session() try: from models.models import User q_user = session.query(User).filter_by(id=user_id).with_for_update().first() if q_user is None: return ResponseClass.warn(ResponseCode.USER_NOT_EXIST) else: # 判断是否点过赞,点过赞则警告 from models.models import UserLikes result = session.query(UserLikes).filter_by(user_id=g.user.id, like_user=user_id).with_for_update().first() if result is None: # 点赞 q_user.likes += 1 likes = UserLikes() likes.user_id = g.user.id likes.like_user = user_id session.add(likes) return ResponseClass.ok() else: # TODO 测试并发量 q_user.likes += 1 return ResponseClass.warn(ResponseCode.ALREADY_LIKED) finally: session.commit() print("请求时间:%f" % (time.clock() - t1)) session.close()
def post(self): ids = request.json.get("ids", []) if len(ids) == 0: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() total_credits = g.user.credits try: need_paid = 0 cart_item = [] for id in ids: item = session.query(Cart).filter_by(id=id).first() if item is not None: need_paid += item.item.credits cart_item.append(item) if need_paid > total_credits: return ResponseClass.warn(ResponseCode.NO_ENOUGH_CREDITS) else: # cart_id -> repository user = session.query(User).filter_by(id=g.user.id).first() user.credits -= need_paid for cart in cart_item: repo = Repository() repo.user_id = g.user.id repo.item_id = cart.item_id session.add(repo) session.delete(cart) session.commit() return ResponseClass.ok_with_data(user.credits) except Exception as e: pass finally: session.close()
def post(self): t_id = request.json.get('thread_id', None) # 帖子ID c_id = request.json.get('code_id', None) content = request.json.get('content', None) if t_id is None or content is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() try: from app.database_models import Threads thread = session.query(Threads).filter_by(id=t_id).first() if thread is None: return ResponseClass.warn(ResponseCode.THREAD_NOT_EXIST) from app.database_models import Comments new_comment = Comments() new_comment.code_id = c_id new_comment.user_id = g.user.id new_comment.threads_id = t_id new_comment.content = content result = thread.submit_comment(new_comment, session) if result: user = session.query(User).filter_by(id=g.user.id).first() user.credits += 5 session.commit() return ResponseClass.ok() else: return ResponseClass.warn(ResponseCode.OPERATION_TOO_FAST) finally: session.close()
def post(self): user_id = g.user.id session = app_utils.AppUtils.get_session() try: from app.database_models import SignIn record = session.query(SignIn).filter_by(user_id=user_id).first() from app.database_models import User user = session.query(User).filter_by(id=user_id).first() if record is None: # 从来没签过到 sign_in_record = SignIn() sign_in_record.user_id = user_id user.credits = user.credits + 1 session.add(sign_in_record) return ResponseClass.ok() else: pre_sign_in_time = record.sign_in_time current_time = datetime.now() if current_time.day > pre_sign_in_time.day: # 可以签到,更新时间 record.sign_in_time = current_time user.credits = user.credits + 1 return ResponseClass.ok() else: return ResponseClass.warn(ResponseCode.ALREADY_SIGN_IN) finally: session.commit() session.close()
def post(self): username = request.json.get('username', None) password = request.json.get('password', None) code = request.json.get('code', None) mail = request.json.get('mail', None) if username is None or password is None or code is None or mail is None or not re.match( r'[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+', mail): return jsonify(code=ResponseCode.FORMAT_ERROR, msg="用户名密码格式错误") cache_email = cache.get(code) if cache_email != mail: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) else: cache.delete(code) cache.delete(mail) session = AppUtils.get_session() try: # 验证用户名 AppUtils.validate_username(username) from models.models import User user = User() user.username = username user.mail = mail user.hash_password(password) user.credits = 0 session.add(user) session.commit() # 数据库 from app_config import SQLSession return jsonify(code=0, data=user.get_self_data()) except Exception as e: return jsonify(code=-1, msg=e.args[0]) finally: session.close()
def post(self): if g.user.role == conf.USER_ROLE_USER: return ResponseClass.warn(ResponseCode.NOT_ROOT) else: session = AppUtils.get_session() try: item = session.query(Item).filter_by( id=request.json.get("id")).first() if item is not None: item.isOn = not item.isOn session.commit() return ResponseClass.ok_with_data(item.isOn) else: return ResponseClass.warn(ResponseCode.ITEM_NOT_FOUND) finally: session.close()
def get(self): args = self.parser.parse_args() page = args.get('page', None) if page is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) if g.user.role == conf.USER_ROLE_ADMIN: session = AppUtils.get_session() try: items = session.query(Item).order_by(desc(Item.id)).offset( page * 10).limit(10).all() data = [] for item in items: item_dict = AppUtils.serialize(item) data.append(item_dict) return ResponseClass.ok_with_data(data) except Exception as e: pass finally: session.close() else: session = AppUtils.get_session() try: items = session.query(Item).filter_by(isOn=True).order_by( Item.name).offset(page * 10).limit(10).all() data = [] for item in items: item_dict = AppUtils.serialize(item) data.append(item_dict) return ResponseClass.ok_with_data(data) except Exception as e: pass finally: session.close()
def post(self): if g.user.role == conf.USER_ROLE_USER: return ResponseClass.warn(ResponseCode.NOT_ROOT) else: session = AppUtils.get_session() id = request.json.get('id', None) print(id) item: Item if id is not None: # 修改items item = session.query(Item).filter_by(id=id).first() else: item = Item() item.name = request.json.get('name') item.detail = request.json.get('detail') item.credits = request.json.get('credits') item.isOn = request.json.get('isOn') item.img = request.json.get('img') if id is None: session.add(item) try: session.commit() return ResponseClass.ok_with_data({"id": item.id}) finally: session.close()
def get(self, user_id): session = AppUtils.get_session() try: from app.database_models import User q_user = session.query(User).filter_by( id=user_id).with_for_update().first() if q_user is None: return ResponseClass.warn(ResponseCode.USER_NOT_EXIST) else: # 判断是否点过赞,点过赞则警告 from app.database_models import UserLikes result = session.query(UserLikes).filter_by( user_id=g.user.id, like_user=user_id).with_for_update().first() if result is None: # 点赞 q_user.likes += 1 likes = UserLikes() likes.user_id = g.user.id likes.like_user = user_id session.add(likes) else: q_user.likes -= 1 session.delete(result) session.commit() return ResponseClass.ok_with_data(q_user.likes) finally: session.close()
def get(self, file_name): args = request.args print(args) token = args.get('token', None) if token is None: return ResponseClass.warn(-2) from app.database_models import User user = User.verify_auth_token(token) if user is not None: response = make_response(send_from_directory(Cf.upload_path, file_name, as_attachment=True)) response.headers["Content-Type"] = "application/octet-stream" response.headers["Accept-ranges"] = "bytes" response.headers["Content-Disposition"] = "attachment; filename={}".format( file_name.encode().decode('latin-1')) return response else: return ResponseClass.warn(-1)
def post(self): cart_id = int(request.json.get("item_id", None)) if cart_id is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() try: item = session.query(Cart).filter_by(user_id=g.user.id, id=cart_id).first() if item is None: return ResponseClass.warn(ResponseCode.ITEM_NOT_FOUND) session.delete(item) session.commit() return ResponseClass.ok() except Exception as e: pass finally: session.close()
def post(self): if g.user.role == USER_ROLE_USER: return ResponseClass.warn(ResponseCode.NOT_ROOT) else: id = request.json.get("id", None) if id is None: return ResponseClass.warn(ResponseCode.USER_NOT_EXIST) session = app_utils.AppUtils.get_session() try: user = session.query(User).filter_by(id=int(id)).first() if user is None: return ResponseClass.warn(ResponseCode.USER_NOT_EXIST) user.enable = not user.enable session.commit() return ResponseClass.ok_with_data(user.enable) finally: session.close()
def post(self): name = request.json.get("username", None) if name is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() try: user = session.query(User).filter_by(username=name).first() if user is None: user = session.query(User).filter_by(mail=name).first() if user is None: return ResponseClass.warn(ResponseCode.USER_NOT_EXIST) else: # 发送邮件 if self.send_reset_password_mail(user): return ResponseClass.ok() else: # 没发出去,服务器错误 return ResponseClass.warn(ResponseCode.SERVER_ERROR) finally: session.close()
def get(self): # 普通用户无权限 if g.user.role == USER_ROLE_USER: return ResponseClass.warn(ResponseCode.NOT_ROOT) else: session = app_utils.AppUtils.get_session() try: users = session.query(User).all() data = [user.get_minimal_data() for user in users] return ResponseClass.ok_with_data(data) finally: session.close()
def post(self): code = request.json.get('code', None) new_password = request.json.get('new_password', None) if code is None or new_password is None or not User.password_illigal( new_password): return ResponseClass.warn(ResponseCode.FORMAT_ERROR) else: user_id = cache.get(code) if user_id is None: return ResponseClass.warn(ResponseCode.SERVER_FORBIDDEN) session = AppUtils.get_session() try: user = session.query(User).filter_by(id=user_id).first() if user is None: return ResponseClass.warn(ResponseCode.USER_NOT_EXIST) user.hash_password(new_password) session.commit() cache.delete(code) cache.delete(user_id) return ResponseClass.ok_with_data(user.get_self_data()) finally: session.close()
def get(self, id): session = AppUtils.get_session() try: user = g.user if user.id != id: # 查询他人的信息 query_user = session.query(User).filter_by(id=id).first() return ResponseClass.ok_with_data(query_user.get_minimal_data( )) if query_user is not None else ResponseClass.warn( ResponseCode.USER_NOT_EXIST) else: ResponseClass.ok_with_data(user.get_self_data()) finally: session.close()
def get(self): args = self.parser.parse_args() page_num = int(args.get('page', None)) if page_num is None or type(page_num) != int or page_num <= 0: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) # 将page_num-1,适应计算 page_num = page_num - 1 session = AppUtils.get_session() from app.database_models import Threads threads = session.query(Threads).filter_by(user_id=g.user.id).offset( page_num * self.page_num_per_request).limit( self.page_num_per_request).all() threads = [tr.get_public_dict() for tr in threads] return ResponseClass.ok_with_data(threads)
def post(self): code_id = request.json.get('code_id', None) title = request.json.get('title', None) subtitile = request.json.get('subtitle', '') from app.database_models import Threads if not Threads.verify_title(title): return ResponseClass.warn(ResponseCode.FORMAT_ERROR) thread = Threads() thread.user_id = g.user.id thread.title = title thread.code_id = code_id thread.subtitle = subtitile AppUtils.add_to_sql(thread).close() return ResponseClass.ok()
def post(self): url = request.json.get("url", None) url = AppUtils.get_local_path(url) print("url:", url) session = AppUtils.get_session() from app.database_models import Code code = session.query(Code).filter_by(local_path=url).first() if code is None: return ResponseClass.warn(ResponseCode.FILE_NOT_EXIST) session.close() # 先存入CodeResult from app.database_models import CodeResult code_result = CodeResult() code_result.code_id = code.id code_result.user_id = g.user.id from app_config import code_manager session = AppUtils.add_to_sql(code_result) block = CodeBlock(user_id=code_result.user_id, task_id=code_result.id) session.close() return_value = code_manager.add_task(block) if return_value: return ResponseClass.ok_with_data({"code_id": code_result.code_id}) else: return ResponseClass.warn(ResponseCode.SUBMIT_ERROR)
def get(self): user_id = g.user.id args = self.parser.parse_args() code_id = args.get('code_id', None) if code_id is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) else: from app_config import SQLSession session = SQLSession() try: from app.database_models import CodeResult result = session.query(CodeResult).filter_by( user_id=user_id, code_id=code_id).first() if result is None: return ResponseClass.warn(ResponseCode.FILE_NOT_EXIST) return ResponseClass.ok_with_data({ "status": result.status, "result": result.result }) except Exception as e: print(e) return ResponseClass.warn(ResponseCode.SERVER_ERROR) finally: session.close()
def post(self): cart_id = int(request.json.get("item_id", None)) if cart_id is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() try: cart = Cart() cart.item_id = cart_id cart.user_id = g.user.id session.add(cart) session.commit() return ResponseClass.ok() except Exception as e: pass finally: session.close()
def get(self): args = self.parser.parse_args() thread_id = args.get("thread_id", None) page = args.get("page", None) if thread_id is None or page is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() try: from app.database_models import Comments comments = session.query(Comments) \ .filter_by(threads_id=thread_id) \ .order_by(desc(Comments.create_date)) \ .offset(int(page) * 10) \ .limit(10) \ .all() comments = [item.get_public_dict() for item in comments] return ResponseClass.ok_with_data(comments) finally: session.close()
def post(self): field = request.json.get("field", None) value = request.json.get("value", None) if field is not None and value is not None: user = g.user # 需要重新查找,这个User未绑定sql,无法更新 session = AppUtils.get_session() user = session.query(User).filter_by(id=user.id).first() try: if field == "nickname": user.nickname = value session.commit() return ResponseClass.ok() elif field == "avatar_url": user.avatar_url = value session.commit() return ResponseClass.ok() finally: session.close() return ResponseClass.warn(ResponseCode.FORMAT_ERROR)
def get_comments(self, comment_id=-1): session = AppUtils.get_session() try: if comment_id == -1: comment_id = self.comment_id comment = session.query(Comments).filter_by(id=comment_id).first() if comment is None: return ResponseClass.warn(ResponseCode.COMMENT_NOT_FOUND) # 向后获取十条评论 comments = [comment.get_public_dict()] cnt = 1 while cnt < 10 and comment.next_id is not None: n_comment = session.query(Comments).filter_by( id=comment.next_id).first() comments.append(n_comment.get_public_dict()) return comments except Exception as e: print(e) return None finally: session.close()
def get(self): args = self.parser.parse_args() page = args.get('page', None) if page is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) session = AppUtils.get_session() try: repository_items = session.query(Repository).filter_by( user_id=g.user.id).order_by( conf.database.desc(Repository.create_date)).offset( page * 10).limit(10).all() data = [] for repository_item in repository_items: item_data = AppUtils.serialize(repository_item.item) item_data['repo_id'] = repository_item.id data.append(item_data) return ResponseClass.ok_with_data(data) except Exception as e: pass finally: session.close()
def get(self): token = get_upload_token() if token == "": return ResponseClass.warn(ResponseCode.SERVER_ERROR) else: return ResponseClass.ok_with_data(token)
def post(self): email = request.json.get("email", None) if email is None: return ResponseClass.warn(ResponseCode.FORMAT_ERROR) self.send_reset_password_mail(email) return ResponseClass.ok()