python如何写上一接口

发布网友 发布时间:2022-04-24 18:33

我来回答

2个回答

懂视网 时间:2022-05-10 06:53

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

热心网友 时间:2022-05-10 04:01

# -*- coding:utf-8 -*-# Author Caoxlimport sys account_file='E:\user.txt'locked_file='E:\locked.txt' def deny_account(username): print('您的用户已被锁定') with file(locked_file,'a') as deny_f: deny_f.write('\n'+username) def main(): retry_count=0 retry_limit=3 #循环次数 while retry_count<retry_limit: #用户最多重复登陆3次 username=raw_input('请输入您的用户名:') #引导用户输入用户名 with file(locked_file,'r') as lock_f: #采用with打开方式,将locked_file赋值lock_f,防止忘记f.close()关闭文件 for line in lock_f.readlines(): #循环遍历每一行的内容 if len(line)==0: #对每一行内容进行处理 continue if username == line.strip(): #利用.strip这个函数去掉换行符,来对username进行匹配。 sys.exit('用户已经被锁定!') if len(username)==0: #提示用户登录时,用户名不能为空! print('用户名不能为空,请重新输入') continue password= raw_input('请输入您的密码:') #引导用户输入密码 with file(account_file,'r') as account_f: flag= False for line in account_f.readlines(): user,pawd=line.strip().split() #将用户名和对应密码进行处理 if username==user and password==pawd: #判断用户名和密码 print('success!') flag=True break #退出for循环 if flag==False: #避免用户在三次输入后,依然提示重新输入。 if retry_count<2: print('您输入的用户名或密码有误,请重新输入!') retry_count+=1 else: print('欢迎用户登陆成功!!') break # 加标志位是为了用户能够成功推出整个循环! deny_account(username) #对应上面的def函数把锁定账号加入文档中去 if __name__ == '__main__': main()

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com