视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python接口怎么写
2020-11-27 14:06:29 责编:小采
文档


一、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=='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到本地。以后接口中需要使用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 = f

下载本文
显示全文
专题