def del_comm(): """ 删除商品信息 :return: """ id = request.args["id"] if id: comm = Commodity.del_comm(id) if comm: return Success(msg="删除商品成功") else: return Failed(msg="此商品不存在") else: return Failed(msg="请传入商品id")
def login(): data = eval(str(request.data, encoding='utf-8')) form = Login(ImmutableMultiDict(data)) if form.validate(): # 数据校验 user = db.session.query(UserInfo).filter(UserInfo.nickName == form.nickName.data).first() if user and user.check_password(form.passWord.data): identity['uid'] = user.id access_token = create_access_token(identity=identity) refresh_token = create_refresh_token(identity=identity) return {"access_token": access_token, "refresh_token": refresh_token} else: return Failed(msg="获取token失败") else: return Failed(msg=form.errors)
def place(self): if not self.mid or not self.products: raise Failed(msg='缺少会员ID和商品参数, 下单失败') with db.auto_commit(): self.o_products = self._get_o_products() order_snap = self._snap_order() res = self._create_order(order_snap) return res
def change_password(): form = ChangePasswordForm().validate_for_api() user = get_current_user() ok = user.change_password(form.old_password.data, form.new_password.data) if ok: db.session.commit() return Success(msg='密码修改成功') else: return Failed(msg='修改密码失败')
def register_user(cls, form): nickName = UserInfo.query.filter_by( nickName=form.nickName.data).first() if nickName: raise Failed("名称以被使用") phoneCode = UserInfo.query.filter_by( phoneCode=form.phoneCode.data).first() if phoneCode: raise Failed("用户以注册") user = UserInfo() user.password = form.passWord.data UserInfo.create(nickName=form.nickName.data, _passWord=user._passWord, phoneCode=form.phoneCode.data, commit=True)
def bind_mini(): form = BindMiniForm().validate_for_api() user = manager.user_model.verify(form.username.data, form.password.data) appid = current_app.config.get('APP_ID') secret = current_app.config.get('APP_SECRET') code = form.code.data url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + code + \ '&grant_type=authorization_code' res = requests.get(url) if 'openid' not in res.json().keys(): return Failed('小程序用户异常') openid = res.json()['openid'] if manager.user_model.query.filter_by(openid=openid).first(): return Failed('小程序已经与其他账号绑定') if user.openid: return Failed('当前账号已经被其他用户绑定') with db.auto_commit(): user.openid = openid return Success('绑定成功')
def add_comm(): """ 添加商品信息 :return: """ data = eval(str(request.data, encoding='utf-8')) form = CommForm(ImmutableMultiDict(data)) if form.validate(): Commodity.insert_comm(data) # 添加商品到数据库 return Success(msg="添加商品成功") else: return Failed(msg=form.errors)
def put_comm(): """ 更新商品信息 :return: """ data = eval(str(request.data, encoding='utf-8')) form = PutCommForm(ImmutableMultiDict(data)) if form.validate(): if Commodity.update_comm(data): return Success(msg="更新商品成功") else: return Failed(msg=form.errors)
def upload_to_ali(): image = request.files.get('image', None) if not image: raise ParameterException(msg='没有找到图片') if image and allowed_file(image.filename): url = upload_image_bytes(image.filename, image) if url: res = {'url': url} with db.auto_commit(): exist = Image.get(url=url) if not exist: data = {'from': LocalOrCloud.CLOUD.value, 'url': url} one = Image.create(**data) db.session.flush() res['id'] = one.id else: res['id'] = exist.id return jsonify(res) return Failed(msg='上传图片失败,请检查图片路径')
def upload_to_ali(): image = request.files.get("image", None) if not image: raise ParameterError("没有找到图片") if image and allowed_file(image.filename): url = upload_image_bytes(image.filename, image) if url: res = {"url": url} with db.auto_commit(): exist = OSS.get(url=url) if not exist: data = {"url": url} one = OSS.create(**data) db.session.flush() res["id"] = one.id else: res["id"] = exist.id return jsonify(res) return Failed("上传图片失败,请检查图片路径")
def login_mini(): form = LoginMiniForm().validate_for_api() appid = current_app.config.get('APP_ID') secret = current_app.config.get('APP_SECRET') code = form.code.data url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + code + \ '&grant_type=authorization_code' res = requests.get(url) if 'openid' not in res.json().keys(): return Failed('小程序用户异常') openid = res.json()['openid'] user = manager.user_model.query.filter_by(openid=openid).first_or_404() # 此处不能用装饰器记录日志 Log.create_log( message=f'{user.username}小程序登陆成功获取了令牌', user_id=user.id, user_name=user.username, status_code=200, method='post', path='/cms/user/login/mini', authority='无', commit=True ) access_token, refresh_token = get_tokens(user) return json_res(access_token=access_token, refresh_token=refresh_token)
def _get_product_status(self, product, o_product): total_price = (o_product.price * product['count']).quantize( Decimal('0.00')) old_price = o_product.old_price if o_product.old_price else o_product.price old_total_price = (old_price * product['count']).quantize( Decimal('0.00')) p_status = dict() p_status['id'] = o_product.id p_status['name'] = o_product.name p_status['count'] = product['count'] p_status['image'] = o_product.image p_status['price_str'] = o_product.price_str p_status['old_price_str'] = o_product.old_price_str p_status['total_price_str'] = str(total_price) p_status['old_total_price_str'] = str(old_total_price) have_stock = o_product.stock >= product['count'] if not have_stock: raise Failed(msg='{}的库存不足, 下单失败'.format(o_product.name)) stock = o_product.stock - product['count'] o_product.update(stock=stock) return p_status
def login(): form = LoginForm().validate_for_api() # 校对验证码 if current_app.config.get("LOGIN_CAPTCHA"): tag = request.headers.get("tag") secret_key = current_app.config.get("SECRET_KEY") serializer = JWSSerializer(secret_key) if form.captcha.data != serializer.loads(tag): raise Failed("验证码校验失败") user = manager.user_model.verify(form.username.data, form.password.data) # 用户未登录,此处不能用装饰器记录日志 Log.create_log( message=f"{user.username}登录成功获取了令牌", user_id=user.id, username=user.username, status_code=200, method="post", path="/cms/user/login", permission="", commit=True, ) access_token, refresh_token = get_tokens(user) return {"access_token": access_token, "refresh_token": refresh_token}