• python(接口测试与flask框架)


    什么是接口:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。

    mock接口 :就是模拟接口。

    使用flask模块进行接口开发

    web服务其实是:1.启动一个服务,2接收客户端传过来的数据,3,登录,注册,删除,上传,修改,等数据,4返回数据信息。

    返回时间接口

    import flask,datetime#导入flask,和时间模块
    server = flask.Flask(__name__)#作为一个服务
    @server.route("/cc")#括号里写的是访问时的路径地址
    def get_time():
        now = str(datetime.datetime.now())
        return "现在时间是:%s"%now
    server.run(host="0.0.0.0",port=8888,debug=True)#启动服务,host写成0.0.0.同一个局域网可以访问,debug=True重启服务
    返回时间接口

    跳转到我的网页接口

    1.先好html网页,在写接口进行跳转

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>我的网站</title>
    </head>
    <body>
    <input type="text" placeholder="请输入你的账号">
    <input type="password" placeholder="请输入你的密码">
    
    <input type="button" value="提交">
    <div style=" 80px;height: 80px;background-color: green" >
    
    </div>
    
    <a href="http://www.baidu.com">点我</a>
    
    </body>
    </html>
    写网页
    import flask  #导入flask
    server = flask.Flask(__name__) #作为一个服务
    @server.route("/index") #括号里写的是访问时的路径地址,必须已/开头
    def my_page():
        f = open('index.html',encoding='utf-8') #打开网页为index.html的网页
    #文件必须放在同级目录下,不然会出错,或者直接写文件的绝对路径
        res = f.read() #读取
        f.close()  #关闭
        return res
    server.run(port=8888)#启动服务
    跳转到我的网页

    登录接口

    flask获取请求参数、连接数据库1、传参,2、执行sql查数据库(已有该表)3、返回结果

    import flask  #导入flask
    server = flask.Flask(__name__) #作为一个服务
    def login():
        #登录需要两个参数,name和pwd
        uname=flask.request.values.get('username')# 传参,前面的是变量,括号里面是key
        passwd=flask.request.values.get('password')
        # args 这个方法就只能获取到url里面传的参数
        # values 这个方法不管你是url里面传的参数还是,k-v传的,都可以获取到的
        if uname and passwd:# 非空为真
    # 需要先写一个导入数据库的函数,例如我写了一个名称为tools的函数(如图),放在另一个python文件中,import tools进行调用。当然也可以直接写在本python文件中,但是显得会累赘。
            sql="SELECT * FROM app_myuser WHERE username='%s' AND passwd='%s';"%(uname,passwd)
            result = tools.my_db(sql)#执行sql
            if result:
                res={"error_code":1000,"mag":"登录成功"}
            # 接口返回的都是json,所以要这样写。先导入json模块,import json。
            else:
                res = {"error_code": 3001, "mag": "账号或密码错误!"}
        else:
            res={"error_code":3000,"mag":"必填参数未填,请查看接口文档!"}
        return  json.dumps(res,ensure_ascii=False)
        #防止出现乱码;json.dumps()函数是将字典转化为字符串
    server.run(port=8888)
    登录接口
    import pymysql
    
    def my_db(sql):
        conn=pymysql.connect(
            host='xxx.xxx.xxx.xx',#数据库地址
            user='xxx',  #用户名
            password='123456',#密码
            db='jxz',  #数据库名
            charset='utf8',
            autocommit=True# 自动提交
    
        )
        cur=conn.cursor(cursor=pymysql.cursors.DictCursor)# 建立游标;默认返回二维数组,DictCursor指定返回字典;
        cur.execute(sql)#execute帮你执行sql
        res=cur.fetchall()#拿到全部sql执行结果
        cur.close()# 关闭游标
        conn.close()# 关闭数据库
        return res # 返回sql执行的结果
    数据库连接

    新增用户接口

    1.flask获取请求参数、2.连接数据库;3.入参是json类型,参数有限制,4.sql语句新增用户

    import flask,json,tools  #导入flask, tools 存放数据库的操作
    server = flask.Flask(__name__) #作为一个服务
    @server.route('/add_student',methods=['post'])
    def add_student():
        params=flask.request.json #入参是字典json时用它,下面的代码要判断传入的参数是否是json类型
        if params:
            name=params.get('name')
            sex=params.get('sex','')# 如果没有传。默认值是男
            age=str(params.get('age'))# int
            addr=params.get('addr')
            grade=params.get('grade')
            phone=str(params.get('phone'))# 最少11位,不能重复
            gold=str(params.get('gold',500)) # 金币可以是小数,如果没有传默认是500
            if name and age and addr and grade and phone:# 必填参数校验
    
                if sex not in['','']: #如果性别不是男或者女
                    res = {"error_code": 3003, "msg": "性别只能是男或者女"}
                elif not age.isdigit():# 如果不是整数类型
                    res = {"error_code": 3004, "msg": "年龄输入错误"}
                elif len(phone)!=11 or not phone.isdigit():
                    res = {"error_code": 3005, "msg": "手机号输入错误"}
                elif not gold.isdigit() and not tools.check.float(gold):#如果不是整数也不是小数
                    res = {"error_code": 3006, "msg": "金币输入错误"}
                else:
                    sql="select* from app_student where phone='%s';"%phone #查看数据库中是否有这个手机号,有的话说明重复
                    result = tools.my_db(sql)  # 执行sql
                    if result:
                        res = {"error_code": 1000, "msg": "手机号已经存在"}
                    else:
                        sql = "INSERT INTO app_student(NAME,sex,age,addr,grade,phone,gold)VALUES('%s','%s',%s,'%s','%s',%s,'%s')" % (
                            name, sex, age, addr, grade, phone, gold)
                        tools.my_db(sql)
                        res = {"error_code": 200, "msg": "新增成功! "}
            else:
                res = {"error_code": 3007, "msg": "必填参数未填写"}
        else:
            res={"error_code":3002,"msg":"入参必须是json类型"}
        return  json.dumps(res,ensure_ascii=False)#防止出现乱码
    
    server.run(port=8888)
    新增用户

    文件上传接口

    import flask,json,datetime  #导入flask, tools 存放数据库的操作
    server = flask.Flask(__name__) #作为一个服务
    
    def file_upload():
        f=flask.request.files.get('wjm',None)
        # 上传文件,取一个名字,再给名字一个默认值None
        if f:# 如果文件不为空
            cur_time=datetime.datetime.now().strftime("%Y%m%d%H%M%S")
        # 如果上传同一个文件两次,会被覆盖,所以加一个当前日期,并指定日期格式strftime("%Y%m%d%H%M%S")
            new_file_name=cur_time+f.filename# 新文件名=时间+原来的文件名
            f.save(new_file_name)#保存文件
            res={"msg":"文件上传成功"}
        else:
            res={"msg":"没有上传文件"}
        return  json.dumps(res,ensure_ascii=False)#防止出现乱码
    
    server.run(port=8888)
    文件上传
  • 相关阅读:
    getter 和 setter方法
    了解coredata 数据库的博客
    iOS 本地缓存简述
    iOS 9.0 xcode7
    iOS 直播推流SDK -- PLCameraStreamingKit
    时间充裕的时候看看技术总结
    技术分享7
    学习笔记-音频编解码
    学习笔记-weak strong ARC mrc
    飘雪效果的swf
  • 原文地址:https://www.cnblogs.com/test49355--/p/10392744.html
Copyright © 2020-2023  润新知