python之接口开发基础知识
一、开发接口的作用
1、mock 服务:在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功、支付失败。
2、了解接口是如何实现的:数据交互、数据返回
3、开发给别人查看数据,避免其他人直接操作、查看数据库
二、 flask
flask是一个python编写的轻量级框架,可以使用它实现一个网站或者web服务。本文就用flask来开发一个接口。
flask需要先安装再引用。pip install flask
用flask开发接口的流程为:
1、定义一个server
server=flask.Flask(__name__) #__name__代表当前的python文件。把当前的python文件当做一个服务启动
2、然后定义接口函数,一般函数和接口函数的区别在于,定义为接口的函数上方要特别加上:
@server.route('/index',methods=['get','post']) #第一个参数就是路径,第二个参数支持的请求方式,不写的话默认是get,也可以指定一个
@server.route('/index',methods=['get','post'])#第一个参数就是路径,第二个参数支持的请求方式,不写的话默认是get
def index():
res={'msg':'这是我开发的第一个接口','msg_code':0}
return json.dumps(res,ensure_ascii=False)#转成字符串类型
三、接口开发的步骤
1、实例化server
2、装饰器下面的函数变为一个接口
3、启动服务
简单的接口开发示例:
import flask,json
server = flask.Flask(__name__) # 实例化server,把当前这个python文件当作一个服务,__name__代表当前这个python文件
@server.route('/index',methods=['get']) # 'index'是接口路径,如methods不写,则默认get请求
# 装饰器,下面的函数变为一个接口
def index():
res = {'msg':'这是我开发的第一个接口','msg_code':''}
return json.dumps(res,ensure_ascii=False)
# json.dumps 序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii=False server.run(port=8888,debug=True,host='0.0.0.0') # 启动服务;端口不写默认是5000,也可以自定义,但注意不要与机器上已占用的port起冲突,
# debug=True,改了代码后,不用重启,它会自动加载重启
# 'host='0.0.0.0'同一局域网下,别人可以通过IP访问
# 最终这个接口的访问地址就是 http://127.0.0.1/index ,get方法。返回数据是json格式res内容
接口访问中,经常会需要输入参数。那么如果要接受传入的参数,则可用以下方法:
username=flask.request.values.get('username')
示例:开发一个登录接口
import flask
import tools #自己写的py,里面写了一些下面需要调用的函数
import json
server = flask.Flask(__name__)
#新建一个服务,把当前这个python文件当做一个服务 #开发一个登录接口
@server.route('/login',methods=['get'])
def login():
uname = flask.request.values.get('username')
pd = flask.request.values.get('passwd')
sql = 'select * from app_myuser where username="%s"'%uname
res = tools.my_db(sql) #tools里的函数:连接数据库,执行sql并返回结果
if res:
if tools.my_md5(pd) == res.get('passwd'): #tools里的函数,加密密码
res = {"code":0,"msg":"登录成功!"}
else:
res = {"code":1,"msg":"密码错误!"}
else:
res = {'code':2,"msg":"用户不存在"}
return json.dumps(res,ensure_ascii=False,indent=4) #输出json格式 server.run(host='0.0.0.0',port=8998,debug=True) #以上接口访问地址即:http://127.0.0.1:8998/login?username=usertest&passwd=123123
tools里面封装的函数如下:
import pymysql #连接数据库,执行sql并返回sql执行结果
def my_db(sql):
conn = pymysql.connect(host='110.10.1.10',user='xxx',password='',
db='db1',port=3306,charset='utf8',autocommit=True)
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute(sql)
res = cur.fetchone() #{'username':'test'} {}
cur.close()
conn.close()
return res import hashlib
def my_md5(s,salt=''): #md5加密
s = s+salt
news = str(s).encode()
m = hashlib.md5(news)
return m.hexdigest() if __name__ == '__main__':
#判断如果是在别的文件里面导入这个python文件的话,就不执行下面的代码
print(strTotimestamp())
print(clean_log('.'))
print(clean_log('.',2))
python之接口开发基础知识的更多相关文章
- web接口开发基础知识-什么是web接口?
比如我们访问百度的首页,输入的url地址是:https://www.baidu.com/ 那么当我们在浏览器地址栏中输入url,敲回车后,发生了什么事情?怎么就能通过1个url地址就能看到百度的首页了 ...
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以“人”为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是整个IM系统都是以长 ...
- Python运维开发基础09-函数基础【转】
上节作业回顾 #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 实现简单的shell命令sed的替换功能 import ...
- Python运维开发基础04-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen # 仅用列表+循环实现“简单的购物车程 ...
- Python运维开发基础03-语法基础 【转】
上节作业回顾(讲解+温习60分钟) #!/usr/bin/env python3 # -*- coding:utf-8 -*- # author:Mr.chen #只用变量和字符串+循环实现“用户登陆 ...
- Python运维开发基础02-语法基础【转】
上节作业回顾(讲解+温习60分钟) #!/bin/bash #user login User="yunjisuan" Passwd="666666" User2 ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- Python运维开发基础08-文件基础【转】
一,文件的其他打开模式 "+"表示可以同时读写某个文件: r+,可读写文件(可读:可写:可追加) w+,写读(不常用) a+,同a(不常用 "U"表示在读取时, ...
- Python运维开发基础05-语法基础【转】
上节作业回顾(讲解+温习90分钟) #!/usr/bin/env python # -*- coding:utf-8 -*- # author:Mr.chen import os,time Tag = ...
随机推荐
- MySQL排序函数field()详解
在日常开发过程中,排序是经常用到的,有时候有这样的需求. 比如,需要在查询结果中根据某个字段的具体值来排序.如下面例子 上面是一张个人信息 表,假如我们想按照'seiki','iris','xut'来 ...
- 在windows中把一个文件夹打成war包
转: 在windows中把一个文件夹打成war包 一般开发打war包时都是用MyEclipse或IntelliJ IDEA等直接导出war文件,这里介绍一种如何把一个文件夹打成war包的方式,如下 ...
- C语言进阶--DAY3
主要讲解数组和指针有关问题 1. 数组名的本质是一个常量指针 2. 内存编址的最小单位是字节,对于变量来说,一个变量可以取1.2.4.8等字节,对变量取地址来说,取的是低位字节的地址,在32位机中其对 ...
- Explicit Constructors(显式构造函数)
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // ...
- Go数据类型和变量
一:Go数据类型 1.1 Go语言按照分类有以下几种数据类型 布尔型 布尔型的是一个常量true或者false 数字类型 整型int和浮点型 float32, float64 字符串类型 字符串就是一 ...
- Java Web 开发必须掌握的三个技术:Token、Cookie、Session
在Web应用中,HTTP请求是无状态的.即:用户第一次发起请求,与服务器建立连接并登录成功后,为了避免每次打开一个页面都需要登录一下,就出现了cookie,Session. Cookie Cookie ...
- Potplayer播放器使用笔记
Potplayer播放器使用笔记 1.暂停-播放的快捷键是 空格键2.C播放视频的加速倍数3.X播放的时候减速的倍数 Tab键:显示一下播放的信息,很多 Enter键:全屏或是缩小播放窗口 全屏拉伸快 ...
- 购物demo
这段时间从一个模板网站上拷了个购物系统的demo,试着写了一下,发现div+css布局还真是精妙无穷呢.设置好了布局,加上动态效果也只是锦上添花而已.所以,接下来的重点就是布局了! 我把网址粘上去:h ...
- python机器学习-sklearn挖掘乳腺癌细胞(五)
python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...
- JavaSE_坚持读源码_HashSet对象_Java1.7
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如 ...