zoukankan      html  css  js  c++  java
  • Python-mock接口开发

    一、加密

    import hashlib
    
    # 对称/不对称加密
    s = '123456'
    m = hashlib.md5(s.encode())
    # md5加密是不可逆的,简单的加密是因为他们库里有存
    # m = hashlib.sha256(s.encode())  #sha256
    result = m.hexdigest()
    print(result)

    二、mock接口开发

    mock是模拟一个接口的意思,需要安装第三方模块flask(flask是web轻量级开发框架)

    import flask
    import json
    import pymysql
    import hashlib
    import redis
    import time
    # flask轻量级的web开发框架
    
    server = flask.Flask(__name__)
    
    
    def op_mysql(sql, one_tag=False):
        connect = pymysql.connect(host='***.**.*.**',
                                  user='jxz',
                                  password='123456',
                                  db='jxz',
                                  port=3306,
                                  charset='utf8',
                                  autocommit=True)
        cursor = connect.cursor(pymysql.cursors.DictCursor)
        cursor.execute(sql)
        if one_tag:
            result = cursor.fetchone()
        else:
            result = cursor.fetchall()
        cursor.close()
        connect.close()
        return result
    
    
    def md5(s, salt='ccx_iodsgs233_12'):  #md5加密
        s = str(s)+ salt
        m = hashlib.md5(s.encode())
        return m.hexdigest()
    # md5加密之后,是固定的,这样的安全性不够高
    # 可以加盐,salt='ccx_iodsgs233_12',设置一串复杂的字符串,加强安全性
    
    def op_redis(key, value=None, expire=60 * 60 * 2):
        r = redis.Redis(host='118.24.3.40', password='HK139bc&*', decode_responses=True)
        if value:    #如果传入值不为空,则保存值
            r.set(key, value, expire)
        else:       #value值为空,则获取值
            return r.get(key)
    
    # 支付接口
    @server.route('/api/payment')  # methods=['postget'],默认get请求
    def payment():
        status = flask.request.values.get('status')
        if status == 'success':
            data = {"code": 0, "msg": "支付成功", "amount": 30000}
        elif status == 'process':
            data = {'code': 305, 'msg': '支付处理中', 'amount': 30000}
        elif status == 'fail':
            data = {'code': -1, 'msg': '支付失败', 'amount': 30000}
        else:
            data = {'code': 400, 'msg': '支付状态错误', 'amount': 30000}
        return json.dumps(data, ensure_ascii=False)
    
    # 登录接口
    @server.route('/api/login_old')
    def login_old():
        data = {'code': 0, 'msg': '登陆成功'}
        return json.dumps(data, ensure_ascii=False)
    
    
    @server.route('/account_data', methods=['post'])
    def account_data():
        account_name = flask.request.values.get('account_name')  #获取请求参数
        # flask.request.json.get()  #获取json格式的参数
        result = op_mysql('select * from gtm_account where acount="%s";' % account_name)
        data = {"code": 0, "msg": "success", "data": result}
        return json.dumps(data, ensure_ascii=False)
    
    # 注册接口
    @server.route('/register', methods=['post'])
    def register():
        username = flask.request.values.get('username')
        password = flask.request.values.get('password')
        cpwd = flask.request.values.get('cpwd')
        sql='select * from app_myuser where username="%s";'%username
        if username and password and cpwd:  #输入参数均不为空
            if password!=cpwd:
                data = {"code": 400, "msg": "两次输入密码不一致"}
            elif op_mysql(sql):  #如果查询结果不为空,则不能注册
                data = {'code': 401, 'msg': '用户已经存在'}
            else:
                password = md5(password)
                insert_sql='insert into app_myuser(username,passwd) values ("%s","%s");'%(username,password)
                op_mysql(insert_sql)
                data = {'code': 0, 'msg': '注册成功'}
        else:
            data = {'code': 400, 'msg': '必填参数不能为空'}
        return json.dumps(data, ensure_ascii=False)
    
    
    # 1.登录接口--生成token
    # 登录成功后要返回token,token=username+timestamp md5加密
    @server.route('/login',methods=['post'])
    def login():   #app_myuser
        username = flask.request.values.get('username')
        password = flask.request.values.get('password')
        if username and password:
            sql = 'select * from app_myuser where username="%s";' % username
            result = op_mysql(sql,True)
            if result:
                if md5(password) == result.get('passwd'):
                    token = md5(username + str(time.time()))  #token:uname+timestamp md5加密,保存到redis中,设置有效时间
                    info = {'username': username, 'id': result.get('id')}
                    op_redis(token, json.dumps(info))
                    data = {"code": 0, "msg": "登录成功",'token':token}
                else:
                    data = {'code': 403, 'msg': '帐号/密码错误'}
            else:
                data = {'code': 401, 'msg': '用户不存在'}
        else:
            data = {'code': 400, 'msg': '必填参数不能为空'}
    
        return json.dumps(data, ensure_ascii=False)
    
    # 2.支付接口--校验token
    @server.route('/api/v2/payment')  # methods=['postget'],默认get请求
    def payment_v2():
        token = flask.request.values.get('token')
        amount = flask.request.values.get('amount')
        if token:  #如果token不为空,则去redis中查询用户信息
            result = op_redis(token)
            if result:
                amount = float(amount)
                result = json.loads(result)
                userid = result.get('id')
                sql = 'update app_myuser set balance=balance-%s where id=%s;' % (amount, userid)
                op_mysql(sql)
                data = {'code': 0, 'msg': '支付成功'}
            else:
                data = {'code': 401, 'msg': '未登录'}
        else:
            data = {'code': 401, 'msg': '未登录'}
    
        return json.dumps(data, ensure_ascii=False)
    
    
    server.run(port=9999, debug=True)   #此服务运行一次就可
    # 注:
    # server.run(host='0.0.0.0', port=9999, debug=True)
    # host='0.0.0.0'   别人也可访问,手机也可访问,必须在同一个局域网中
    # http:\ip:8000apipayment

    运行结果:

    1、登录成功后要返回token

     2、支付接口--校验token

  • 相关阅读:
    内容生成器.计数器及多列
    STT-MTJ(自旋转移矩磁隧道结)模型的Verilog-A语言描述(仅参考)
    将进酒-唐·李白
    三十六计、孙子兵法
    Keil新建工程步骤
    No.6 Verilog 其他论题
    2-4 Numpy+Matplotlib可视化(二)
    2-3 Numpy+Matplotlib可视化(一)
    0-0 列表,元组,字典,集合
    2-2 Numpy-矩阵
  • 原文地址:https://www.cnblogs.com/ccxm/p/13574989.html
Copyright © 2011-2022 走看看