博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口开发、异常处理、网络编程
阅读量:6140 次
发布时间:2019-06-21

本文共 6054 字,大约阅读时间需要 20 分钟。

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

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

用户登录接口代码示例:

import flask,time,jsonfrom lib import toolsserver  = 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

你可能感兴趣的文章
命令查询每个文件文件数
查看>>
《跟阿铭学Linux》第8章 文档的压缩与打包:课后习题与答案
查看>>
RAC表决磁盘管理和维护
查看>>
Apache通过mod_php5支持PHP
查看>>
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
阿里云企业邮箱 在Foxmail 7.0上POP3/IMAP协议设置方法
查看>>