溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python接口如何寫

發(fā)布時(shí)間:2020-09-23 11:24:07 來(lái)源:億速云 閱讀:179 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹python接口如何寫,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、flask

flask是一個(gè)python編寫的輕量級(jí)框架,可以使用它實(shí)現(xiàn)一個(gè)網(wǎng)站或者web服務(wù)。本文就用flask來(lái)開(kāi)發(fā)一個(gè)接口。

flask需要先安裝再引用。pip install flask

用flask開(kāi)發(fā)接口的流程為:

1、定義一個(gè)server

server=flask.Flask(__name__) #__name__代表當(dāng)前的python文件。把當(dāng)前的python文件當(dāng)做一個(gè)服務(wù)啟動(dòng)

2、然后定義接口函數(shù),一般函數(shù)和接口函數(shù)的區(qū)別在于,定義為接口的函數(shù)上方要特別加上:

@server.route('/index',methods=['get','post']) #第一個(gè)參數(shù)就是路徑,第二個(gè)參數(shù)支持的請(qǐng)求方式,不寫的話默認(rèn)是get
 
@server.route('/index',methods=['get','post'])#第一個(gè)參數(shù)就是路徑,第二個(gè)參數(shù)支持的請(qǐng)求方式,不寫的話默認(rèn)是get
def index():
    res={'msg':'這是我開(kāi)發(fā)的第一個(gè)借口','msg_code':0}
    return json.dumps(res,ensure_ascii=False)

3、讓server執(zhí)行起來(lái)

server.run(port=7777,debug=True,host='0.0.0.0')
#port可自定義填寫。不要與機(jī)器上已占用的port沖突。
#debug=True,在代碼進(jìn)行修改后,程序會(huì)自動(dòng)重新加載,不用再次運(yùn)行。也就是運(yùn)行一次即可,即使改動(dòng)代碼,也不需要重啟服務(wù)
#host本地ip地址,寫0.0.0.0,可以讓其他人直接訪問(wèn)本機(jī)的ip。
#最終這個(gè)接口的訪問(wèn)地址就是  http://127.0.0.1/index  ,get方法或者post方法都可。返回?cái)?shù)據(jù)是json格式res內(nèi)容

示例:

import flask,json
server=flask.Flask(__name__)#__name__代表當(dāng)前的python文件。把當(dāng)前的python文件當(dāng)做一個(gè)服務(wù)啟動(dòng)
@server.route('/index',methods=['get','post'])#第一個(gè)參數(shù)就是路徑,第二個(gè)參數(shù)支持的請(qǐng)求方式,不寫的話默認(rèn)是get
def index():
    res={'msg':'這是我開(kāi)發(fā)的第一個(gè)借口','msg_code':0}
    return json.dumps(res,ensure_ascii=False)
server.run(port=7777,debug=True,host='0.0.0.0')

接口訪問(wèn)中,經(jīng)常會(huì)需要輸入?yún)?shù)。那么如果要接受傳入的參數(shù),則可用以下方法:

  username=flask.request.values.get('username')

示例:

import flask,json
server=flask.Flask(__name__)#__name__代表當(dāng)前的python文件。把當(dāng)前的python文件當(dāng)做一個(gè)服務(wù)啟動(dòng)
@server.route('/reg',methods=['post'])#只有在函數(shù)前加上@server.route (),這個(gè)函數(shù)才是個(gè)接口,不是一般的函數(shù)
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':'注冊(cè)成功','msg_code':0}
    else:
        res={'msg':'必填字段未填,請(qǐng)查看接口文檔','msg_code':1001} #1001表示必填接口未填
    return json.dumps(res,ensure_ascii=False)
server.run(port=7777,debug=True,host='0.0.0.0')
#端口不寫默認(rèn)是5000.debug=True表示改了代碼后不用重啟,會(huì)自動(dòng)幫你重啟.host寫0.0.0.0,別人就可以通過(guò)ip訪問(wèn)接口。否則就是127.0.0.1

二、cookie操作處理

假設(shè)在做登錄接口的時(shí)候,要添加cookie到本地,則需要對(duì)接口返回的json串做一下操作:

res = flask.make_response(json_res) #json_res是接口返回?cái)?shù)據(jù)。然后對(duì)json_res在做操作,構(gòu)造成返回結(jié)果的對(duì)象
res.set_cookie(key,session_id,3600) #最后的數(shù)字是cookie的失效時(shí)間。這樣設(shè)置以后,在執(zhí)行登錄接口成功登錄,則會(huì)同時(shí)在本地加入cookie。其中key和session_id的值根據(jù)實(shí)際情況定義

例子:

@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)#返回結(jié)果弄成json
        res = flask.make_response(json_res)  #構(gòu)造成返回結(jié)果的對(duì)象
        res.set_cookie(key,session_id,3600) #最后的數(shù)字是cookie的失效時(shí)間。
        return res

以上操作可成功保存cookie到本地。以后接口中需要使用coookie的時(shí)候,只需獲?。?/p>

cookies = flask.request.cookies  #所有的cokies,是個(gè)字典。然后可通過(guò)字典獲取到對(duì)應(yīng)的cookie,并執(zhí)行操作。

例:比如在做一些操作的時(shí)候,必須在登錄狀態(tài)下才可以,這時(shí)候就可以直接拿本地登錄時(shí)的cookie中內(nèi)容和服務(wù)器中的內(nèi)容進(jìn)行比對(duì),如果有一致的,說(shuō)明已成功登錄

@server.route('/posts')
def posts():
    cookies = flask.request.cookies  #所有的cokies
    username = ''  #
    session = ''#定義這兩個(gè)變量是為了,在沒(méi)有傳cookie的時(shí)候用的。
    for key,value in cookies.items():
        if key.startswith('txz_session'): #判斷cookie以txz_session開(kāi)頭的話,取到它
            username = key
            session = value  #調(diào)用接口的時(shí)候用戶傳過(guò)的seesion,從cookie里面取過(guò)來(lái)的
    redis_session = tools.op_redis(username) #從redis里面獲取到的的cookie
    if redis_session == session:  #判斷傳過(guò)來(lái)的seeion和redis里面的session一樣
        title = f

以上是python接口如何寫的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI