一.requests模块
1.get和post请求
import requests url='http://127.0.0.1:8999/api/upload' data = {'username':'testuser1','passwd':'111111'} r = requests.get(url,params=data) #发get请求 r = requests.post(url,data=data) #发post请求 r.cookies #返回cookie r.status_code #返回的状态码200
get和post的data数据指定的关键字不同,需要注意。
2.请求返回处理
print(r.text) #结果返回的就是字符串 print(r.json()) #结果返回的就是字典,必须返回的是json,才能转成字典
返回结果r默认是二进制形式,可以转换为text和json,如果返回的结果不是json格式,那么用r.json()会报错。
3.带cookie的请求
cookie可以放在消息头hearders中,也可以放在单独的cookie里,区别在于,headers中,可以将所有的cookie
作为cookie键的值,打包成一个字典。而单独指定cookie要将所有的cookie都以多个key-value的形式写入。
requests.get(url,headers{'cookie':'pt2ggui=o0511402865;RK=JQZpwBp1by'}) requests.get(url,cookies{'pt2ggui':'o0511402865','RK':'JQZpwBp1by'})
4.上传文件
使用file参数
import requests url='http://127.0.0.1:8999/api/upload' data = {'username':'testuser1','passwd':'111111'} r = requests.post(url,data=data,files={'file_name':open('account.xls','rb')} )
5.下载文件
url='https://qiniuuwmp3.changba.com/1127063572.mp4' r = requests.get(url) f = open('sdfsdf.mp4','wb') f.write(r.content) f.close()
将返回的结果以二进制形式写入文件保存在本地
二.flask模块补充
当获取从web端过来的值的时候,有两种取值方式,如果用户是以params形式提交的参数,则用value的形式获取,如果用json的形式提交数据,则用json的形式获取,如果需要分别对待,则需用is_json来判断数据类型:(部分代码未贴出)
1 import json 2 import os 3 4 from . import tools 5 from .check_session import check_session 6 # import tools 7 8 from conf import setting 9 from conf.setting import log 10 import flask 11 import time 12 server = flask.Flask(__name__) 13 14 15 @server.route('/api/login',methods=['get','post']) 16 def login(): 17 uname = flask.request.values.get('username') 18 pd = flask.request.values.get('passwd') 19 sql = 'select * from app_myuser where username="%s"'%uname 20 log.debug('登录执行的sql是:%s'%sql) 21 res = tools.my_db(sql) 22 if res: 23 if tools.my_md5(pd) == res.get('passwd'): 24 uname_md5 = tools.my_md5(uname+str(time.time())) 25 # uname_md5 = tools.my_md5(uname) 26 key='session:%s'%(uname_md5) 27 user_info = {'user_id':res.get('id'),'user_name':uname} 28 r = tools.get_redis() 29 log.debug('连接redis成功') 30 r.set(key,json.dumps(user_info),setting.SESSION_EXPIRE) 31 res = {"code":0,"msg":"登录成功!",'session_id':uname_md5, 32 'login_time':time.strftime('%Y-%m-%d %H:%M:%S')} 33 log.warning('%s 用户登陆成功'%uname) 34 else: 35 res = {"code":1,"msg":"密码错误!"} 36 else: 37 log.warning('%s用户不存在'%uname) 38 res = {'code':2,"msg":"用户不存在"} 39 return json.dumps(res,ensure_ascii=False) 40 41 @server.route('/api/add_stu',methods=['post']) 42 def add_stu(): 43 if flask.request.is_json: 44 session_id = flask.request.json.get('session_id') 45 name= flask.request.json.get('name') 46 phone = flask.request.json.get('phone') 47 grade = flask.request.json.get('grade') 48 addr = flask.request.json.get('addr','北京') 49 sex = flask.request.json.get('sex','男') 50 age = flask.request.json.get('age',18) 51 gold = flask.request.json.get('gold',1000) 52 if session_id and name and phone and grade: 53 login_tag , data = check_session(session_id) 54 if login_tag: 55 insert_sql="insert into `jxz`.`app_student` ( `name`, `sex`," 56 " `age`, `addr`, `grade`, `phone`, `gold`)" 57 " values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s');"%(name,sex,age,addr,grade,phone,gold) 58 tools.my_db(insert_sql) 59 res = {'code':0,'msg':'学生信息添加成功'} 60 else: 61 res = data 62 63 else: 64 res = {'code':3,'msg':'必填参数未填,请查看接口文档!'} 65 else: 66 res = {'code':5,'msg':'入参是json类型的!'} 67 return json.dumps(res, ensure_ascii=False) 68 69 @server.route('/api/upload',methods=['post']) 70 def upload(): 71 session_id = flask.request.values.get('session_id') 72 file = flask.request.files.get('file_name') 73 if session_id and file: 74 login_tag, data = check_session(session_id) 75 if login_tag: 76 new_file_name = '%s_%s'%(int(time.time()),file.filename) 77 #防止文件名重复,所以把文件名前面加上了时间戳 78 abs_file_path = os.path.join(setting.UPLOAD_DIR,new_file_name) 79 #拼文件的绝对路径,这样子就放到了uploads目录下 80 file.save(abs_file_path)#保存文件 81 res = {'code':0,'msg':'上传文件成功!'} 82 else: 83 res = data 84 else: 85 res = {'code':3,'msg':'必填参数未填,请查看接口文档!'} 86 return json.dumps(res, ensure_ascii=False)
三.发送邮件
1 import yagmail 2 username='7777@163.com' 3 password='8888123'#生成授权码,qq、163、126都是授权码 4 5 mail_server = 'smtp.163.com' 6 # mail_server = 'smtp.qq.com' 7 # mail_server = 'smtp.126.com' 8 9 m = yagmail.SMTP(user=username,password=password,host=mail_server) 10 # smtp_ssl=True,如果邮箱使用了安全协议,就需要加这个 11 #qq邮箱就是使用了安全协议 12 13 to = ['1111@qq.com','2222@163.com','3333@qq.com'] 14 cc = ['444@qq.com','5555@qq.com','6666@qq.com'] 15 16 m.send(to=to,cc=cc,subject='今天吃了吗', 17 contents='今天吃鱼肉了吗,吃饱没', 18 attachments=r'tools.py')
其中to是发送方,多个的话用list,cc是抄送方,多个的话用list,attachments包含了附件
四.写日志nnlog模块
import nnlog LOG_FILE = os.path.join(BASE_PATH,'logs','server.log')#日志文件存放的路径 log = nnlog.Logger(LOG_FILE,level='warn',backCount=5,when='D') #实例化好
log.debug('登录成功1!')
log.info('登录成功2!')
log.warning('登录成功3!')
log.error('登录成功4!')
在level处定义好日志级别,默认为debug级别,debug<info<warning<error,日志只会打印大于和等于level的级别日志
backCount表示存放的个数,如果生成的日志文件超过这个数值则会删除之前生成的日志,when表示按什么时间生成日志,D表示按天生成,s表示按秒生成,m表示按分钟生成