Commit 1180ae73 authored by pengxiong's avatar pengxiong

配置

parent 7884b461
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : __main__.py
# @Time : 2020/11/18 下午3:17
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
from app.api.app import app
from app.api.engine import env
if __name__ == '__main__':
app.run('0.0.0.0', port=80, debug=True)
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : app.py
# @Time : 2020/11/18 下午12:45
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
from flask import Flask
from flask_restful import Api
from app.controller.errorhandler import add_errorhandler
from app.router.version1 import add_route
app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False
app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))
api = Api(app)
add_route(api)
add_errorhandler(app)
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : app.py
# @Time : 2020/11/18 下午12:45
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
import logging
import redis
import os
import sys
import yaml
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.pool import NullPool
env = sys.argv[-1]
work_dir = os.getcwd()
CFG_FILEPATH = work_dir + '/app/config/config.yaml'
config = yaml.load(open(CFG_FILEPATH, 'r'), Loader=yaml.FullLoader)
tamp_user_engine = create_engine(
'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset={charset}'.format(
db=config[env]['MySQL']['tamp_user_db'],
host=config[env]['MySQL']['host'],
port=config[env]['MySQL']['port'],
user=config[env]['MySQL']['user'],
password=config[env]['MySQL']['password'],
charset="utf8"
),
poolclass=NullPool
# max_overflow=0, # 超过连接池大小外最多创建的连接
# pool_size=10, # 连接池大小
# pool_timeout=5,
# pool_recycle=60
)
tamp_order_engine = create_engine(
'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset={charset}'.format(
db=config[env]['MySQL']['tamp_order_db'],
host=config[env]['MySQL']['host'],
port=config[env]['MySQL']['port'],
user=config[env]['MySQL']['user'],
password=config[env]['MySQL']['password'],
charset="utf8"
),
poolclass=NullPool
# max_overflow=0, # 超过连接池大小外最多创建的连接
# pool_size=10, # 连接池大小
# pool_timeout=5,
# pool_recycle=60
)
redis = redis.Redis(
host=config[env]['redis']['host'],
port=config[env]['redis']['port'],
db=config[env]['redis']['db'],
password=config[env]['redis']['password']
)
logging.basicConfig(level=logging.INFO,
# filename=work_dir + config[env]['log']['filename'],
# filemode=config[env]['log']['filemode'],
format=config[env]['log']['format'],
datefmt=config[env]['log']['datefmt']
)
class TAMP_SQL(object):
"""[sqlalchemy 封装]
Args:
object ([type]): [description]
Returns:
[type]: [description]
"""
def __init__(self, db_engine):
# 创建DBSession类型:
# self.DBSession = scoped_session(sessionmaker(bind=db_engine))
self.DBSession = sessionmaker(bind=db_engine)
self.session = self.DBSession()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
try:
self.session.commit()
except:
try:
self.session.rollback()
except:
pass
finally:
self.session.close()
native:
MySQL:
tamp_order_db: tamp_order
tamp_user_db: tamp_user
host: 47.101.189.151
port: 31931
user: dev
password: qimeng123
redis:
host: redis
port: 6379
db: 0
password:
log:
filename: /logs/financial_management.log
filemode: a
format: "%(asctime)s %(name)s %(levelname)s %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S %a"
dev:
MySQL:
tamp_order_db: tamp_order
tamp_user_db: tamp_user
host: mysql
port: 3306
user: dev
password: qimeng123
redis:
host: redis
port: 6379
db: 0
password:
log:
filename: /logs/financial_management.log
filemode: a
format: "%(asctime)s %(name)s %(levelname)s %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S %a"
test:
MySQL:
tamp_order_db: tamp_order
tamp_user_db: tamp_user
host: 118.190.63.109
port: 3306
user: root
password: '@imeng123'
redis:
host: redis.caixiaoquan.com
port: 56379
db: 0
password: qimeng123
log:
filename: /logs/financial_management.log
filemode: a
format: "%(asctime)s %(name)s %(levelname)s %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S %a"
prod:
MySQL:
tamp_order_db: tamp_order
tamp_user_db: tamp_user
host: pc-uf666afrpfg8yj768.rwlb.rds.aliyuncs.com
port: 3306
user: tamp_admin
password: '@imeng123'
redis:
host: r-uf6atruhdbq89enqz0.redis.rds.aliyuncs.com
port: 6379
db: 0
password: '@imeng123'
log:
filename: /logs/financial_management.log
filemode: a
format: "%(asctime)s %(name)s %(levelname)s %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S %a"
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : errors.py
# @Time : 2020/11/25 上午9:20
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
class Errors:
""""""
TOKEN_INVALID = '9001'
USER_ALREADY_EXISTS = '9002'
APPLE_VOCHER_INVALID = '9003'
TANGPU_BALANCE_NOT_ENOUGH = '9004'
APPLE_VOCHER_USED = '9005'
INPUT_PARAMS_ERROR = '9006'
REPEAT_BUY = '9007'
PROD_NOPRICE = '9008'
NO_ORDERS = '9009'
PARAMS_ERROR = '9010'
MSG = {
TOKEN_INVALID: 'TOKEN失效',
USER_ALREADY_EXISTS: '用户已经存在',
APPLE_VOCHER_INVALID: '苹果证书无效',
TANGPU_BALANCE_NOT_ENOUGH: '探普币余额不足',
APPLE_VOCHER_USED: '该支付凭证已使用',
INPUT_PARAMS_ERROR: '入参错误',
REPEAT_BUY: '请勿重复购买商品',
PROD_NOPRICE: '商品未定价',
NO_ORDERS: '未找到订单',
PARAMS_ERROR: '入参错误'
}
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : errorhandler.py
# @Time : 2020/11/25 上午9:19
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
import time
import requests
from flask import jsonify, make_response, request
from app.api.engine import config, env, redis
from app.config.errors import Errors
from app.api.engine import logging
class CustomFlaskErr(Exception):
# 默认的返回码
status_code = 200
# 自己定义了一个 return_code,作为更细颗粒度的错误代码
def __init__(self, return_code=None, status_code=None, payload=None):
Exception.__init__(self)
self.return_code = return_code
if status_code is not None:
self.status_code = status_code
self.payload = payload
# 构造要返回的错误代码和错误信息的 dict
def to_dict(self):
rv = dict(self.payload or ())
# 增加 dict key: return code
rv['statusCode'] = self.return_code
# 增加 dict key: message, 具体内容由常量定义文件中通过 return_code 转化而来
rv['message'] = Errors.MSG[self.return_code]
return rv
def add_errorhandler(app):
@app.errorhandler(CustomFlaskErr)
def handle_flask_error(error):
# response 的 json 内容为自定义错误代码和错误信息
response = jsonify(error.to_dict())
# response 返回 error 发生时定义的标准错误代码
response.status_code = error.status_code
return response
@app.errorhandler(500)
def handle_flask_error(error):
# response 的 json 内容为自定义错误代码和错误信息
response = jsonify({'statusCode': '9999', 'message': '服务器错误'})
# response 返回 error 发生时定义的标准错误代码
response.status_code = 200
return response
@app.before_request
def before_request():
# token鉴权
# 安卓,ios取token
token = ''
if request.headers.get('env') in ['ios', 'android']:
token = request.headers.get('tampToken', '')
elif request.headers.get('env') in ['wechat', 'xcx']:
token = request.cookies.get('qimsession', '')
if request.path in ['/tamp_order/micro_shop/topUpOrderNotify', '/tamp_order/micro_shop/consumeOrderNotify']:
pass
else:
user_id = redis.get('s:sid:'+token)
if not user_id:
logging.error('鉴权失败,token:'+token)
raise CustomFlaskErr(Errors.TOKEN_INVALID)
if isinstance(user_id, bytes):
request.user_id = user_id.decode().replace('"', '')
else:
request.user_id = user_id.replace('"', '')
request.return_success = {'statusCode': "0000", 'message': 'ok'}
@app.after_request
def after_request(response):
response.headers['Access-Control-Allow-Origin'] = '*'
response.headers['Access-Control-Allow-Methods'] = 'PUT,GET,POST,DELETE,OPTIONS'
response.headers['Access-Control-Allow-Headers'] = (
"Content-Type,Referer,Accept,Origin,User-Agent"
"field,Cache-Control,X-Requested-With"
)
return response
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : version1.py
# @Time : 2020/11/18 下午3:31
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
# from app.controller.order import *
def add_route(api):
"""注册路由"""
# 充值订单
# api.add_resource(TopUpOrder, '/tamp_order/micro_shop/topUpOrder')
pass
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment