python基础

flask之mock接口

  所谓mock接口,其实就是我们在正式接口还没联调或者是测试接口没有正式使用时,自己创建一个模拟接口,来供项目暂时打通功能或者测试流程梳理的桥梁,而我们这儿使用flask模块,它是一个web框架,可以做一个服务使用

import flask    #web框架模块
#mock接口 表示虚拟接口
import datetime
server = flask.Flask(__name__)#__name__表示把当前这个python文件做成一个服务
@server.route('/time')#使用装饰器添加接口路径,自动运用下面的方法,默认不写为get请求,post请求添加参数metho=['post']
def time():
time_now= str(datetime.datetime.now())
return time_now
@server.route('/mypage')#我们开发网站也是一样,我这边写好一个html页面,只要读取页面内容,就可以放在/page的路径下,就可以访问了
def myhtml():
r = open('html.html','r',encoding='utf-8')
res = r.read()
r.close()
return res
server.run(host= '0.0.0.0',port=2333,debug=True)
#默认端口号5000,host='0.0.0.0'表示在此局域网内用户都可以访问,debug=True表示调试模式,改完代码自动重启服务器
#get传参
@server.route('/login')
def login():#模拟登陆接口,需要参数用户名和密码
name = flask.request.args.get('username')#获取输入的用户名,args这个方法只能获取url中的参数,不能获取post传参
passwd = flask.request.args.get('password')#获取输入的密码
if name and passwd: #校验用户名和密码是否符合要求
res = {"error_code":1000,"msg":"登陆成功"}
else:
res = {"error_code":3000,"msg":"参数错误,请查看接口文档"}
res = json.dumps(res,ensure_ascii=False)
   return json.dumps(res,ensure_ascii=False)#把字典转成json串,ensure_ascii=False不写如果是中文在页面会显示url编

  

#post传参
@server.route('/login',methods=['post'])#post请求只能用测试工具进行请求
def login():#模拟登陆接口,需要参数用户名和密码
name = flask.request.values.get('username')#获取输入的用户名,values方法能在url和传参中都能获取到
passwd = flask.request.values.get('password')#获取输入的密码
if name and passwd: #校验用户名和密码是否符合要求
res = {"error_code":1000,"msg":"登陆成功"}
else:
res = {"error_code":3000,"msg":"参数错误,请查看接口文档"}
return json.dumps(res,ensure_ascii=False)#把字典转成json串,ensure_ascii=False不写如果是中文在页面会显示url编码
server.run(host= '0.0.0.0',port=2333,debug=True)

  使用postman向接口发起请求,把参数写在参数体中

  关于flask web框架感兴趣可以参考    https://www.cnblogs.com/huchong/p/8227606.html#_label6  

                      https://dormousehole.readthedocs.io/en/latest/ 

  接口连接数据库    操作很简单,写一个配置数据库的方法

    name = flask.request.values.get('username')
passwd = flask.request.values.get('password')
if name and passwd:
sql = "select username,password from mysql_db where username ='%s'and password = '%s'"%(name,passwd)
sql_res = connect_mysql(sql)#导入mysql的方法
if sql_res:#如果有值说明匹配成功
res = {"error_code": 1000, "msg": "登陆成功"}
else:
res = {"error_code":2000,"msg":"用户名密码错误,请查看接口文档"}
return json.dumps(res, ensure_ascii=False)
else:
res = {"error_code":3000,"msg":"参数错误,请查看接口文档"}
res = json.dumps(res,ensure_ascii=False)
return res

  

  接口传json数据

#post中json参数请求
@server.route('/json',methods=['post'])
def add_student():
params = flask.request.json#当入参用的是字典,可以通过此方法获取
if params:
username = params.get('name')#获取value值,之后该校验校验,该调用调用,如果没有传过来可以给默认值
password = params.get('pwd')
res = {"error_code": 200, "msg": "请求成功"}
else:
res = {"error_code":3001,"msg":"入参必须为json格式,请查看接口文档"}
return json.dumps(res,ensure_ascii=False)#字典转json

  接口文件上传

@server.route('/upload',methods=['post'])
#文件上传
def upload():
file = flask.request.files.get('file_name',None)#上传文件,None表示不是必传的
if file:
res = {"error_code":200,"msg":"上传成功"}#后期还可以做文件名称根据时间来拼接,避免上传同两份一样的文件被覆盖
else:
res = {"error_code": 3000, "msg": "没有上传成功"}
return json.dumps(res,ensure_ascii=False)
server.run(host= '0.0.0.0',port=2333,debug=True)

环境变量扩展

  当项目包装好之后,要想在任何一个电脑都可以运行python项目,就必须把运行文件加入python的环境变量,在文件下加入下面代码

import os,sys
res = os.path.abspath(__file__) #取当前文件的绝对路径
base_path = os.path.dirname(os.path.dirname(res))#取父目录,也就是文件包根目录,我这边只有两层
sys.path.insert(0,base_path)#加入环境变量 

初入网络编程

  所谓网络编程就是python操作网络,我们可以通过get和post进行传参,文件上传,文件下载等操作

urllib模块  是python的标准模块

from urllib.request import urlopen  #python自带模块
url = 'https://www.cnblogs.com/RainBol/p/9835136.html'#定义一个网站
#get请求
res = urlopen(url).read()#发送get# 请求,并用read读取内容,再用res接收结果
pa = res.decode()#获取到的是二进制类型,需要转换
with open('com.html','w',encoding='utf-8') as f:
f.write(pa)#把内容写到本地保存起来,相当于一个简单的爬虫
from urllib.parse import urlencode
#post请求
data = {'username':'admin','password':123456}
url2 = 'http://xxxlogin/login/rainbol_login'
print(urlencode(data))#返回结果为 username=admin&password=123456这种格式的字符号
data = urlencode(data)
res = urlopen(url2,data.encode()).read()#发送post请求,后面参数将data转成二进制类型,并read取内容,保存到res中
print(res.decode())#再将而二进制类型转成字符串
import json
d = json.loads(res.decode())#将字符串转成json
print(d.get('session_id'))#取到session值做处理
#处理太麻烦,所以下面我们使用requests模块

requests库  

  封装了urlib的内容,在代码量上明显与urlib模块少

  requests中response对象的属性

   res.status.code#获取http状态码
   res.text#获取http响应内容的字符串形式
   res.encoding#从http header中猜测的响应内容编码方式
   res.apparent_encoding#从内容中分析出的响应内容编码方式(备选编码方式)
   res.content#http响应内容的二进制形式

  requests.request,既然是封装,其实就是request的内置方法了

  kv = {'k1':'v1','k2':'v2'}

  r = requests.request('GET','http://xxx.com',params=kv)  

  (method,url,**kwargs)

    其中**kwargs为可选,其中有很多字段

      params参数:对url进行修改

      data参数,

      json参数,

      header参数:定制协议头,

      cookie参数,

      auth参数,

      files参数,

      timeout参数:设定的超时时间(秒为单位)

      proxies:字典认证,设定访问代理服务器,可以增加登录认证,使用此参数可以隐藏爬取用户原ip地址信息

      allow_redirects:True/False  默认为True,重定向开关

      stream:True/False  默认为True,对获取的内容立即下载

      verify:True/Flase   默认为True,认证SSL证书开关  

      cert:本地SSL证书路径

      

  print(r.url)#获取url链接,kv参数会在url后面自动拼接?k1=v1&k2=v2

  get请求

import requests
#requests.get(url,params=None,**kwargs)
params:url中的额外参数,字典或字节流格式
#get请求
url = 'https://www.cnblogs.com/RainBol/p/9835136.html'
res = requests.get(url)#请求url,如果get请求有参数一定是params=后面跟字典
print(res.text)#text获取页面内容,返回字符串

  post请求

#post请求
#requests.post(url,data=None,json=None,**kwargs)
data = {'username':'admin','password':123456}
res = requests.post(url,data = {'username':'admin','password':123456})#参数名是data后面跟字典,
requests可以请求验证ssl证书,当我们请求https会用到,如果验证失败会抛出错误,要求参数添加上传证书都verify=False可以跳过,或者加cert参数,可以包含多个证书的元祖
print(res.json())#返回一个字典
print(res.text)#返回json格式的字符串

  二进制文件处理

#请求二进制文件
url = 'https://pic.cnblogs.com/avatar/1463363/20180812122954.png'
res = requests.get(url)
tupian = res.content#返回二进制文件内容
with open('picture.jpg','wb') as f:
f.write(tupian)#写入二进制文件到本地

  请求添加cookies,headers

res = requests.get(url,cookies = {"k":"v","xxx":"xxxx"},
header = {"session":"s3298&G","xxx":"xxxx"})#关键字,字典

  上传json类型

data = {'username':"aaa","password":123345,"phone":""}
res = requests.post(url,json=data)

  上传文件

url = 'www.xxxupload.com/rainbol/upload'
res = requests.post(url,files = {'参数名k':open('文件名','rb')})
print(res.json())

版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

python学习之flask接口开发,环境变量扩展,网络编程requests的更多相关文章

  1. python学习笔记:接口开发——PythonWEB框架之Flask

    Flask是一个使用 Python 编写的轻量级 Web 应用框架,安装命令如下 pip install flask 一.服务端接口是怎么开发的? 1.启动一个服务 2.接收到客户端传过来的数据3.登 ...

  2. python学习笔记(十三)接口开发

    一.开发接口的作用 1.mock接口,模拟一些接口,在别的接口没有开发好的时候,需要开发一些模拟接口进行调试和测试. 2.查看数据,比如,获取所有学员信息的接口,就不需要提供数据库的查看信息. 二.接 ...

  3. python学习笔记:接口开发——flask Demo实例

    举例1,返回当前时间接口 ''' 初始化:所有的Flask都必须创建程序实例, web服务器使用wsgi协议,把客户端所有的请求都转发给这个程序实例 程序实例是Flask的对象,一般情况下用如下方法实 ...

  4. Nginx+Python+uwsgi+Django的web开发环境安装及配置

    Nginx+Python+uwsgi+Django的web开发环境安装及配置 nginx安装 nginx的安装这里就略过了... python安装 通常系统已经自带了,这里也略过 uwsgi安装 官网 ...

  5. 在windows下使用多版本Python安装相应的虚拟开发环境

    在windows下面使用多版本Python安装相应的虚拟开发环境   在搭建一个项目的时候,希望使用最新版的Python3.7版本,但是Python3.6的版本也要留下,那么问题来了,如何解决这个问题 ...

  6. Laravel 学习 .env文件 getenv 获得环境变量的值

    Laravel 学习 .env文件 getenv 获得环境变量的值  我们还需要对应用的 .env 文件进行设置,为应用指定数据库名称 sample. .env . . . DB_DATABASE=s ...

  7. qt学习教程1.qt开发环境搭建

    qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...

  8. 【转】Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。

    @2019-02-28 [小记] Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印.

  9. Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

    Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...

随机推荐

  1. k8s SLUB: Unable to allocate memory on node -1 错误

    Try to Fix Two Linux Kernel Bugs While Testing TiDB Operator in K8sWed, May 1, 2019 Wenbo Zhang Auth ...

  2. 微信小程序,内容组件中兼容的H5组件

    受信任的HTML节点及属性 全局支持class和style属性,不支持id属性. 节点 属性 a   abbr   address   article   aside   b   bdi   bdo ...

  3. 使用第三方Java类库jaudiotagger完成Flac音频文件metadata(元数据)的读和修改

    最近需要使用Java Swing做个读写Flac格式音频文件的小GUI工具,虽然Mp3tag完全可以完成Flac的读写(编辑)任务,但是为了简化工作流程(编辑Flac信息后调用其它系统的接口完成部分信 ...

  4. go安装以及使用gomod、 goland设置

    一. 安装go 1. 官网下载go安装包,按照指引安装即可, 2. 推荐使用go1.12版本 ,它新增加了go mod用来管理依赖,并且不需要我们再刻意设置gopath环境变量 3. 默认go会将$H ...

  5. C++拾忆

    1.引用 1.建立引用的时候,必须初始化,引用一旦初始化,就和一个对象绑定,不能再修改为其他对象的引用 2.对引用取地址,和对原始对象取地址,是同一个地址 3.不能用做引用的:void.数组 2.内联 ...

  6. Spring Boot制作启动图案

    SpringBoot在启动时会有一个默认图案的,如果不喜欢可以自己制作一个. 在resources的目录下新建banner.txt文件. 制作图案地址:springboot启动图案定制 通过输入字符串 ...

  7. [.Net] - 使用 iTextSharp 生成基于模板的 PDF,生成新文件并保留表单域

    背景 基于 PDF Template 预填充表单项,生成一份新的 PDF 文件,并保留表单域允许继续修改. 代码段 using iTextSharp.text.pdf; /* Code Snippet ...

  8. Jenkins+maven+gitlab自动化部署之Jenkins系统管理配置(四)

    一.Jenkins全局工具配置 在jenkins首页依次进入系统管理>>全局工具配置: 1) jdk.git.maven配置 指定其在服务器中的目录位置 二.插件管理 1)依次点开系统管理 ...

  9. shiro是什么?

    是什么? Shiro是一个非常强大的.易于使用的.开源的.权限框架.它包括了权限校验.权限授予.会话管理.安全加密等组件. 为什么要使用shiro? 如果你是需要设计RBAC(Role Based A ...

  10. Docker 学习笔记(二):Dockerfile 定制镜像

    镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题.镜像构建透明性的问题.体积 ...