码迷,mamicode.com
首页 > 编程语言 > 详细

Python接口开发

时间:2019-09-01 01:38:30      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:tool   too   python接口   red   一个   set   pass   格式   的区别   

一、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)
    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 = 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接口开发

标签:tool   too   python接口   red   一个   set   pass   格式   的区别   

原文地址:https://www.cnblogs.com/YSPXIZHEN/p/11441108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!