码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-07-06 18:59:14      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:反馈   style   lis   life   文件   inf   man   ssl   访问   

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

 

 

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

标签:反馈   style   lis   life   文件   inf   man   ssl   访问   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!