day8 网络编程 接口开发 异常处理
Posted catherine093
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day8 网络编程 接口开发 异常处理相关的知识,希望对你有一定的参考价值。
一 、在day7中已经讲了单个接口的开发,今天讲有关系的接口开发,也就是依赖性,比如你要在博客园写文章就必须先登录,登陆之后才能发表文章,那么登陆和发表文章之间就有个依赖关系,要做的就是这种开发:
1.接口开发首先要导入flask,导入我们用的着的方法
截图:__name__这里有必要解释一下,name前后是两个_不要写错
导入方法:
1.如果不嫌麻烦完全可以一级一级目录点出来,
2.也可以手动添加环境变量
3.就是可以用pycharm自动帮我们添加环境变量,右键选择Mark Directory as-->source root,设置后这个new_api就会变色,倒入方法就可以直接from lib import xxx
PS:如果在这个项目中别的目录你设置了环境变量,只能取消设置后再设置你想要的那个目录才可以
4.在python中怎么区分方法和接口,就要用到@server了
解析:括号里第一个参数是路径,比如:127.0.0.1:8989/login,就是标红的这一部分,第二个参数截图中没有,是methods=[\'post\',\'get\'],两个方法都写就是可以用post也可以用get
5.在server下写获取cookie的方法:
6.在获取cookie后,用户发表文章时,系统会拿浏览器中存的token进行对比,如果一致,就表示用户仍然处于登陆状态,可以发表文章,如果不一致,就要重新登陆了
@server.route(\'/posts\') def posts(): # session = flask.request.values.get(\'session\') print(flask.request.cookies) #打印cookiee cookies = flask.request.cookies # for cookie in cookies: #这个是循环cookies这个字典的key # if cookie.startswith(\'txz_session\'): # username = cookie # session = cookies.get(cookie) username = \'\' session = \'\' #定义这两个变量是为了在没有传cookie的时候用的 for key,value in cookies.items(): if key.startswith(\'txz_session\'): #判断session以‘txz_session’开头 username = key session = value #调用接口的时候用户传来的session redis_session = tools.op_redis(username) #从redis中获取到的cookie if redis_session==session: #判断传过来的session和redis中的一样 title = flask.request.values.get(\'title\') content = flask.request.values.get(\'content\') article_key = \'article:%s\'%title tools.op_redis(article_key,content) #往redis写数据,把文章写入redis res = {\'msg\':\'文章发表成功!\',\'code\':0} else: res = {\'msg\':\'用户未登陆\',\'code\':401}
return json.dumps(res,ensure_ascii=False)
二、异常处理,拿最简单的例子来说:5/0 =?除数不能为0 ,
res = 5/0 print(res) 运行结果 除数不能为0 Traceback (most recent call last): File "G:/catherine/python/day8/异常处理.py", line 1, in <module> res = 5/0 ZeroDivisionError: division by zero
import random # guess = random.randint(10,20) # num = input(\'please enter a num:\') # print(num+guess) #运行后,guess是int类型,num是string类型 # please enter a num:3 # Traceback (most recent call last): # File "/G:/catherine/python/day8/异常处理.py", line 11, in <module> # print(num+guess) # TypeError: Can\'t convert \'int\' object to str implicitly
这个时候我们可以对异常具体化, 就要用到try
first = input(\'请输入被除数\') second = input(\'请输入除数\') try: first = int(first) second = int(second) res = first/second # except ValueError as e: #e代表错误信息,把异常放入e,如果出错走except # print(e) # print(\'请输入整数\') # except ZeroDivisionError as e: # print(e) # print(\'除数不能为0\') except Exception as e: #捕捉任何异常 print(e) print(\'wrong\') else:#不出错就走这里 print(\'sure\') print(res) finally: #不管出错或者没有出错都会执行它,也不是必须写的 print(\'我是finally\')
三、补充函数【zip,map.filter】
zip,就是把两个list,合并到一起,如果想同时循环n个list的时候,就可以用zip
eg:
# for a,b in zip(l1,l2): # print(a,b)
map 帮助循环调用函数
def my(num): return str(num) lis = [1,2,3,4,5,6,7] new_lis = [] for i in lis: new_lis.append(my(i)) #如果有map就可以不用这样写 res = map(my,lis) print(res) 运行后 <map object at 0x0000006F84D35C50> res = list(map(my,lis)) #需要强制转换为list才能看到结果 print(res)
filter 也是循环调用函数,不过是过滤,符合情况的留下,不符合的不会出现
def even(num): if num%2==0: return True return False res1 = list(map(even,lis)) #map帮助循环调用函数,函数返回什么就保存什么 运行 [False, True, False, True, False, True, False] res2 = list(filter(even,lis)) #filter只保留返回为真的数据 运行 [2, 4, 6] print(res1) print(res2)
三、网络编程 requests pip install requests
get 请求
def choujiang(userid,sign): url = \'http://api.xxxxx.cn/api/product/choice\' data = {} #请求数据 data[\'userid\'] =userid data[\'sign\'] = sign req =requests.get(url,params=data) #发请求 # print(req.json())#type:dic return req.json()
req.json() 类型是dict
req.text 类型是string
post请求
url = \'http://api.xxxxx.cn/api/user/login\' data = {} data[\'username\']=username data[\'passwd\'] = pwd req = requests.post(url,data) # print(req.json()) try: s = req.json()[\'login_info\'][\'sign\'] #获取到sign的值 uId = req.json()[\'login_info\'][\'userId\'] # print(s) # print(uId) return s, uId except Exception as e: print(e)
3.添加cookie
添加cookie url = \'http://api.xxxxx.cn/api/user/gold_add\' data = {\'stu_id\':468,\'gold\':50} cookie = {\'niuhanyang\':\'337ca4cc825302b3a8791ac7f9dc4bc6\'} req = requests.post(url,data,cookies =cookie) print(req.json())
4.添加header
添加header url = \'http://api.xxxxx.cn/api/user/all_stu\' header = { \'Referer\':\'http://api.xxx.cn/\' } req = requests.get(url,headers = header) print(req.json())
5.上传文件
上传文件 url = \'http://api.nnzhp.cn/api/file/file_upload\' data = { \'file\':open(r\'C:\\Users\\Litsoft\\Desktop\\listitem.png\',\'rb\') # \'file\':open(\'note\',encoding=\'utf-8\') #文件中有中文要加encoding,如果是图片用‘rb } req = requests.post(url,files = data) print(req.json())
6.下载文件
下载文件 # url = \'http://www.nnzhp.cn/wp-content/uploads/2018/01/soup.jpg\' # url = \'http://www.nnzhp.cn/archives/630\' url = \'http://up.mcyt.net/?down/46779.mp3\' req = requests.get(url) # print(req.content) #图片是二进制,所以用content # fw = open(\'s.jpg\',\'wb\') #关于图片,rb是读,wb是写 # fw = open(\'py.html\',\'wb\') #关于html,rb是读,wb是写 fw = open(\'a.mp3\',\'wb\') #关于mp3,rb是读,wb是写 fw.write(req.content)
以上是关于day8 网络编程 接口开发 异常处理的主要内容,如果未能解决你的问题,请参考以下文章