1. 程式人生 > >python實現自定義介面

python實現自定義介面

一、開發介面的作用

  1、mock 服務:在別的介面沒有開發完成的時候可以模擬一些介面以便測試已經開發完成的介面,例如假的支付介面,模擬支付成功、支付失敗。

  2、瞭解介面是如何實現的:資料互動、資料返回

  3、開發給別人檢視資料,避免其他人直接操作、檢視資料庫

 

二、 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)#
轉成字串型別

 

三、介面開發的步驟

  1、例項化server

  2、將裝飾器下面的函式變為一個介面

  3、啟動服務

 

  簡單的介面開發示例:

import flask,json
server = flask.Flask(__name__)           # 例項化server,把當前這個python檔案當作一個服務,__name__代表當前這個python檔案
@server.route('/index',methods=['get'])  # 'index'是介面路徑,如methods不寫,則預設get請求
# 裝飾器,下面的函式變為一個介面
def index(): res = {'msg':'這是我開發的第一個介面','msg_code':'0000'} return json.dumps(res,ensure_ascii=False) # json.dumps 序列化時對中文預設使用的ascii編碼.想輸出真正的中文需要指定ensure_ascii=False server.run(port=8888,debug=True,host='0.0.0.0') # 啟動服務;埠不寫預設是5000,也可以自定義,但注意不要與機器上已佔用的port起衝突, # debug=True,改了程式碼後,不用重啟,它會自動載入重啟 # 'host='0.0.0.0'同一區域網下,別人可以通過IP訪問 # 最終這個介面的訪問地址就是 http://127.0.0.1/index ,get方法。返回資料是json格式res內容

介面訪問中,經常會需要輸入引數。那麼如果要接受傳入的引數,則可用以下方法:

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

  示例:開發一個登入介面

import flask
import tools #自己寫的py,裡面寫了一些下面需要呼叫的函式
import json
server = flask.Flask(__name__)
#新建一個服務,把當前這個python檔案當做一個服務

#開發一個登入介面
@server.route('/login',methods=['get'])
def login():
    uname = flask.request.values.get('username')
    pd = flask.request.values.get('passwd')
    sql = 'select * from app_myuser where username="%s"'%uname
    res = tools.my_db(sql) #tools裡的函式:連線資料庫,執行sql並返回結果
    if res:
        if tools.my_md5(pd) == res.get('passwd'): #tools裡的函式,加密密碼
            res = {"code":0,"msg":"登入成功!"}
        else:
            res = {"code":1,"msg":"密碼錯誤!"}
    else:
        res = {'code':2,"msg":"使用者不存在"}
    return json.dumps(res,ensure_ascii=False,indent=4) #輸出json格式

server.run(host='127.0.0.1',port=8998,debug=True)#若別人訪問這個介面,則host需要輸入自己的ip地址,而不是127.0.0.1

#以上介面訪問地址即:http://127.0.0.1:8998/login?username=usertest&passwd=123123

tools裡面封裝的函式如下:

import pymysql  #連線資料庫,執行sql並返回sql執行結果
def my_db(sql):
    conn = pymysql.connect(host='127.0.0.1',user='xxx',password='123456',
                    db='db1',port=3306,charset='utf8',autocommit=True)
    cur = conn.cursor(pymysql.cursors.DictCursor)
    cur.execute(sql)
    res = cur.fetchone() #{'username':'test'}  {}
    cur.close()
    conn.close()
    return res

import hashlib
def my_md5(s,salt=''): #md5加密
    s = s+salt
    news = str(s).encode()
    m = hashlib.md5(news)
    return m.hexdigest()

if __name__ == '__main__':
    #判斷如果是在別的檔案裡面匯入這個python檔案的話,就不執行下面的程式碼
    print(strTotimestamp())
    print(clean_log('.'))
    print(clean_log('.',2))