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

一.接口开发,有依赖关系的接口开发

1.场景:用户登录后发表文章

用户登录接口代码示例:

import flask,time,json
from lib import tools
server  = flask.Flask(__name__)

@server.route(‘/login‘,methods=[‘get‘])
def login():
   username = flask.request.values.get(‘username‘)
   pwd = flask.request.values.get(‘pwd‘)
   if username == ‘zhouly‘ and pwd==‘123456‘:
      session_id = tools.my_md5(username+time.strftime(‘%Y%m%d%H%M%S‘))
      key = ‘txz_session:%s‘%username
      tools.op_redis(key,session_id,600)
      res = {‘session_id‘:session_id,‘error_code‘:0,‘msg‘:‘登录成功‘,
            ‘login_time‘:time.strftime(‘%Y%m%d%H%M%S‘) } #给用户返回的信息
      json_res = json.dumps(res,ensure_ascii=False)#返回结果弄成json
      res = flask.make_response(json_res)  #构造成返回结果的对象
      res.set_cookie(key,session_id,3600) #最后的数字是cookie的失效时间。
      return res

代码执行结果,用户登录成功,返回cookie值给客户端,在客户端查看cookie内容:

1.在浏览器页面点击页面内容中点击鼠标右键,在弹出的快捷菜单中选择"检查"选项

2.在弹出的页面选择"pplication"菜单查看cookies内容

3.在redis数据库中查看session_id 内容

用户要再执行发布文章操作,要拿客户端的cookie中的session_id与redis数据库中的session_id做匹配,如果是一样的,表示该用户已经登录系统,可以执行发布文章操作.

用户发布文章的代码示例:

@server.route(‘/posts‘)
def posts():
   cookies = flask.request.cookies  #所有的cokies
   username = ‘‘  #
   session = ‘‘#定义这两个变量是为了,在没有传cookie的时候用的。
   for key,value in cookies.items():
      if key.startswith(‘txz_session‘): #判断cookie以txz_session开头的话,取到它
         username = key
         session = value  #调用接口的时候用户传过的seesion,从cookie里面取过来的
   redis_session = tools.op_redis(username) #从redis里面获取到的的cookie
   if redis_session == session:  #判断传过来的seeion和redis里面的session一样
      title = flask.request.values.get(‘title‘)#获取文章标题
      conent = flask.request.values.get(‘content‘)#获取文章内容
      article_key =‘article:%s‘%title     #key都以article开头
      tools.op_redis(article_key,conent) #把文章写入redis
      res = {‘msg‘:‘文章发表成功!‘,‘code‘:0}
   else:
      res = {‘msg‘:‘用户未登录!‘,‘code‘:2009}

   return json.dumps(res,ensure_ascii=False)

在浏览器执行posts接口

二、项目添加环境变量、搭建环境说明

1.添加环境变量

import sys,os

BASE_PATH=sys.path.insert(0,r‘E:\syz\syz-code\day8\new_api‘)#路径前面加r,避免换行符\n

BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#__file__获取当前路径

BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

#获取到程序的主目录,将当前路径设置为环境变量,可以在任意程序、任意平台设置,__file__获取当前路径,路径分隔符为/,所以前面要加绝对路径os.path.abspath

2.搭建测试环境

第一次搭建测试环境工作内容:

1、申请服务器资源,有N台服务器,Windows, Linux,Windows,(.net开发的),Linux的跨平台

2、安装依赖软件,

java : tomcat jdk1.7 oracle/mysql redis

python: nginx ,apache,python3 ....

3、获取源代码(编译、打包)

4、导入基础数据(建表、执行sql)

5、修改配置文件

6、启动服务

日常部署工作内容:

1、获取源代码(编译、打包)

2、执行sql(可选)

3、修改配置文件

4、重启服务

三、异常处理

即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

大多数的异常都不会被程序处理,都以错误信息的形式展现。

异常以不同的类型出现,这些类型都作为信息的一部分打印出来: 例子中的类型有 ZeroDivisionError,NameError 和 TypeError。

错误信息的前面部分显示了异常发生的上下文,并以调用栈的形式显示具体信息。

try语句按照如下方式工作;

  • 首先,执行try子句(在关键字try和关键字except之间的语句)
  • 如果没有异常发生,忽略except子句,try子句执行后结束。
  • 如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
  • 如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。

处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。

一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组,例如:

except (RuntimeError, TypeError, NameError): pass

代码示例:

first = input(‘请输入除数:‘)
second = input(‘请输入被除数:‘)
try:
    first = int(first)
    second = int(second)
    res = first/second
    li = [1,2,3,4]
# except ValueError as e: #这个e代表错误信息,如果上面的两行代码出现了 ValueError这个错
#     print(e)
#     print(‘请输入整数‘)
# except ZeroDivisionError as e:
#     print(e)
#     print(‘除数不能为0‘)
except Exception as e:   #上面代码出异常的时候走这里,
    print(e)
    print(‘出错了‘)

else: #没有出错,也不是必须写的
    print(‘并没有出错‘)#这个是没有异常的时候走
    print(res)
finally:#不管出错或者没有出错都会执行它,也不是必须写的。比例:关闭数据库连接的操作会用到
    print(‘我是finally‘)

知识点: except与except Exception的区别,except只捕捉某一个异常,except Exception捕捉所有的异常

四、网络编程

1、打开一个网页,把网页内容写入到baidu.html文件

from urllib import request,parse

url = ‘http://www.nnzhp.cn‘

req = request.urlopen(url) #打开一个url,发get请求

content = req.read().decode() #获取返回结果

fw = open(‘baidu.html‘,‘w‘,encoding=‘utf-8‘)

fw.write(content)

2.测试学生信息接口,取接口的返回信息error_code的值进行判断

from urllib import request,parse

import json

url=‘http://api.nnzhp.cn/api/user/stu_info?stu_name=xiaohei‘

req = request.urlopen(url) #打开一个url,发get请求

content = req.read().decode() #获取返回结果

res_dic = json.loads(content) #返回的是json,要把json转成字典

if res_dic.get(‘error_code‘) == 0:

print(测试通过‘)

else:

print(测试失败‘,res_dic)

3、测试用户登录接口

from urllib import request,parse

url = ‘http://api.nnzhp.cn/api/user/login‘

data = {

‘username‘:‘niuhanyang‘,

‘passwd‘:‘密码‘

} #请求数据

data = parse.urlencode(data) #urlencode,自动给你拼好参数

# xx=xx&xx=11

req = request.urlopen(url,data.encode()) #发post请求

print(req.read().decode())

4、使用requests模块发送get请求

import requests

url=‘http://api.nnzhp.cn/api/user/stu_info‘

data={‘stu_name‘:‘小黑‘}

req=requests.get(url,params=data)

print(req.json())#返回的是字典

print(req.text)#string类型,json串

5、使用requests模块发送post请求,测试用户登录,返回信息

url = ‘http://api.nnzhp.cn/api/user/login‘

data = {‘username‘:‘niuhanyang‘,‘passwd‘:‘密码‘} #请求数据

req = requests.post(url,data) #发送post请求

print(req.json())

6、使用requests模块发送post请求,入参是json类型

import random

phone=random.randint(10000000000,99999999999)

url=‘http://api.nnzhp.cn/api/user/add_stu‘

data = {

"name":"zhouly",

"grade":"天蝎座",

"phone":phone,

"sex":"男",

"age":28,

"addr":"河南省济源市北海大道32号"

}

req = requests.post(url,json=data)

print(req.json())

7、使用requests模块发送post请求,添加cookies

url = ‘http://api.nnzhp.cn/api/user/gold_add‘

data = {‘stu_id‘:468,‘gold‘:10000}

djl = {‘niuhanyang‘:‘337ca4cc825302b3a8791ac7f9dc4bc6‘}

req = requests.post(url,data,cookies=djl)

print(req.json())

8、使用requests模块发送get请求,添加header信息

url = ‘http://api.nnzhp.cn/api/user/all_stu‘

header = {

‘Referer‘:‘http://api.nnzhp.cn/‘

}

req = requests.get(url,headers=header)

print(req.json())

9、上传文件

url= ‘http://api.nnzhp.cn/api/file/file_upload‘

data = {

‘file‘:open(r‘C:\Users\bjniuhanyang\Desktop\图\6bd9026dt935575932465&690.jpg‘,‘rb‘)

}

#图片要用rb方式打开

req= requests.post(url,files=data)

print(req.json())

10、下载文件

url = ‘http://up.mcyt.net/?down/46779.mp3‘

req = requests.get(url)

fw = open(‘aaa.mp3‘,‘wb‘)

fw.write(req.content)

原文地址:https://www.cnblogs.com/zhouly-008/p/9053482.html

时间: 2024-11-12 11:57:03

接口开发、异常处理、网络编程的相关文章

iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载+使用输出流代替文件句柄

前言:本篇讲解,在前篇iOS开发之网络编程--使用NSURLConnection实现大文件断点续传下载的基础上,使用输出流代替文件句柄实现大文件断点续传.    在实际开发中,输入输出流用的比较少,但是用起来也是很方便的.iOS开发用到的输入输出流和在Java中的输入输出流是几乎一样的,本质也是一个意思:将网络返回的数据当做流来处理.    输入输出的理解:输入到哪里?输出到哪里?这个问题不难理解,输入输出是要站着服务器角度来思考的,下面用图来解释:    代码关键词: 1.在接收到响应头的代理

iOS开发之网络编程--使用NSURLConnection实现大文件下载

主要思路(实现下载数据分段写入缓存中) 1.使用NSURLConnectionDataDelegate以及代理方法.2.在成功获取响应的代理方法中,获得沙盒全路径,并在该路径下创建空文件和文件句柄.3.在获取data的代理方法中,先设置句柄在沙盒全路径文件末尾,然后通过句柄写入data数据.4.在文件下载完的代理方法中,关闭句柄同时设置句柄引用为nil释放句柄和指针. 使用句柄的思路图(红色的箭头表示句柄,灰色的箭头表示移动的路径): 代码关键词: 类:NSFileHandle的方法 1.fil

iOS开发之网络编程--2、NSURLSessionDownloadTask文件下载

本文内容大纲: 1.回顾NSURLSessionTask 2.NSURLSessionDownloadTask大文件之block下载 3.NSURLSessionDownloadTask大文件之代理方法下载 4.NSURLSessionDownloadTask大文件之代理方法实现断点续传下载 前言:如果读者是第一次阅读或者是学习关于本篇要介绍的NSURLSession的知识,最好先阅读本人前篇<iOS开发之网络编程--1.NSURLSession的基本使用>然后再学习本篇比较好. 1.回顾NS

iOS开发之网络编程--5、NSURLSessionUploadTask+NSURLSessionDataDelegate代理上传

前言:关于NSURLSession的主要内容快到尾声了,这里就讲讲文件上传.关于文件上传当然就要使用NSURLSessionUploadTask,这里直接讲解常用的会和代理NSURLSessionDataDelegate一起搭配实现文件上传功能.另外,下面使用的文件上传思路是和NSURLConnection中本人之前的随笔<iOS开发之网络编程--使用NSURLConnection实现文件上传>提到的上传思路是一样的,都是要将请求信息拼接起来,然后传入到请求里进行上传.这个拼接过程是必要的,但

IOS开发之网络编程(请求数据和断点续传)

IOS开发中网络编程应用场景:JSON数据获取,网络数据的下载. 一:请求JSON数据一般用异步请求的方式,如果用同步请求,则会造成IOS界面的执行过程阻塞,即界面部分在请求数据的过程中必须等待数据加载完毕. JSON数据的获取步骤: 1.设置网络地址的字符串:NSString *URLString = @"http://www.baidu.com"; 2.创建URL:NSURL *URL = [NSURL URLWithString:URLString]; 3.创建请求:NSURLR

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

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

自动化测试第八节---base64、zip方法、异常处理、接口签名、网络编程

1.base64加密 import base64s='1234'new_s = base64.b64encode(s.encode())#加密print('加密完的',new_s)old_s = base64.b64decode(new_s.decode()).decode() #解密回来的print('解密回来的',old_s) def bs64_data_encode(st): '''这个函数是用来base64加密的''' salt='12345' new_str = str(st)+sal

[Android应用开发] 03.网络编程

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

Python进阶开发之网络编程,socket实现在线聊天机器人

系列文章 √第一章 元类编程,已完成 ; √第二章 网络编程,已完成 ; 本文目录 什么是socket?创建socket客户端创建socket服务端socket工作流程图解socket公共函数汇总实战:搭建在线聊天机器人 . 什么是socket? 说到网络编程,难免要提到socket? 那什么是socket呢,中文名叫"套接字",更难理解了吧. 通俗来讲,socket表示一个网络连接,通过这个连接,使得主机间或者一台计算机上的进程间可以通讯. 不管是不同主机,还是同一主机.既然是通信,

iOS开发之网络编程--XCode7 更新以来需要手动设置的内容

XCode7 更新以来,默认是不允许加载一些http网络请求,是因为现在网络大部分使用更安全的https协议头. 所以,iOS网络编程如果出现请求无效,事先考虑是否设置一下了以下操作: