跟牛牛老师学习python自动化的第七天

接口开发

先安装一个模块:pip install flask  用它来启动一个服务,flask是一个web框架

1、知道接口是怎么开发的
2、避免别人操作你的数据库
3、mock服务(模拟一个服务)

一个简单的接口:

1 import flask
2 server = flask.Flask(__name__)#把当前这个python文件当做一个服务
3 @server.route('/login',methods=['get','post'])#装饰器
4 def zjr():
5     return '登录成功!'
6 server.run(port=8989,debug=True)#启动服务,端口号为8989,修改后自动重启

启动后:

重新运行只能启动一个,否则端口号会重复,点击服务网址,加域名(http://127.0.0.1:8989/login)

跟牛牛老师学习python自动化的第七天

 访问服务:http://127.0.0.1:8989/login

 跟牛牛老师学习python自动化的第七天

 用postman访问接口

写死的参数:

1 import flask
2 import json
3 server = flask.Flask(__name__)#把当前这个python文件当做一个服务
4 @server.route('/login',methods=['get','post'])#装饰器
5 def zjr():
6     res = {'code':1000,'msg':'登录成功!','sign':'sbhjsgurhuheuih'}#创建了一个字典
7     return json.dumps(res,ensure_ascii=False)#不能直接返回字典,需要用json.dumps转成json串
8 #ensure_ascii=False加这个参数,可以返回中文
9 server.run(port=8989,debug=True)#启动服务,端口号为8989,修改后自动重启

跟牛牛老师学习python自动化的第七天

用postman传参(k-v):

 1 import flask
 2 import json
 3 server = flask.Flask(__name__)#把当前这个python文件当做一个服务
 4 @server.route('/login',methods=['get','post'])#装饰器,下面的函数不是普通的函数而是个接口
  5 def zjr():  6 username = flask.request.values.get('username')#是从客户端发过来的数据  7 pwd = flask.request.values.get('password')  8 if username=='zjr' and pwd == '123456':  9 res = {'code': 1000, 'msg': '登录成功!', 'sign': 'sbhjsgurhuheuih'} # 创建了一个字典 10 else: 11 res = {'code': 2000, 'msg': '账号/密码错误!'} # 创建了一个字典 12 return json.dumps(res,ensure_ascii=False)#不能直接返回字典,需要用json.dumps转成json串 13 #ensure_ascii=False加这个参数,可以返回中文 14 server.run(port=8989,debug=True)#启动服务,端口号为8989,修改后自动重启

跟牛牛老师学习python自动化的第七天

跟牛牛老师学习python自动化的第七天

json、cookie、headers传参:

1 json_data = flask.request.json.get()#'获取入参是json类型的'
2 flask.request.cookies.get('xxx')#获取cookie
3 flask.request.headers.get('xxx')#获取headers
 

 

用30行代码开发一个上传、下载文件的接口

分享一段代码,开发了3个接口:
            1、上传文件
            2、查看所有文件
            3、下载文件

使用python开发,需要安装flask模块,使用pip install flask安装即可,代码量特别少,就能实现,加上注释总共35行代码,特别的简单,代码如下:

import flask,os,time
from flask import request,send_from_directory,jsonify
app = flask.Flask(__name__)#创建一个app,代表这个web服务
@app.route('/get_file',methods=['get'])
def get_file():
    #下载文件接口
    filename = request.values.get('fname',None)
    #获取需要下载的文件名
    if filename:#如果获取到的文件名话
        if os.path.isfile(filename):#判断是否是一个文件
            #返回要下载的文件
            return send_from_directory('.',filename,as_attachment=True)
        else:
            return jsonify({"msg":"文件不存在!"})
    else:
        return jsonify({'msg':'文件名不能为空'})
@app.route('/files',methods=['get'])
def file_list():
    #获取文件列表接口
    files = os.listdir('.')#获取当前目录下所有文件
    new_files = [f for f in files if os.path.isfile(f)]
    #三元运算符,把是文件的放到list中
    return jsonify({"files":new_files})
@app.route('/upload',methods=['post'])
def upload():
    #上传文件接口
    f = request.files.get('file_name',None)
    if f:
        t = time.strftime('%Y%m%d%H%M%S')#获取当前时间
        new_file_name = t+f.filename#给文件重命名,防止有重复文件覆盖
        f.save(new_file_name)#保存文件
        return jsonify({"code":"ok"})
    else:
        return jsonify({"msg":"请上传文件!"})
app.run(debug=True,port=8888)#启动这个web服务

跟牛牛老师学习python自动化的第七天

 

 

跟牛牛老师学习python自动化的第七天

跟牛牛老师学习python自动化的第七天

 

自己写一个注册的接口

 1 import flask,pymysql
 2 import json,hashlib
 3 server = flask.Flask(__name__)#把当前这个python文件当做一个服务
 4 
 5 #操作数据库的函数
 6 def my_db(sql,port=3306,charset='utf8'):
 7     ip,user,passwd,db = '数据库ip','数据库用户','密码','数据库名字'
 8     coon = pymysql.connect(host=ip,user=user,
 9                     password=passwd,
10                     db = db,
11                     port=port,
12                     charset=charset,
13                     autocommit=True
14                     )
15     cur = coon.cursor()
16     sql=sql.strip()
17     cur.execute(sql)
18     sql_start = sql[:6].lower()#取SQL的开头6位,转换成小写
19     if sql.startswith('select') or sql.startswith('show'):
20         data = cur.fetchall()
21     else:
22         data ='ok'
23     cur.close()
24     coon.close()
25     return data
26 
27 #MD5加密函数
28 def my_md5(s):
29     m = hashlib.md5(s.encode())
30     return m.hexdigest()
31 
32 @server.route('/register',methods=['post'])
33 def reg():
34     username = flask.request.values.get("username")  # 是从客户端发过来的数据
35     passwd = flask.request.values.get("passwd")
36     cpasswd = flask.request.values.get("cpasswd")
37     if username and passwd and cpasswd:
38         sql1 = 'select * from nhy where name="%s";'%username#数据库里是双引号“”
39         sql_res = my_db(sql1)
40         if sql_res:
41             res = {'code':2001,'msg':'该用户已经被注册'}
42         else:
43             if passwd==cpasswd:
44                 md5_pwd = my_md5(passwd)
45                 sql2='insert into nhy(name,pwd) value("%s","%s");'%(username,md5_pwd)
46                 my_db(sql2)
47                 res = {'code':1000,'msg':'注册成功!'}
48             else:
49                 res = {'code': 20003, 'msg': '两次密码不一致!'}
50     else:
51         res = {'code':20002,'msg':'必填参数未填,请查看接口文档!'}
52     return json.dumps(res,ensure_ascii=False)
53 
54 server.run(port=8989,debug=True)#启动服务,接口写完了启动一次;debug=True是修改代码后自动重启

 

跟牛牛老师学习python自动化的第七天

 

把项目分文件夹

将文件夹导入环境变量

 跟牛牛老师学习python自动化的第七天

 

 

操作excel

1.读excel

 1 import xlrd#只能读
 2 book = xlrd.open_workbook('zjr.xls')
 3 print(book.nsheets)#excel里一共有多少sheet页
 4 sheet = book.sheet_by_index(0)#sheet页的索引
 5 # book.sheet_by_name('sheet1')#sheet页的名字
 6 print(sheet.cell(0,0).value)#不加.value会显示数据的类型
 7 print(sheet.cell(1,0))#显示第二行第一列的数据,不加.value会显示数据的类型
 8 print(sheet.row_values(0))#显示某一行的数据
 9 print(sheet.row_values(1))
10 print(sheet.nrows)#这个Excel里总共有多少行
11 print(sheet.col_values(0))#某一列的数据
12 print(sheet.col_values(1))
13 print(sheet.ncols)#总共有多少列

2.修改excel

 1 import xlrd
 2 from xlutils import copy#修改需要两个模块xlrd和xlutils
 3 book1 = xlrd.open_workbook('zjr.xls')#打开原来的excel
 4 new_book = copy.copy(book1)#拷贝一个新的excel
 5 sheet = new_book.get_sheet(0)#获取一个sheet页
 6 print(dir(sheet))#查看sheet有什么方法
 7 sheet.write(1,3,'88')#第二行的第四列
 8 sheet.write(1,1,'周继蓉')
 9 new_book.save('zjr.xls')
10 #一定先关掉zjr.xls文件

 3.写excel

 1 import xlwt
 2 book = xlwt.Workbook()#创建excel
 3 sheet = book.add_sheet('stu_info')#加一个sheet页
 4 sheet.write(0,0,'学生编号')#行、列
 5 sheet.write(0,1,'学生姓名')#第一行、第二列
 6 sheet.write(0,2,'成绩')#第一行、第二列
 7 sheet.write(1,0,'1')#行、列
 8 sheet.write(1,1,'周继蓉')#行、列
 9 sheet.write(1,2,89)#行、列
10 book.save('stu.xls')#一定要用xls的

结果:

跟牛牛老师学习python自动化的第七天