Python自动化学习笔记(七)接口开发部分的内容补充python
flask.request.is_json #判断参数是不是json格式redis
flask.request.json.get('key') #获取参数sql
flask.request.data.get('key') #获取参数json
file=flask.request.files.get('file_name') #获取上传的文件,filename为参数名称flask
file.save(path) #保存文件到指定目录api
import json import time from . import tools import flask from . import check_session from conf import setting from conf.setting import log import os server=flask.Flask(__name__) @server.route('/api/login',methods=['get','post']) def login(): uname = flask.request.values.get('username') pd = flask.request.values.get('passwd') sql = 'select * from app_myuser where username="%s"' % uname log.debug('登陆执行的sql是:%s'%sql) res = tools.my_db(sql) if res: if tools.my_md5(pd) == res.get('passwd'): uname_md5 = tools.my_md5(uname + str(time.time())) # uname_md5 = tools.my_md5(uname) key = 'session:%s' % (uname_md5) user_info = {'user_id': res.get('id'), 'user_name': uname} r = tools.get_redis() log.debug('链接redis成功' ) log.info('用户:%s登陆成功' % uname) r.set(key, json.dumps(user_info), setting.SESSION_EXPIRE) res = {"code": 0, "msg": "登陆成功!", 'session_id': uname_md5, 'login_time': time.strftime('%Y-%m-%d %H:%M:%S')} else: res = {"code": 1, "msg": "密码错误!"} else: log.warning('用户:%s不存在' %uname) res = {'code': 2, "msg": "用户不存在"} return json.dumps(res, ensure_ascii=False,indent=4) @server.route('/api/add_stu',methods=['get','post']) def add_stu(): if flask.request.is_json: session_id = flask.request.json.get('session_id') stu_name = flask.request.json.get('stu_name') phone = flask.request.json.get('phone') grade = flask.request.json.get('grade') sex = flask.request.json.get('sex','男') age=flask.request.json.get('age',18) gold=flask.request.json.get('gold',1000) addr = flask.request.json.get('addr','北京') if session_id and stu_name and phone and grade: session_tag,data=check_session.check_session(session_id) if session_tag: sql = "insert into app_student (name,phone,grade,sex,age,gold,addr)VALUES ('{}','{}','{}','{}','{}','{}','{}')".format(stu_name,phone,grade,sex,age,gold,addr) tools.my_db(sql) res = {"code": 0, "msg": "学生信息添加成功!"} else: res=data else: res={'code':3,'msg':'必填参数未填,请查看接口文档!'} else: res={'code':5,'msg':'入参必须是json类型的'} return json.dumps(res, ensure_ascii=False,indent=4) @server.route('/api/upload',methods=['get','post']) def upload(): session_id=flask.request.values.get('session_id') file=flask.request.files.get('file_name') if session_id and file: login_tag,data=check_session.check_session(session_id) if login_tag: new_file_name = '%s_%s'%(int(time.time()),file.filename) file.save(os.path.join(setting.UPLOAD_DIR,new_file_name))#保存文件 res = {"code": 0, "msg": "上传文件成功"} else: res=data else: res = {'code': 3, 'msg': '必填参数未填,请查看接口文档!'} return json.dumps(res, ensure_ascii=False,indent=4)
book_server/
: 项目名安全
conf/:存放配置文件服务器
data/:存放sql文件cookie
lib/
: 存放项目的全部源代码。网络
logs/:存放日志文件
uploads/:存放下载的文件
start.py
: 程序启动脚本
readme.txt
: 项目说明文件。
import requests #发送get请求 url='http://127.0.0.1:1234/api/login' data={'username':'lyc1','passwd':'111111'} # r=requests.request(method='get',url=url,data=data) r=requests.get(url,params=data) #get请求用params,请求时会把它拼接到url后面 print(r.text)#返回字符串 # print(r.json())#返回的是字典,接口返回的是json格式才能够转成字典 #发送post请求 url='http://127.0.0.1:1234/api/add_stu' data={ "session_id":"6ab8785039dcf50fb11c53acc1db7648", "stu_name":"测试一下", "phone":"13111111111", "grade":"天秤座", "sex":"女", "addr":"成都" } r=requests.post(url,json=data) #发送post请求,入参是json类型 print(r.text) #上传下载文件,添加header url='http://127.0.0.1:1234/api/upload' data={'session_id':'6ab8785039dcf50fb11c53acc1db7648'} files={'file_name':open(r'E:\lyc_study\python\day8\book_server\uploads\1545551778_《天才在左疯子在右》 (1).txt','rb')} r=requests.post(url,data=data,files=files) #发送post请求,入参是json类型 print(r.text) #添加header requests.get(url,params=data,headers={'cookie':'xxx','content':'xxxx'}) #下载文件,拿到r.content,写入一个文件 url='https://q4.qlogo.cn/g?b=qq&nk=564428155&s=140' r=requests.get(url) with open('a.jpg','wb')as f: f.write(r.content) r.cookies #请求返回的cookie r.status_code #状态码
yagmail不能直接pip install yagmail,安装的有bug,附件名称为中文时会乱码
import yagmail username='xxx@qq.com' password='xxxxxxxx' #有的邮箱不能直接用密码,须要一个客户端受权码,在邮件设置里通常能够拿到 mail_server='smtp.qq.com' #邮箱服务器 m=yagmail.SMTP(user=username,password=password,host=mail_server,smtp_ssl=True) #smtp_ssl=False,若是邮箱使用了安全协议,就必须加,QQ邮箱要加 to=['xxx@163.com','xxx@qq.com'] cc='xx@qq.com' #to为收件人list,cc为抄送人list,attachments为附件list,均可以只传入一个字符串 m.send(to=to,cc=cc,subject='吃饭没',contents='吃了啥',attachments=r'E:\lyc_study\python\day8\book_server\uploads\1545551790_Desert.jpg')
nnlog模块灰常好用,强烈安利
import nnlog log=nnlog.Logger('book_server.log',when='S',backCount=5) #实例化一个log对象,其余Python文件要使用能够直接import这个对象 #backCount指保留几个日志 #when='S',按秒划分文件,m按分钟,D按天 log.debug('写一条dubug日志') log.info('写一条info错误') log.warning('写一条warning日志') log.error('写一条error日志')