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

    Flask 是基于python的轻量级web开发框架,可以快速实现一个网站服务;

    模拟一个第三方支付接口,通过前端访问并返回:

    import flask
    import json
    from flask import Flask,request server_name
    = flask.Flask(__name__) #定义服务名 @server_name.route('/api/payment',methods=['get']) #设置要访问的接口地址和请求方法 def payment(): status = request.values.get('status')#获取参数 if status == 'success': data = {"code":0,"msg":"支付成功","amount":30000} else: data = {"code":-1,"msg":"失败","amount":30000} return json.dumps(data,ensure_ascii=False) #返回参数 server_name.run(host='0.0.0.0',port=9999,debug=True) #运行,服务ip为本机地址

    直接浏览器访问

    #flask 参数传递:

    1.get请求
    request.args.get("key") 获取get请求参数

    2.post请求

    1/获取json:
    data = request.get_data()

    data = json.loads(data)

    username = data['username']

    2/获取json:

    data = request.get_json()

    username = data['username']

    3、获取form表单:

    username = request.form['username']

    开发一个注册接口,并写入数据库,且密码加密存储

    import flask
    import json
    import pymysql
    import hashlib   #md5加密
    
    server_name = flask.Flask(__name__)
    
    def op_mysql(mysql,one_tag=False):
        connect = pymysql.connect(host='118.24.3.40',
                        user='jxz',
                        password='123456',
                        db='jxz',
                        port=3306,
                        charset='utf8',
                        autocommit=True
        )
        cursor = connect.cursor(pymysql.cursors.DictCursor)
        cursor.execute(mysql)
        if one_tag:
            result = cursor.fetchone()
        else:
            result = cursor.fetchall()
        cursor.close()
        connect.close()
        return result
    
    def md5(s,salt='www'):     #加密,salt-加盐操作,  md5加密后不可解密。
        s = str(s) + salt
        m = hashlib.md5(s.encode())
        return m.hexdigest()
    
    @server_name.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 = 'insert into app_myuser (user_name,passwd) values ("%s","%s");' %(username,password)
        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 (user_name,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)
    

     开发一个支付接口,传入token,并校验、获取userid、更新数据库

    def op_redis(key,value=None,expire=60*60*2):    #请求redis,根据token获取 userid
        r = redis.Redis(host='118.24.3.40',password='HK139bc&*',decode_responses=True)
        if value:
            r.set(key,value,expire)
        else:
            return r.get(key)
    
    @server_name.route('/api/v2/payment',methods=['get'])
    def paymeng_v2():
        token = flask.request.values.get('token')
        amount = flask.request.values.get('amount')
        if token:
            result = op_redis(token)
            if result:
                amount = float(amount)
                result = json.loads(result)
                userid = result.get('id')
                sql = 'update app_myuser set balance=%s where id = %s;' %(amount,userid)
                op_mysql(sql)
                data = {'code': 0, 'msg': '支付成功'}
            else:
                data = {'code': 401, 'msg': '未登录'}
        return json.dumps(data,ensure_ascii=False)

    fastapi模块开发接口;

    import fastapi
    import uvicorn
    
    server_name = fastapi.FastAPI()  #实例化一个服务
    
    @server_name.get('/get')  #定义一个get接口
    def index(id:int,sex:str):  #定义请求参数和数据类型
        if sex =='':
            data = {'id':id,'sex':''}
        else:
            data = {'id': id, 'sex': ''}
        return data
    
    #post接口,入参json类型
    from pydantic import BaseModel
    class User(BaseModel):
        username:str
        password:str
        phone:str
    
    @server_name.post('/user')
    def user(u:User):
        print(u.username)
        print(u.password)
        print(u.phone)
        data = {'code':0,'username':u.username}
        return data
    
    if __name__ == '__main__':    #必须加才能启动服务
        uvicorn.run('t1:server_name',port=9000,debug=True)  #t1是当前python文件名,server_name是实例名

    #### ip:port/docs   可查看生成的接口文档,文档上可以跑接口 ###

    接口请求返回示例:

  • 相关阅读:
    HDU-2544-最短路(floyd)
    HDU-1009-肥鼠交易
    BZOJ-3029: 守卫者的挑战 (期望DP)
    2017年10月23日23:58:04
    BZOJ-2456: mode (神题)
    BZOJ-4542: [Hnoi2016]大数 (莫队算法)
    BZOJ-2120: 数颜色 (带修改莫队)
    BZOJ-2654: tree (kruskal)
    BZOJ-1040: [ZJOI2008]骑士 (树形DP)
    BZOJ-3505: [Cqoi2014]数三角形 (容斥原理+排列组合)
  • 原文地址:https://www.cnblogs.com/whcp855/p/13064770.html
Copyright © 2011-2022 走看看