学习笔记八 接口开发,上传下载,日志

一.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='[email protected]'
 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 = ['[email protected]','[email protected]','[email protected]']
14 cc = ['[email protected]','[email protected]','[email protected]']
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表示按分钟生成

 

 

猜你喜欢

转载自www.cnblogs.com/eichar/p/10220341.html