def get_access_token_from_wx(): """从微信服务器获取 access_token """ params = { "grant_type": "client_credential", "appid": current_app.config['APP_ID'], "secret": current_app.config['APP_SECRET'] } base_url = current_app.config['GET_TOKEN_BASE_URL'] index = 1 while True: # 防止死循环 index += 1 if index > 5: raise ServerError(msg='get wx access_token timeout') try: response = requests.post(base_url, params).json() access_token = response.get('access_token') if access_token: # 将 token 存入暂存数据表 expires_at = int(response.get('expires_in')) + int( datetime.now().timestamp()) set_value_by_key(key='wx_access_token', value=access_token, expires_at=expires_at, des='微信小程序 access_token') return access_token elif response.get('errcode') == -1: # -1 代表微信服务器繁忙 pass else: raise ServerError() except Exception: raise ServerError()
def default_error_handler(error): """ 默认异常处理 :param error: :return: """ app.logger.fatal(traceback.format_exc()) error = ServerError() return error.as_response()
def __login_by_mina(code): openid = MemberService.get_wechat_openid(code) if openid is None: raise ServerError(msg='调用微信出错', error_code=2001) bind_info = check_member_bind(openid, 1) if not bind_info: req = request.json nickname = req['nickName'] if 'nickName' in req else '' sex = req['gender'] if 'gender' in req else 0 avatar = req['avatarUrl'] if 'avatarUrl' in req else '' model_member = Member() model_member.nickname = nickname model_member.sex = sex model_member.avatar = avatar model_member.salt = MemberService.gene_salt() model_member.updated_time = model_member.created_time = get_current_date( ) with db.auto_commit(): db.session.add(model_member) with db.auto_commit(): model_bind = MemberAuthBind() model_bind.member_id = model_member.id model_bind.type = ClientTypeEnum.USER_MINA.value model_bind.openid = openid model_bind.extra = '' model_bind.updated_time = model_bind.created_time = get_current_date( ) db.session.add(model_bind) bind_info = model_member member_info = Member.query.filter_by(id=bind_info.id).first() return member_info
def default(self, o): """default 是可以递归调用的""" if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): #当一个对象有keys和__gettiem__方法 它的属性可以被 obj['名字'] 这样调用 return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) # 兼容其他的序列化 if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError()
def store_performance(data): with db.auto_commit(): performance = MicroPerformance() try: [setattr(performance, key, data[key]) for key in data.keys()] db.session.add(performance) except Exception as e: raise ServerError(e)
def default(self, o): try: val = super(JSONEncoder, self).default(o) return val except: if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) raise ServerError()
def default(self, o): # 容错:客户端不能解决的问题就不要用 if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) # 遇到不能序列化的会递归调用,需要考虑时间 if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError()
def article_api(): form = ArticleForm(request) try: if form.validate_for_api(): urllist = api_urllist(form) return send_url_etcd(urllist, form) except: return ServerError(msg="服务端错误,请联系技术人员处理")
def framework(e): if isinstance(e, APIException): return e elif isinstance(e, HTTPException): return APIException(e.description, e.code, 1007) elif current_app.config['DEBUG']: raise e return ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): d = dict(o) d = {**d, 'err_code': 0, 'msg': ''} return d if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError()
def default(self, o): # 将sqlalchemy对象返回为字典格式 if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') if isinstance(o, datetime): return o.strftime('%Y-%m-%d %H:%M:%S') raise ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) # python不能序列化的对象要特殊处理 if isinstance(o, date): return o.strftime('%Y-%m-%d') if isinstance(o, Decimal): return o.__float__() raise ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') # 定义decimal类型的序列化方法 if isinstance(o, decimal.Decimal): return "%.2f" % o raise ServerError()
def default(self, o): # default 递归调用 if hasattr(o, "keys") and hasattr(o, "__getitem__"): return dict(o) if isinstance(o, date): return o.strftime("%Y-%m-%d") raise ServerError()
def default(self, o: Any): if hasattr(o, 'serialize'): return o.serialize() if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, UserTypeEnum): return o.user_str(o) if isinstance(o, date): return o.isoformat() raise ServerError()
def get_openId(code): result = requests.get(current_app.config['LOGINURL'].format( current_app.config['APPID'], current_app.config['APPSECRET'], code )) print(json.loads(result.text)["openid"]) if not result: raise ServerError("微信内部错误") return {"openId": json.loads(result.text)["openid"]}
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') if hasattr(o, '__dict__'): return o.__dict__ if isinstance(o, Decimal): return str(o.quantize(Decimal('0.00'))) raise ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) #如果对象里面,有属性是时间对象,另外处理 if isinstance(o, datetime): return o.strftime('%Y-%m-%d %H:%M:%S') if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError() # 具体的错误信息反馈到客户端,也没用,返回一个统一的
def framework_error(e): if isinstance(e, APIException): return e elif isinstance(e, HTTPException): return APIException(code=e.code, error_code=1007, msg=e.description) else: if not app.config['DEBUG']: return ServerError() # 未知错误(统一为服务端异常) else: raise e
def framework_error(e): #flask 1.0 #APIException #HTTPException #Exception if isinstance(e,APIException): return e if isinstance(e,HTTPException): code = e.code msg = e.description error_code = 1007 return APIException(msg, code, error_code) else: #log if not app.config('DEBUG'): return ServerError() else: raise e return ServerError()
def framework_errpr(e): # flask 1.0 可以捕获所有异常 if isinstance(e, APIException): return e if isinstance(e, HTTPException): code = e.code msg = e.description error_code = 1007 return APIException(msg, code, error_code) else: # 做一个日志log的记录 # 这样可读性不是很好,因此再定义一个ServerError() # 调试模式,显示详细信息,否则,返回我们定义的json错误信息 if not app.config['DEBUG']: return ServerError() else: raise e return ServerError()
def default(self, o): # 把对象转换为字典,__init__类的变量是不会被存在__dict__,实例变量不会存在于这里面。例如init里面的 # 一个对象不可以用o['name']的方式访问变量,但是如果给它增加__getitem__方法后就可以, # getattr获取对象下面的对应值,getattr(o,item) # 当有keys属性,和__getitem__方法时才返回 if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) # if isinstance(o, date): # return o.strftime('%Y-%m-%d') raise ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, object): return o.__dict__ if isinstance(o, date): return o.strftime('%Y-%m-%d') if isinstance(o, datetime): return o.strftime("%Y-%m-%d %H-%M-%S") raise ServerError()
def frame_workerror(e): if isinstance(e, APIException): return e if isinstance(e, HTTPException): code = e.code msg = e.description error_code = 1007 return APIException(msg, code, error_code) else: return ServerError()
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): # 使用dict将对象序列化,需要在对象中实现keys和__getitem__方法 return dict(o) if isinstance(o, date): # 不能序列化的对象,单独在JSONEncoder.default里来处理转化 return o.strftime('%Y-%m-%d') # 不能序列化的抛出异常 raise ServerError()
def default(self, o): """ 如果遇到不能序列化的数据,在下面添加if语句进行序列化 :param o: 序列化的源数据 :return: """ if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') raise ServerError()
def __http_to_wx(url): res = _request.Request(url=url) res = _request.urlopen(res) res = res.read().decode('ascii') res = json.loads(res) if 'openid' in res.keys(): uid = User.register(res['openid']) token = generate_auth_token(uid) return token else: raise ServerError(msg='获取openid时异,微信内部错误')
def default(self, o): if hasattr(o, 'keys') and hasattr(o, '__getitem__'): return dict(o) if isinstance(o, date): return o.strftime('%Y-%m-%d') if isinstance(o, datetime): return http_date(o.utctimetuple()) if isinstance(o, uuid.UUID): return str(o) if dataclasses and dataclasses.is_dataclass(o): return dataclasses.asdict(o) raise ServerError()