zoukankan      html  css  js  c++  java
  • python(十一)接口开发、写日志、发邮件、python来发请求、手动添加环境变量

    接口开发

    接口开发需要用到第三方模块flask.

    1、登录的接口。

    import flask
    import json
    import pymysql
    import hashlib
    server = flask.Flask(__name__)
    #新建一个服务,把当前这个python文件当做一个服务

    def my_db(sql):
    conn = pymysql.connect(host='XX.XXX.XX.XX',user='XXX',password='XXXXXX',
    db='XXX',port=3306,charset='utf8',autocommit=True)
    cur = conn.cursor(pymysql.cursors.DictCursor)
    cur.execute(sql)
    res = cur.fetchone()
    cur.close()
    conn.close()
    return res


    def my_md5(s,salt=''):
    s = s+salt
    news = str(s).encode()
    m = hashlib.md5(news)
    return m.hexdigest()

    @server.route('/login',methods=['get'])
    def hello():
    uname = flask.request.values.get('username')
    pd = flask.request.values.get('passwd')
    sql = 'select * from su_user where login_name="%s"'%uname
    res = my_db(sql)
    print(res)
    if res:
    if my_md5(pd) == res.get('pwd'):
    res = {"code":0,"msg":"登录成功!"}
    else:
    res = {"code":1,"msg":"密码错误!"}
    else:
    res = {'code':2,"msg":"用户不存在"}
    return json.dumps(res,ensure_ascii=False,indent=4)

    #别人访问时,需要输入我自己的IP地址作为url中的IP,端口号为8999,这样别人也能访问我开发的接口;
    #debug=True:代表修改完代码后不需要手动重启服务,直接就自动重启了
    server.run(host='0.0.0.0',port=8999,debug=True)
    #server.run()

    2、入参不同的接口
    import flask
    import tools
    import json,redis
    @server.route('/api/stu')
    def get_stu():
    username = flask.request.values.get('name')#默认get不到的话,返回的值就是None
    age = flask.request.values.get('age')
    if username and age:
    sql = "select * from app_student where name='%s' and age='%s'" % (username, age)
    elif not username and age:
    sql = "select * from app_student where age='%s'" % age
    elif username and not age:
    sql = "select * from app_student where name='%s'" % username
    else:
    sql = "select * from app_student"
    res = tools.my_db2(sql)
    return json.dumps(res,ensure_ascii=False,indent=4)

    server.run(host='0.0.0.0',port=8999,debug=True)

    3、入参是json类型的
    @server.route('/api/add_stu',methods=['post'])
    def add_stu():
    if flask.request.is_json:#判断入参是否是json类型的
    session_id = flask.request.json.get('session_id')
    name= flask.request.json.get('name')
    phone = flask.request.json.get('phone')
    grade = flask.request.json.get('grade')
    addr = flask.request.json.get('addr','北京')
    sex = flask.request.json.get('sex','男')
    age = flask.request.json.get('age',18)
    gold = flask.request.json.get('gold',1000)
    if session_id and name and phone and grade:
    login_tag , data = check_session(session_id)
    if login_tag:
    insert_sql="insert into `jxz`.`app_student` ( `name`, `sex`,"
    " `age`, `addr`, `grade`, `phone`, `gold`)"
    " values ( '%s', '%s', '%s', '%s', '%s', '%s', '%s');"%(name,sex,age,addr,grade,phone,gold)
    tools.my_db(insert_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)


    4、入参是上传文件类型的
    @server.route('/api/upload',methods=['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(session_id)
    if login_tag:
    new_file_name = '%s_%s'%(int(time.time()),file.filename)#file.filename能获取到上传的文件名
    #防止文件名重复,所以把文件名前面加上了时间戳
    abs_file_path = os.path.join(setting.UPLOAD_DIR,new_file_name)
    #拼文件的绝对路径,这样子就放到了uploads目录下
    file.save(abs_file_path)#保存文件
    res = {'code':0,'msg':'上传文件成功!'}
    else:
    res = data
    else:
    res = {'code':3,'msg':'必填参数未填,请查看接口文档!'}
    return json.dumps(res, ensure_ascii=False)
     
    3、搭建框架思想
    例如:图书管理系统

     

     写日志

    1、pip install nnlog

    import nnlog
    #nnlog.Logger.words='哈哈哈哈'
    #默认打印debug级别的日志,默认when='D'表示每天产生日志,默认backCount=5代表保留最近5天的日志
    #自动生成book_server.log文件,并且里面永远存最新的日志
    log = nnlog.Logger('book_server.log',when='S',backCount=3)

    # debug#最低级日志
    # info倒数第二级
    # warning整数第二级
    # error#最高级日志
    #log.surprise()
    log.debug('xxx值是什么')
    log.info('调用了什么xxx')
    log.warning('xx警告!')
    log.error('xxx出错!')

    注意:默认是打印debug级别,那么会把debug、info、warning、error级别的日志都打印出来
               如果指定打印是warning级别,那么会把warning和info级别的日志打印出来。
    总结:会把指定的级别和比它自己高级别的日志打印出来。

     

    发邮件

    1、导入yagmail模块,导入的模块不可以直接“pip install yagmail”,因为发送中文附件时,会报乱码,所以需要导入.whl形式结尾的文件

      

    需要手动安装:pip install +文件绝对路径 (pip install E:python20181026yagmail-0.10.212-py2.py3-none-any.whl)

    2、需要知道发送邮箱的号码,与邮箱的授权码(不是邮箱登录密码),

    代码如下:

    import yagmail
    username='xxxxx@163.com'
    password='XXXXXXXX'#生成授权码,qq、163、126都是授权码

    mail_server = 'smtp.163.com'
    # mail_server = 'smtp.qq.com'
    # mail_server = 'smtp.126.com'

    m = yagmail.SMTP(user=username,password=password,host=mail_server)
    # smtp_ssl=True,如果邮箱使用了安全协议,就需要加这个
    #qq邮箱就是使用了安全协议

    to = ['1xxx722@qq.com','wangxxx416516@163.com','51xx5@qq.com']
    cc = ['6137xx17@qq.com','11xx42722@qq.com','136xx4@qq.com']

    #to:收件人; cc:抄送;subject:主题;contents:内容;attachments:附件
    m.send(to=to,cc=cc,subject='今天吃了吗',
    contents='今天吃鱼肉了吗,吃饱没',
    attachments=r'tools.py')


    发送网络请求

    需要导入requests模块 pip install requests

    1、发送get请求
    import requests
    import random
    url='http://127.0.0.1:8999/api/upload'
    data = {'username':'testuser1','passwd':'111111'}
    r = requests.get(url,params=data) #发get请求
    r.json()#如果你请求的是一个接口的话,返回的是json,那就给你转成字典
    r.text()#返回的是字符串

    2、发送post请求
    import requests
    import random
    url='http://127.0.0.1:8999/api/upload'
    data = {'username':'testuser1','passwd':'111111'}
    r = requests.post(url,data=data) #发post请求

    3、入参是json类型的
    import requests
    import random
    url='http://127.0.0.1:8999/api/upload'
    r = requests.post(url,data=data) #发post请求

    data = {
    "session_id":"6ab8785039dcf50fb11c53acc1db7648",
    "name":"zhouyongbo%s"%random.randint(1,99),
    "phone":"111211345%02d"%random.randint(1,99),
    "grade":"天秤座"
    }
    r = requests.post(url,json=data) #入参是json类型的

    4、上传文件
    
    
    r = requests.post(url,
    data={'session_id':'6ab8785039dcf50fb11c53acc1db7648'},
    files={'file_name':open('account.xls','rb') }
    )

    5、请求中带有cookie的
    requests.get(url,headers={'cookie':'hdfjghdkghkdhgkdh'})
    requests.get(url,cookies={'pt2ggui':'o0511402865','RK':'JQZpwBp1by'}) (使用不方便,很少用)

    6、下载文件
    url='https://qiniuuwmp3.changba.com/1127063572.mp4'
    r = requests.get(url)
    f = open('sdfsdf.mp4','wb')
    f.write(r.content) #r.content #二进制,下载图片、下载文件的时候用
    f.close()


    手动添加环境变量 
    import sys,os
    #手动加入环境变量的,这样的话,在其他人的电脑上运行就没有问题了
    BASE_PATH=os.path.dirname(os.path.abspath(__file__))
    sys.path.insert(0,BASE_PATH)
     
     
     
     




  • 相关阅读:
    poj 1904 King's Quest
    【BZOJ】1051: [HAOI2006]受欢迎的牛
    hdu 2767 Proving Equivalences
    hdu 3234 Exclusive-OR
    poj 1988 Cube Stacking
    poj 1733 Parity game
    hdu 3047 Zjnu Stadium 带权并查集
    poj 1182 食物链 种类并查集
    HDU 3749 Financial Crisis
    【BZOJ】1046 : [HAOI2007]上升序列
  • 原文地址:https://www.cnblogs.com/qiaomeiling/p/10186288.html
Copyright © 2011-2022 走看看