欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用python實(shí)現(xiàn)接口的方法

 更新時(shí)間:2017年07月07日 08:50:33   作者:修仙小白  
接口只是定義了一些方法,而沒有去實(shí)現(xiàn),多用于程序設(shè)計(jì)時(shí),只是設(shè)計(jì)需要有什么樣的功能,但是并沒有實(shí)現(xiàn)任何功能,這些功能需要被另一個(gè)類(B)繼承后,由 類B去實(shí)現(xiàn)其中的某個(gè)功能或全部功能。

接口基礎(chǔ)知識:

簡單說下接口測試,現(xiàn)在常用的2種接口就是http api和rpc協(xié)議的接口,今天主要說:http api接口是走h(yuǎn)ttp協(xié)議通過路徑來區(qū)分調(diào)用的方法,請求報(bào)文格式都是key-value形式,返回報(bào)文一般是json串;

接口協(xié)議:http、webservice、rpc等。

請求方式:get、post方式

請求參數(shù)格式:

  a. get請求都是通過url?param=xxx&param1=xxx

  b. post請求的請求參數(shù)常用類型有:application/json、application/x-www-form-urlencoded、multipart/form-data、text/html等。

還需要知道接口的url、參數(shù)類型、返回結(jié)果的數(shù)據(jù)格式、了解接口是否有header、cookie等信息。 

接口的實(shí)現(xiàn):請求方式-get,接口的寫法:

 import flask
 from flask import request
 from flask import jsonify
 import tools
 import OP_db
 import settings
 '''
 flask: web框架,可以通過flask提供的裝飾器@server.route()將普通函數(shù)轉(zhuǎn)換為服務(wù)
 登錄接口,需要傳url、username、passwd
 '''
 #創(chuàng)建一個(gè)服務(wù),把當(dāng)前這個(gè)python文件當(dāng)做一個(gè)服務(wù)
 server = flask.Flask(__name__)
 #server.config['JSON_AS_ASCII'] = False
 
 # @server.route()可以將普通函數(shù)轉(zhuǎn)變?yōu)榉?wù) 登錄接口的路徑、請求方式
 @server.route('/login', methods=['get'])
 def login():
  # 獲取通過url請求傳參的數(shù)據(jù)
  username = request.values.get('name')
  # 獲取url請求傳的密碼,明文
  pwd = request.values.get('pwd')
  # 判斷用戶名、密碼都不為空,如果不傳用戶名、密碼則username和pwd為None
  if username and pwd:
   # 獲取加密后的密碼
   password = tools.md5_pwd(pwd)
   #執(zhí)行sql,如果查詢的username和password不為空,說明數(shù)據(jù)庫存在admin的賬號
   sql = 'select name,password from test where name= "%s" and password= "%s";' %(username, password)
   # 從數(shù)據(jù)查詢結(jié)果后,res返回是元組
   res = OP_db.getconn(
    host=settings.mysql_info['host'],
    user=settings.mysql_info['user'],
    passwd=settings.mysql_info['pwd'],
    db=settings.mysql_info['db'],
    port=settings.mysql_info['port'],
    sql=sql
   )
   if res:  #res的結(jié)果不為空,說明找到了username=admin的用戶,且password為加密前的123456
    resu = {'code': 200, 'message': '登錄成功'}
    return jsonify(resu) #將字典轉(zhuǎn)換為json串, json是字符串
   else:
    resu = {'code': -1, 'message': '賬號/密碼錯誤'}
    return jsonify(resu)
  else:
   res = {'code': 999, 'message': '必填參數(shù)未填寫'}
   return jsonify(res)
 
 if __name__ == '__main__':
  server.run(debug=True, port=8888, host=0.0.0.0) #指定端口、host,0.0.0.0代表不管幾個(gè)網(wǎng)卡,任何ip都可以訪問
md5加密、數(shù)據(jù)庫mysql的操作詳見我的其他博客~~~~~

get訪問接口:

項(xiàng)目啟動后,接口的地址是:http://127.0.0.1:5000/,默認(rèn)端口是5000。

打開瀏覽器,輸入urlhttp://127.0.0.1:5000/xxx?name=xxx&pwd=123456,后面跟上接口的地址login,參數(shù)跟url直接使用?相連,每個(gè)請求參數(shù)直接使用&相連。請求成功,則返回{'code': 200, 'message': '登錄成功'}。

 請求方式-post,接口的寫法:

 import flask
 from flask import jsonify
 from flask import request
 from conf import opMysql
 from conf import md5_create
 '''
 注冊接口:
 post請求,請求參數(shù)入?yún)㈩愋蚸son
 {
  "username":"aaa",
  "pwd":"123456",
  "c_pwd":"123456"
 }
 '''
 server = flask.Flask(__name__)
 @server.route('/register', methods=['get', 'post'])
 def registerPost():
  #判斷接口的請求方式是GET還是POST
  if request.method == 'POST':
   # 獲取請求參數(shù)是json格式,返回結(jié)果是字典
   params = request.json
   username = params.get('username')
   pwd = params.get('pwd')
   confirmpwd = params.get('confirmpwd')
   if username and pwd and confirmpwd: # 判斷輸入的用戶名、密碼、確認(rèn)密碼都不為空
    select_sql = 'select username from lhldemo where username = "%s" ;'%username
    # 查詢注冊的用戶是否存在數(shù)據(jù)庫,如果存在,則username不為空,否則username為空
    res_mysql = opMysql.op_select(select_sql)
    if res_mysql:
     return jsonify({"code": 999, "mesg": "用戶已注冊"})
    else:
     if pwd == confirmpwd: # 判斷pwd和confirmpwd一致
      new_pwd = md5_create.md5_test(pwd) # 加密后的密碼
      insert_sql = 'insert into lhldemo(username,password) values("%s", "%s") ;' % (username, new_pwd)
      opMysql.op_insert(insert_sql)
      return jsonify({"code": 200, "msg": "注冊成功"})
     else:
      return jsonify({"code":998, "msg":"密碼不一樣"})
   else:
    return jsonify({"code": 504, "msg": "必填項(xiàng)不能為空"})
  else:
   return jsonify({"code": 201, "msg": "請求方式不正確"})
 
 if __name__ == '__main__':
  #port可以指定端口,默認(rèn)端口是5000
  #host寫成0.0.0.0的話,其他人可以訪問,代表監(jiān)聽多塊網(wǎng)卡上面,默認(rèn)是127.0.0.1
  server.run(debug=True, port=8899, host='0.0.0.0')
post訪問接口:

項(xiàng)目啟動后,接口的地址是:http://127.0.0.1:5000/,默認(rèn)端口是5000。

打開瀏覽器,輸入urlhttp://127.0.0.1:5000/xxx,后面跟上接口的地址register,參數(shù)使用postman或jmeter進(jìn)行請求,參數(shù)類型是json。請求成功,則返回{'code': 200, 'message': '登錄成功'}。

請求方式-get、post都可以訪問,寫法如下:

 import flask
 from flask import jsonify
 from flask import request
 from conf import opMysql
 from conf import md5_create
 '''
 注冊接口:
 post請求,請求參數(shù)入?yún)㈩愋蚸son
 {
  "username":"aaa",
  "pwd":"123456",
  "c_pwd":"123456"
 }
 '''
 server = flask.Flask(__name__)
 @server.route('/register', methods=['get', 'post'])
 def registerPost():
  #post請求獲取請求的參數(shù),返回結(jié)果類型是str
  username = request.values.get('username')
  pwd = request.values.get('pwd')
  confirmpwd = request.values.get('confirmpwd')
  if username and pwd and confirmpwd: # 判斷輸入的用戶名、密碼、確認(rèn)密碼都不為空
   select_sql = 'select username from lhldemo where username = "%s" ;'%username
   # 查詢注冊的用戶是否存在數(shù)據(jù)庫,如果存在,則username不為空,否則username為空
   res_mysql = opMysql.op_select(select_sql)
   if res_mysql:
    return jsonify({"code": 999, "mesg": "用戶已注冊"})
   else:
    if pwd == confirmpwd: # 判斷pwd和confirmpwd一致
     new_pwd = md5_create.md5_test(pwd) # 加密后的密碼
     insert_sql = 'insert into lhldemo(username,password) values("%s", "%s") ;' % (username, new_pwd)
     opMysql.op_insert(insert_sql)
     return jsonify({"code": 200, "msg": "注冊成功"})
    else:
     return jsonify({"code": 998, "msg": "密碼不一樣"})
  else:
   return jsonify({"code": 504, "msg": "必填項(xiàng)不能為空"})
 
 
 if __name__ == '__main__':
  #port可以指定端口,默認(rèn)端口是5000
  #host默認(rèn)是127.0.0.1,寫成0.0.0.0的話,其他人可以訪問,代表監(jiān)聽多塊網(wǎng)卡上面,
  server.run(debug=True, port=8899, host='0.0.0.0')
可以通過以下2種方式進(jìn)行post請求,一種如下:

通過url拼接參數(shù):

第二種訪問方式:通過key-value方式進(jìn)行訪問:

 redis相關(guān)操作,添加hash類型的值到redis內(nèi),接口實(shí)現(xiàn)如下:

 import flask
 from flask import jsonify
 from conf import opRedis
 from flask import request
 '''
 redis添加數(shù)據(jù),存入數(shù)據(jù)的類型是hash類型,格式如下:
 post請求,請求參數(shù)入?yún)㈩愋蚸son
 {name:{"key":"value"}}
 {"username":"url"}
 '''
 server = flask.Flask(__name__)
 @server.route('/set_sties', methods =['post'])
 def set_sties():
  # 獲取url請求參數(shù),返回結(jié)果是字典{"username":"byz","url":"http://www.baidu.com"}
  res_dic = request.json
  if res_dic.get('username') and res_dic.get('url'):
   username = res_dic.get('username')
   url = res_dic.get('url')
   #調(diào)用redis的hset方法,將username、url存入redis
   opRedis.get_hashall('sites', username, url)
   return jsonify({"code":20})
  else:
   return jsonify({"code": 204, "msg": "必填項(xiàng)不能為空"})
 
 if __name__ == '__main__':
  #port可以指定端口,默認(rèn)端口是5000
  #host默認(rèn)是127.0.0.1,寫成0.0.0.0的話,其他人可以訪問,代表監(jiān)聽多塊網(wǎng)卡上面,
  server.run(debug=True, port=8899, host='0.0.0.0')
hash類型結(jié)構(gòu)如下:

{name:{key,value}},接口訪問成功后,redis內(nèi)數(shù)據(jù)存儲結(jié)構(gòu)如下:

redis添加完數(shù)據(jù)后,讀取redis內(nèi)的數(shù)據(jù),接口實(shí)現(xiàn)如下:

 import flask
 from flask import jsonify
 from conf import opRedis
 from flask import request
 '''
 讀取redis內(nèi)的數(shù)據(jù),redis數(shù)據(jù)存儲類型是hash類型,格式如下
 {name:{"key":"value"}}
 思路: 1.通過redis的hgetall(name)方法讀取redis所有數(shù)據(jù),返回結(jié)果類型是字典
  2. 循環(huán)字典內(nèi)容,將元素類型轉(zhuǎn)換為str,并將結(jié)果存放到字典內(nèi)
 '''
 server = flask.Flask(__name__)
 @server.route('/get_sties', methods =['get', 'post'])
 def get_sties():
  #獲取redis內(nèi)所有的數(shù)據(jù)信息,返回結(jié)果類型是字典,里面元素是bytes類型,name=sites
  dic = opRedis.get_hashall('sites')
  redisList = []
  for key, value in dic.items():
   redis_dic = {}
   #將字典內(nèi)元素的類型由bytes轉(zhuǎn)換為str
   k = key.decode()
   v = value.decode()
   #字典redis_dic內(nèi)結(jié)構(gòu){"username:k, "url":v}
   redis_dic['username'] = k
   redis_dic['url'] = v
   redisList.append(redis_dic)
  return jsonify({"code": 200, "msg": redisList})
 
 if __name__ == '__main__':
  #port可以指定端口,默認(rèn)端口是5000
  #host默認(rèn)是127.0.0.1,寫成0.0.0.0的話,其他人可以訪問,代表監(jiān)聽多塊網(wǎng)卡上面,
  server.run(debug=True, port=8899, host='0.0.0.0')
通過postman方法接口,返回?cái)?shù)據(jù)如下:

 查詢用戶,需要傳token值,實(shí)現(xiàn)方法如下:

登錄接口:

 import flask
 from flask import jsonify
 from conf import opRedis
 from conf import opMysql
 from conf import md5_create
 from flask import request
 import time
 '''
 登錄接口,需要傳用戶名、密碼,通過查詢數(shù)據(jù)庫判斷用戶是否登錄成功,若登錄成功則將用戶名和token存入redis內(nèi)
 '''
 server = flask.Flask(__name__)
 @server.route('/login', methods=['get','post'])
 def set_cookies():
  name = request.values.get('username')
  pwd = request.values.get('pwd')
  if name and pwd:
   #加密后的密碼
   new_pwd = md5_create.md5_test(pwd)
   sql = 'select username,password from lhldemo where username="%s" and password="%s" ; ' % (name, new_pwd)
   res_sql = opMysql.op_select(sql)
   if res_sql:
    token = name + time.strftime('%Y%m%d%H%M%S')
    new_token = md5_create.md5_test(token)
    #用戶登錄成功后,將name和token存入redis,存入數(shù)據(jù)類型是hash類型
    opRedis.get_hashall('user', name, new_token)
    return jsonify({"code": 200})
   else:
    return jsonify({"code": 204})
  else:
   return jsonify({"code": 304})

 查詢用戶,需要傳用戶名和token值,實(shí)現(xiàn)方法如下:

 import flask
 from flask import jsonify
 from conf import opRedis
 from conf import opMysql
 from conf import md5_create
 from flask import request
 import time
 '''
 登錄接口,需要傳用戶名、密碼,通過查詢數(shù)據(jù)庫判斷用戶是否登錄成功,若登錄成功則將用戶名和token存入redis內(nèi)
 '''
 server = flask.Flask(__name__)
 @server.route('/search_user', methods=['get','post'])
 def set_cookies():
  name = request.values.get('username')
  token = request.values.get('token')
  print('token',token)
  if name and token:
   #查看數(shù)據(jù)庫,看查詢的用戶是否存在,若存在則返回用戶id
   sql = 'select id from lhldemo where username="%s" ; ' % (name)
   res_sql = opMysql.op_select(sql)
   if res_sql:
    #從redis中獲取user下的用戶名對應(yīng)的token值
    res_token = opRedis.getRedis('user:'+name)26    if res_token == token:
     return jsonify({"msg": "用戶id", "id": res_sql})
    else:
     return jsonify({"msg": "token錯誤"})
   else:
    return jsonify({"code": "用戶不存在"})
  else:
   return jsonify({"code": "必填項(xiàng)不能為空"})
 
 if __name__ == '__main__':
  #port可以指定端口,默認(rèn)端口是5000
  #host默認(rèn)是127.0.0.1,寫成0.0.0.0的話,其他人可以訪問,代表監(jiān)聽多塊網(wǎng)卡上面,
  server.run(debug=True, port=8899, host='0.0.0.0')
 以上就是工作中常用的一些接口場景,測試支付相關(guān)接口、或者第三方接口時(shí),可以自己mock接口返回假數(shù)據(jù)操作~~~~

 

相關(guān)文章

  • Python的gevent框架的入門教程

    Python的gevent框架的入門教程

    這篇文章主要介紹了Python的gevent框架的入門教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • PYQT5 實(shí)現(xiàn)給listwidget的滾動條添加滾動信號

    PYQT5 實(shí)現(xiàn)給listwidget的滾動條添加滾動信號

    這篇文章主要介紹了PYQT5 實(shí)現(xiàn)給listwidget的滾動條添加滾動信號,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例

    Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了Django使用redis緩存服務(wù)器的實(shí)現(xiàn)代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Python利用wxPython實(shí)現(xiàn)ocr識別圖片漢字程序

    Python利用wxPython實(shí)現(xiàn)ocr識別圖片漢字程序

    在這篇博客中,我們將介紹一個(gè)如何使用wxPython構(gòu)建的簡單OCR識別圖片漢字應(yīng)用程序,文章的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • Java分治歸并排序算法實(shí)例詳解

    Java分治歸并排序算法實(shí)例詳解

    這篇文章主要介紹了Java分治歸并排序算法,結(jié)合實(shí)例形式詳細(xì)分析了分治歸并排序算法的原理及java實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • python實(shí)現(xiàn)QQ批量登錄功能

    python實(shí)現(xiàn)QQ批量登錄功能

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)QQ批量登錄功能,以及python3.6批量登陸QQ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 用Python的線程來解決生產(chǎn)者消費(fèi)問題的示例

    用Python的線程來解決生產(chǎn)者消費(fèi)問題的示例

    這篇文章主要介紹了用Python的線程來解決生產(chǎn)者消費(fèi)問題的示例,包括對使用線程中容易出現(xiàn)的一些問題給出了相關(guān)解答,需要的朋友可以參考下
    2015-04-04
  • Python實(shí)現(xiàn)單向鏈表

    Python實(shí)現(xiàn)單向鏈表

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)單向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條

    python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條

    這篇文章主要介紹了python如何通過pyqt5實(shí)現(xiàn)進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Django項(xiàng)目如何給數(shù)據(jù)庫添加約束

    Django項(xiàng)目如何給數(shù)據(jù)庫添加約束

    這篇文章主要介紹了Django項(xiàng)目如何給數(shù)據(jù)庫添加約束,幫助大家更好的理解和學(xué)習(xí)使用Django框架,感興趣的朋友可以了解下
    2021-04-04

最新評論