接口开发

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

1、登录的接口。

import flaskimport jsonimport pymysqlimport hashlibserver = 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 flaskimport toolsimport 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:\python20181026\yagmail-0.10.212-py2.py3-none-any.whl)

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

代码如下:

import yagmailusername='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 requestsimport randomurl='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 requestsimport randomurl='http://127.0.0.1:8999/api/upload'data = {'username':'testuser1','passwd':'111111'}r = requests.post(url,data=data) #发post请求

3、入参是json类型的
import requestsimport randomurl='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)
 
 
 
 


转载于:https://www.cnblogs.com/qiaomeiling/p/10186288.html

python(十一)接口开发、写日志、发邮件、python来发请求、手动添加环境变量...相关推荐

  1. 怎样手动填加python变量_python(十一)接口开发、写日志、发邮件、python来发请求、手动添加环境变量...

    接口开发 接口开发需要用到第三方模块flask. 1.登录的接口. import flask import json import pymysql import hashlib server = fl ...

  2. 失业在家抠脚的我花了2个月,读完了这份《Python Web接口开发与测试》,我居然进华为了...

    学习计划 失业在家抠脚到华为年薪25w测试工程师,我只花了2个月~ 底层逻辑 如果要进大厂,算法.底层.项目经验都要刷,小编以后会给大家更新各种面试题-- 如果要进大厂,项目经验.底层算法.网络.数据 ...

  3. 请给我发邮件,不要发微信

    最近,与新客户联系比较多,都被要求加微信, 好像没有人关心你的名片,更没有人关心你的邮箱是什么了.正像很多国人宁愿为了一点点便利或优惠,就愿意牺牲自己的手机号码等隐私去注册某项自己也许永远都不会用第二 ...

  4. python获取系统环境变量|os.environ|os.putenv|cmd添加环境变量

    文章目录 1. 背景介绍 2. python|os.environ代码 3. 添加环境变量的其他方式: 1. "系统设置"--"环境变量" 2. pycharm ...

  5. python添加环境变量_windows系统下python学习-1 (python环境变量配置)

    python安装完成后检测一下是否添加了环境变量(基于你已经完成了python的安装) 使用 Windows+R 键调出运行窗口,输入 cmd 按回车调出命令提示符窗口,输入 python 回车 已添 ...

  6. python之pycharm添加环境变量

    查看环境变量 echo $PYTHONPATH :/home/rvbust/Rvbust/Install/RVBUST/PythonLibs:/home/rvbust/Rvbust/Install/R ...

  7. Windows 10 安装python到U盘并设计自动添加环境变量脚本

    1.在python官网正常下载python安装包 2.U盘插到电脑上,安装到U盘的版本如果和电脑上的完全相同,则需要暂时屏蔽python环境变量(未实验),我选择的是在U盘中安装的32位的python ...

  8. python写web自动化_Web接口开发与自动化测试:基于Python语言

    领取成功 您已领取成功! 您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦! - | 回复不要太快哦~ 回复内容不能为空哦 ...

  9. API接口开发其实特简单,Python Flask Web 框架教程来了

    大家好,日常工作中,无论你是数据工程师.数据挖掘工程师,甚至数据分析人员,都不可避免的与他人进行数据交互,API接口提供数据是最常见的形式. 今天我给大家分享 Python Flask Web 框架教 ...

  10. python sdk开发_用印象笔记的Python SDK接口开发个自用小工具

    其中分享了如何用印象笔记的开发者接口,用php开发一个收集金句的小工具. 今年换了Macbook,之前的环境和工具都没了,于是使用Python3从头写了一个同样的工具. 首先,因为印象笔记官方只提供P ...

最新文章

  1. Java并发编程:CopyOnWrite容器的实现
  2. 初级ABAPer考题
  3. mysqlperformanceblog
  4. Docker 搭建pxc集群 + haproxy + keepalived 高可用(二)
  5. Catch That Cow——BFS
  6. Matlab学习记录 1
  7. linux 学习笔记 -vim 操作
  8. 《WordPress插件开发手册》目录
  9. Excel VBA解密教程
  10. 网络是怎样连接的_户根勤(带目录)
  11. iOS自动化测试---使用的相关工具
  12. The JSR-133 Cookbook for Compiler Writers 中英对照版翻译
  13. oracle中datedif函数,Datedif函数全面解析和BUG分析
  14. html页面如何拉长,HTML可以拉长的logo
  15. 读什么,才能让你的心沉静下来
  16. 计算机基础知识电大形考任务5,国家开放大学电大专科《计算机平面设计(1)》网络课形考任务4及任务5答案.doc...
  17. Python 解析爬取的车次数据(12306)
  18. 怪物Appr值与Data里Mon-x.wil里图像的对应关系
  19. 社区里的志愿者与专业人员
  20. SpringBoot+Themeleaf的基本使用方法

热门文章

  1. VMware Fusion下Centos联网
  2. 9.3 客户端接收响应信息(异步转同步的实现)
  3. Memcached · 最佳实践 · 热点 Key 问题解决方案
  4. 今天开始清理个人计算机资料了
  5. Idea 工具在java文件中怎么避免 import .*包
  6. 天猫二面:内存耗尽后 Redis 会发生什么?
  7. 再见!LayUI !
  8. Redis如何实现故障自动恢复?
  9. 100w条数据插入Mysql 数据库,耗时仅10s
  10. 阿里巴巴中台技术架构实践与思考