Python接口开发
一、flask
flask是一个python编写的轻量级框架,可以使用它实现一个网站、web服务。
用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)
3、让server执行起来
server.run(port=7777,debug=True,host='0.0.0.0') #port可自定义填写。不要与机器上已占用的port冲突。 #debug=True,在代码进行修改后,程序会自动重新加载,不用再次运行。也就是运行一次即可,即使改动代码,也不需要重启服务 #host本地ip地址,写0.0.0.0,可以让其他人直接访问本机的ip。 #最终这个接口的访问地址就是 http://127.0.0.1/index ,get方法或者post方法都可。返回数据是json格式res内容
示例:
import flask,json
server=flask.Flask(__name__)#__name__代表当前的python文件。把当前的python文件当做一个服务启动
@server.route('/index',methods=['get','post'])#第一个参数就是路径,第二个参数支持的请求方式,不写的话默认是get
def index():
res={'msg':'这是我开发的第一个借口','msg_code':0}
return json.dumps(res,ensure_ascii=False)
server.run(port=7777,debug=True,host='0.0.0.0')
接口访问中,经常会需要输入参数。那么如果要接受传入的参数,则可用方法:username=flask.request.values.get('username')
示例:
import flask,json
server=flask.Flask(__name__)#__name__代表当前的python文件。把当前的python文件当做一个服务启动
@server.route('/reg',methods=['post'])#只有在函数前加上@server.route (),这个函数才是个接口,不是一般的函数
def reg():
username=flask.request.values.get('username')
passwd=flask.request.values.get('passwd')
if username and passwd:
sql='select * from my_user where username="%s";'%username
print(sql)
if my_db(sql):
res={'msg':'用户已存在','msg_code':2001}
else:
insert_sql='insert into my_user (username,passwd,is_admin) values ("%s","%s",0);'%(username,passwd)
my_db(insert_sql)
res={'msg':'注册成功','msg_code':0}
else:
res={'msg':'必填字段未填,请查看接口文档','msg_code':1001} #1001表示必填接口未填
return json.dumps(res,ensure_ascii=False)
server.run(port=7777,debug=True,host='0.0.0.0')
#端口不写默认是5000.debug=True表示改了代码后不用重启,会自动帮你重启.host写0.0.0.0,别人就可以通过ip访问接口。否则就是127.0.0.1
二、cookie操作处理
假设在做登录接口的时候,要添加cookie到本地,则需要对接口返回的json串做一下操作:
res = flask.make_response(json_res) #json_res是接口返回数据。然后对json_res在做操作,构造成返回结果的对象 res.set_cookie(key,session_id,3600) #最后的数字是cookie的失效时间。这样设置以后,在执行登录接口成功登录,则会同时在本地加入cookie。其中key和session_id的值根据实际情况定义
示例:
@server.route('/login',methods=['get'])
def login():
username = flask.request.values.get('username')
pwd = flask.request.values.get('pwd')
':
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到本地。以后接口中需要使用coookie的时候,只需获取:
cookies = flask.request.cookies #所有的cokies,是个字典。然后可通过字典获取到对应的cookie,并执行操作
示例:在做一些操作的时候,必须在登录状态下才可以,这时候就可以直接拿本地登录时的cookie中内容和服务器中的内容进行比对,如果有一致的,说明已成功登录
@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)
Python接口开发的更多相关文章
- 8-1 python 接口开发(提供数据、返回session_id)
1.接口开发,根据不同查询条件返回数据库查询结果 import flask import tools import json server = flask.Flask(__name__) #新建一个服 ...
- 7-4 python 接口开发(提供mock服务)
1.登录接口开发(数据存在数据库中) 接口开发做mock(模拟功能) tools.py import pymysql def my_db(sql): conn = pymysql.connect(h ...
- Python接口开发小知识
关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚 ...
- python 接口开发(一)
cmd中,提示pip版本太低,先升级pip pip install --upgrade pip (pip,安装和管理python扩展包的工具) cmd下,pip,出现详细信息证明装成功了 pip ...
- 每天进步一点点——Ganglia的Python扩展模块开发
转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701245 注:本文涉及到的代码都在centos 6.5 64bit系统上通过验证,Gan ...
- 《Python Web 接口开发与测试》---即将出版
为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...
- 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言
前 言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...
- 《Web接口开发与自动化测试 -- 基于Python语言》---现已出版。
终于可以购买了!! 有需要的同学通过下面链接购买. 购买来链接: https://item.jd.com/11806319423.html 为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化 ...
- python之接口开发基础知识
一.开发接口的作用 1.mock 服务:在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功.支付失败. 2.了解接口是如何实现的:数据交互.数据返回 ...
随机推荐
- MySQL:如何选取Table中的50到100行
MySQL:如何选取Table中的50到100行 使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,MySql已 经为我们提供了这样一个功能. ? 1 2 [sql] ...
- c++ 派生类的构造函数 与 基类构造函数的关系
<面向对象程序设计基础(第二版>李师贤等,第254页:C++语言的基本规则是:创建一个派生类的对象时,如果基类带有构造函数,则先调用基类的构造函数,然后才调用派生类的构造函数. <T ...
- 使用Jmeter对观影券查询接口做性能测试
线程数:虚拟用户数.一个虚拟用户占用一个进程或线程.设置多少虚拟用户数在这里也就是设置多少个线程数. 准备时长: 设置的虚拟用户数需要多长时间全部启动.如果线程数为20 ,准备时长为10 ,那么需要1 ...
- Idea关于Lombok的一些问题( java: 找不到符号 符号)
22:15 Lombok Requires Annotation Processing Annotation processing seems to be disabled for the proje ...
- C++入门经典-例9.5-为具体类型的参数提供默认值
1:默认模板参数是指类模板中由默认的数据类型作为参数的参数,在模板定义时,还可以为默认的数据类型声明,变量,并为变量赋值.代码如下: // 9.5.cpp : 定义控制台应用程序的入口点. #incl ...
- 使用SpringBoot校验客户端传来的数据
前端的数据校验都是辣鸡!后端天下第一! 很多时候我们后端需要前端传数据过来, 比如注册, 修改用户名, 修改密码等等.很可能有些用户就喜欢搞事, 喜欢发一大堆乱七八糟的数据到后端来, 甚至有些前端老哥 ...
- java获取来访者mac信息
根据IP获取对应的Mac地址,支持win10+Linux package com.simonjia.util.other; /** * @Author: SimonHu * @Date: 2019/6 ...
- 苹果应用(.ipa)打包和上传,不用通过苹果商店即可用
签名工具: appuploader(.p12:.cer) 打包平台: http://www.lbuilder.com(收费) 上传平台: http://www.58apk.com (每日50次下载,加 ...
- FScapture录屏后导致麦克风无声问题
- yum源安装mysql数据库 添加密码
学习mysql数据库时,安装的问题一直很烦恼,linux的不同版本的安装方式都可能不同,这里是我学习时的一些总结.也是刚刚开始学习,大佬勿喷,谢谢啦!!! 1.查看是否已经安装 2.如果没安装 yum ...