测开6 - Python(网络编程、接口开发)

python课的开头我已经反复听了好几遍了,始终没有接触到网络编程和接口开发这部分。再加上上周的课因为公司出游耽误了,内心其实还是很忐忑的,很担心跟不上进度或者跟的吃力,之后就没有什么动力和正向反馈支撑我继续学习了。一整天的课听下来觉得好像也没有想象中那么难,主要还是零散的知识点,容易出现眼睛会了脑子不会的情况辣!??????

 1?? 网络编程

  主要是发送请求??拿到结果??对结果进行处理。用到的是 request 模块,以下通过请求的不同类型来分别总结。

  a. get 请求

1 url = ‘http://api.nnzhp.cn/api/user/stu_info‘
2 d = {"stu_name":"jiaolf"}
3 r = requests.get(url,d)

  对返回结果,直接打印 r 发现结果是 <Response [200]>,对结果 r 的处理,有以下三种情况:

1 print(r.json())    #返回的是一个字典
2 print(r.text)    #返回的是一个字符串(比如需要写入文件/数据库)
3 print(r.content)    #返回的是bytes类型,可以用来写音视频文件

  示例:取到某个 URL 的图片并保存

1 url = ‘http://b-ssl.duitang.com/uploads/item/201805/13/20180513224039_tgfwu.png‘
2 res = requests.get(url)
3 with open(‘image.png‘,‘wb‘) as fw:
4     fw.write(res.content)

  以上需要注意的是,写的内容是 res.content

  b. post 请求

  因为 post 请求大多不能把参数放在 URL 中,所以这里在传参数时需要把参数放入到一个字典中。需要什么样的参数,取决于接口的定义。

1 url = ‘http://api.nnzhp.cn/api/user/login‘
2 data = {‘username‘:‘jiaolifei‘,‘password‘:‘123‘}
3 res = requests.post(url,data)
4 print(res.text)

  c. 传 cookie、header

  有不止一种方法,但是其他的太麻烦,所以只总结一种简单实用的。

1 url = ‘http://qun.qq.com/cgi-bin/qun_mgr/get_friend_list‘
2 d = {‘bkn‘:12344555}
3 header = {‘cookie‘:‘*********‘}
4 r = requests.post(url,d,headers=header)
5 print(r.json())

  以上,d 相当于普通请求中的必填参数,而 cookie 需要单独把它放在 header 中

  d. 传文件

1 url = ‘http://api.nnzhp.cn/api/file/file_upload‘
2 r = requests.post(url,files = {‘file‘:open(‘jiaolf.png‘,‘rb‘)})    #file这里根据接口来决定,需要使用rb模式
3 print(r.text)

2?? 接口开发

  因为上面总结了网络编程的部分,与接口相关,干脆就把接口开发跟它放到一起,了解了开发之后,就会对接口的使用有更深的理解。

  接口开发用到的是 flask 模块,是一个轻量级 web 开发框架。

  接口开发的作用通常有:1、mock 接口;2、给别人提供数据。接口开发相当于服务端的工作,所以需要用到 server。

 1 import flask
 2 server = flask.Flask(__name__)    #把当前的python文件当作一个服务启动
 3 #第一种,get 请求且无参数
 4 @server.route(‘/login‘)    #装饰器,这里是访问路径
 5 def login():
 6     d = {‘code‘:0,‘msg‘:‘登录成功!‘}
 7     return json.dumps(d,ensure_ascii=False)    #访问即返回以上信息,无入参
 8
 9 #第二种,get请求且有参数
10 @server.route(‘/get_data‘)
11 def table_data():
12     table_list = [‘app_user‘,‘app_student‘]
13     table_name = flask.request.args.get(‘table_name‘)
14     limit = flask.request.args.get(‘limit‘)
15     if table_name:
16         if table_name in table_list:
17             sql = ‘select * from ‘+table_name+‘ limit ‘+limit
18             data = read_table(sql)    #read_table是个函数,传入sql,返回结果
19          else:
20             data = {‘code‘:-1,‘msg‘:‘没有权限!‘}
21     else:
22         data = {‘code‘:1,‘msg‘:‘balabala‘}
23     return json.dumps(data,ensure_ascii=False)
24
25 #第三种,post请求
26 @server.route(‘/post_data‘,method=[‘post‘,‘get‘])    #这里get加不加都可以
27 def post():
28     username = flask.request.args.get(‘username‘)    #参数在url里面时,用它
29     username2 = flask.request.values.get(‘username2‘)    #参数在body里面,用它
30     file = flask.request.files.get(‘filename‘)
31     #cookie = flask.request.cookies.get(‘cookie‘)
32     #headers = flask.request.headers.get(‘header‘)
33     #headers = flask.request.json.get(‘header‘)    #json格式的
34     print(file.file_name)    #获取文件名
35     file.save(file.filename)
36     return username+username2
37
38 server.run(host=‘0.0.0.0‘,port=9999,debug=True)    #加上host后在同一个局域网可以访问。server.run通常不用这个,性能较差,实际应用会使用nginx

  根据以上备注说明:

  1、访问方式:第一种,127.0.0.1:9999/login;第二种,127.0.0.1:9999/get_data?table_name=app_user&limit=5;第三种,因为参数不能放在 url,所以需要借助 postman 等工具,使用方法与之前接口测试的方法是一样的

  2、定义get/post请求,通常是通过在定义 ‘@server……’ 时在访问路径后面加上 ‘method = [‘post‘,‘get‘]‘,这里 get 和 post 可以都写,也可以只写一个。

  3、server.run 只能写一次。注释中也写了,实际会用 nginx,之后有时间去了解下 nginx

原文地址:https://www.cnblogs.com/april-aaa/p/11142798.html

时间: 2024-10-12 16:19:44

测开6 - Python(网络编程、接口开发)的相关文章

day8 网络编程 接口开发 异常处理

一 .在day7中已经讲了单个接口的开发,今天讲有关系的接口开发,也就是依赖性,比如你要在博客园写文章就必须先登录,登陆之后才能发表文章,那么登陆和发表文章之间就有个依赖关系,要做的就是这种开发: 1.接口开发首先要导入flask,导入我们用的着的方法 截图:__name__这里有必要解释一下,name前后是两个_不要写错 导入方法: 1.如果不嫌麻烦完全可以一级一级目录点出来, 2.也可以手动添加环境变量 3.就是可以用pycharm自动帮我们添加环境变量,右键选择Mark Directory

Python网络编程实战之一个人开发环境搭建

本节介绍在Debian下利用Python进行网络编程时,需要安装的一些实用的工具包. 0x01  安装开发必备软件包 $ sudo aptitude -y install build-essential     ##"-y"的作用是:在安装过程中,如果遇到Y或N的提问,一律以Yes作为默认的答案 $ sudo aptitude -y install libsqlite3-dev $ sudo aptitude -y install libreadline6-dev $ sudo apt

[python] 网络编程之套接字Socket、TCP和UDP通信实例

很早以前研究过C#和C++的网络通信,参考我的文章: C#网络编程之Tcp实现客户端和服务器聊天 C#网络编程之套接字编程基础知识 C#网络编程之使用Socket类Send.Receive方法的同步通讯 Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内容.内容包括:服务器和客户端架构.套接字Socket.TCP\UDP通信实例和常见笔试考题. 最后希望文章对你有所帮助,如果有不

Python 网络编程

Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络服务模块 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. socket()函数 Pyt

python 网络编程(五)---DNS域名系统

1.域名系统定义 DNS计算机域名系统由域名服务器和域名解析器组成.通常输入的是网址就是一个域名. 2.域名查询 查询方式包括: 1)正向查询:由域名查找对应的IP(如:119.75.218.77">www.baidu.com->119.75.218.77 ) 2)反向查询:由IP查找域名(如:119.75.218.77 –> www.baidu.com) 查询方式包括: 1)递归查询:当DNS服务器接收到客户端的查询请求时,会做出相应的反应(本地DNS服务器查询.其他服务器查

[Python网络编程]浅析守护进程后台任务的设计与实现

在做基于B/S应用中,经常有需要后台运行任务的需求,最简单比如发送邮件.在一些如防火墙,WAF等项目中,前台只是为了展示内容与各种参数配置,后台守护进程才是重头戏.所以在防火墙配置页面中可能会经常看到调用cgi,但真正做事的一般并不是cgi,比如说执行关机命令,他们的逻辑如下: (ps:上图所说的前台界面包含通常web开发中的后端,不然也没有socket一说) 为什么要这么设计 你可能疑惑为什么要这么设计,我觉得理由如下: 首先有一点说明,像防火墙等基本上都运行在类Linux平台上 1.安全问题

Python网络编程08----Django模版

模板系统基本知识 模板是一个文本文件(可以是HTML,XML,CSV等任何文本格式),同时包含了静态内容(例如HTML)和动态标记的逻辑,用于分离文档的表现形式和内容. 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签). 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档.使用哪个模版以及渲染什么数据是由视图函数本身(通过显式的渲染或者使用render_to_response)或者视图的参数(比如通用视图里的template_name参数)决

python网络编程基础(线程与进程、并行与并发、同步与异步)

python网络编程基础(线程与进程.并行与并发.同步与异步) 目录 线程与进程 并行与并发 同步与异步 线程与进程 进程 前言 进程的出现是为了更好的利用CPU资源使到并发成为可能. 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费.聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行.注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

python 网络编程 (二)---tcp

异常 python的socket模块实际上定义了4种可能出现的异常: 1)与一般I/O 和通信问题有关的socket.error; 2)与查询地址信息有关的socket.gaierror; 3)与其他地址错误有关的socket.herror; 4)与在一个socket上调用settimeout()后,处理超时有关的socket.timeout; import socket, sys, time host = sys.argv[1] textport = sys.argv[2] filename