一、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)

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')
if username == 'zy' and 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:接口开发的更多相关文章

  1. 8-1 python 接口开发(提供数据、返回session_id)

    1.接口开发,根据不同查询条件返回数据库查询结果 import flask import tools import json server = flask.Flask(__name__) #新建一个服 ...

  2. 7-4 python 接口开发(提供mock服务)

    1.登录接口开发(数据存在数据库中)  接口开发做mock(模拟功能) tools.py import pymysql def my_db(sql): conn = pymysql.connect(h ...

  3. Python接口开发小知识

    关于数据库设计 接口开发多学习数据库表操作,这是要点 不存在删除数据,每个可能被删除数据的表加一个is_active属性 不同的表可以有多个相同的字段,字段属性少用禁止非空 不要设置太多主外键(高内聚 ...

  4. Python接口开发

    一.flask flask是一个python编写的轻量级框架,可以使用它实现一个网站.web服务. 用flask开发接口的流程为: 1.定义一个server server=flask.Flask(__ ...

  5. python 接口开发(一)

    cmd中,提示pip版本太低,先升级pip   pip install --upgrade pip (pip,安装和管理python扩展包的工具) cmd下,pip,出现详细信息证明装成功了 pip ...

  6. 每天进步一点点——Ganglia的Python扩展模块开发

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/39701245 注:本文涉及到的代码都在centos 6.5 64bit系统上通过验证,Gan ...

  7. 《Python Web 接口开发与测试》---即将出版

    为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化相关的,工作中的接口自动化颇有成效. 我一直是一个没有测试大格局的人,在各种移动测试技术爆发的这一年,我却默默耕耘着自己的一亩三分地儿(We ...

  8. 《Web接口开发与自动化测试 -- 基于Python语言》 ---前言

    前    言 本书的原型是我整理一份Django学习文档,从事软件测试工作的这六.七年来,一直有整理学习资料的习惯,这种学习理解再输出的方式对我非常受用,博客和文档是我主要的输出形式,这些输出同时也帮 ...

  9. 《Web接口开发与自动化测试 -- 基于Python语言》---现已出版。

    终于可以购买了!! 有需要的同学通过下面链接购买. 购买来链接: https://item.jd.com/11806319423.html 为什么要出这样一本书? 首先,今年我有不少工作是跟接口自动化 ...

  10. python之接口开发基础知识

    一.开发接口的作用 1.mock 服务:在别的接口没有开发完成的时候可以模拟一些接口以便测试已经开发完成的接口,例如假的支付接口,模拟支付成功.支付失败. 2.了解接口是如何实现的:数据交互.数据返回 ...

随机推荐

  1. Python中json.dump与repr的区别

    Json是一种轻量级的数据交换格式,Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数: 引入json包: import json json.dumps(): ...

  2. C#LeetCode刷题-贪心算法

    贪心算法篇 # 题名 刷题 通过率 难度 44 通配符匹配   17.8% 困难 45 跳跃游戏 II   25.5% 困难 55 跳跃游戏   30.6% 中等 122 买卖股票的最佳时机 II C ...

  3. 汇编 | x86汇编指令集大全(带注释)

    做mit-6.828的时候遇到了很多汇编知识,但是无奈学校还没学汇编,只能狠心啃啃硬骨头,在网上查到了很多的资料,归档!方便查看 ----------------------------------- ...

  4. GaussDB连接与登出

    连接 连接命令1: gsql -d ${dbName} -U ${userName} -p {port:默认为25308} -h {ip} -W {password} 连接命令2: gsql -d p ...

  5. 在K3s上使用Kong网关插件,开启K3s的无限可能!

    我的工作中很重要的一部分是参加各种各样的技术会议.最近参加的是去年11月的北美KubeCon,在会议的最后一天,所有人都焦头烂额,我也一直机械地向不同的人重复我的自我介绍.后来,我已经十分烦躁,决定逃 ...

  6. ubuntu 绝望事件

    @ubuntu.com hi!大家好,早上发生了很有意思的事情 显示器分辨率(x2) 系统 2560x1440 Ubuntu 20.04.1 LTS 上面的表格是现在的环境 开机进入锁屏页面,正常显示 ...

  7. C#实践设计模式原则SOLID

    理论跟实践的关系,说远不远,说近不近.能不能把理论用到实践上,还真不好说.   通常讲到设计模式,一个最通用的原则是SOLID: S - Single Responsibility Principle ...

  8. springboot + kafka 入门实例 入门demo

    springboot + kafka 入门实例 入门demo 版本说明 springboot版本:2.3.3.RELEASE kakfa服务端版本:kafka_2.12-2.6.0.tgz zooke ...

  9. Microsoft Remote Desktop 10.3.12 下载

    下载地址:https://mac.softpedia.com/

  10. DHCPV6 vs DHCPV4

    原文链接:https://blog.csdn.net/kdb_viewer/article/details/83310904 一.DHCPv4 vs DHCPv6 1. 相同点 使用DHCP clie ...