zoukankan      html  css  js  c++  java
  • 学习笔记八 接口开发,上传下载,日志

    一.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表示按分钟生成

     

    
    
    
  • 相关阅读:
    vue使用腾讯地图选点组件问题总结
    腾讯位置服务实现点击建筑显示围栏及建筑信息效果
    unity使用UMP播放RTSP流,打包exe后显示空白
    uniapp获取context
    Android studio安装debug apk提示“调用者不被允许测试的测试程序”
    unity使用VuplexWebView内嵌浏览器遮挡前方按钮的问题
    unity透明材质上放3dtext不同角度,文字变灰的问题
    Python线程指南
    mysql 简单表和索引
    dubbo 提示 403 unknown user
  • 原文地址:https://www.cnblogs.com/eichar/p/10220341.html
Copyright © 2011-2022 走看看