python:接口開發


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

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM