ホームページ >バックエンド開発 >Python チュートリアル >Python はどのようにインターフェースを実装するのでしょうか?
インターフェースはいくつかのメソッドを定義するだけで、実装はしません。主にプログラム設計で使用されます。必要な関数を設計するだけで、これらの関数は別のクラス (B) に継承する必要があります。 1 つまたはすべての関数を実装するためにクラス B によって渡されます。
インターフェイスの基本知識:
インターフェイスのテストについて簡単に説明します。一般的に使用される 2 つのインターフェイスは、http API と RPC プロトコル インターフェイスです。今日は主に次のことについて説明します。 http API インターフェイスは、http プロトコルを介したパスを介した呼び出しを区別する方法です。レポートのリクエスト テキスト形式はすべてキーと値の形式であり、返されるメッセージは通常、
インターフェイス プロトコル: http、webservice、rpc などです。
リクエストメソッド:get、postメソッド
リクエストパラメータ形式:
a. getリクエストはすべてurl?param=xxx¶m1=xxx
b. postリクエストのリクエストパラメータの一般的なタイプは次のとおりです。 、application/x-www-form-urlencoded、multipart/form-data、text/html など。
また、インターフェイスの URL、パラメーターの種類、返された結果のデータ形式、インターフェイスにヘッダー、Cookie、その他の情報があるかどうかも知っておく必要があります。
インターフェイスの実装: リクエストメソッド - get、インターフェイスの作成:
import flask from flask import request from flask import jsonify import tools import OP_db import settings ''' flask: web框架,可以通过flask提供的装饰器@server.route()将普通函数转换为服务 登录接口,需要传url、username、passwd ''' #创建一个服务,把当前这个python文件当做一个服务 server = flask.Flask(name) #server.config['JSON_AS_ASCII'] = False # @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式 @server.route('/login', methods=['get']) def login(): # 获取通过url请求传参的数据 username = request.values.get('name') # 获取url请求传的密码,明文 pwd = request.values.get('pwd') # 判断用户名、密码都不为空,如果不传用户名、密码则username和pwd为None if username and pwd: # 获取加密后的密码 password = tools.md5_pwd(pwd) #执行sql,如果查询的username和password不为空,说明数据库存在admin的账号 sql = 'select name,password from test where name= "%s" and password= "%s";' %(username, password) # 从数据查询结果后,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的结果不为空,说明找到了username=admin的用户,且password为加密前的123456 resu = {'code': 200, 'message': '登录成功'} return jsonify(resu) #将字典转换为json串, json是字符串 else: resu = {'code': -1, 'message': '账号/密码错误'} return jsonify(resu) else: res = {'code': 999, 'message': '必填参数未填写'} return jsonify(res) if name == 'main': server.run(debug=True, port=8888, host=0.0.0.0) #指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问
md5暗号化、データベースmysql操作の詳細は、私の他のブログを参照してください~~~~~
アクセスインターフェイスの取得:
プロジェクト後が開始され、インターフェイス アドレスは http://127.0.0.1:5000/、デフォルト ポートは 5000 です。
ブラウザを開き、URL http://127.0.0.1:5000/xxx?name=xxx&pwd=123456 を入力し、続いてインターフェイス アドレス ログインを入力します。パラメーターと URL を直接使用しますか? Connected では、各リクエスト パラメータが & を使用して直接接続されます。リクエストが成功すると、{'code': 200, 'message': 'Login success'} が返されます。
リクエストメソッド - post、インターフェース書き込み:
import flask from flask import jsonify from flask import request from conf import opMysql from conf import md5_create ''' 注册接口: post请求,请求参数入参类型json { "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': # 获取请求参数是json格式,返回结果是字典 params = request.json username = params.get('username') pwd = params.get('pwd') confirmpwd = params.get('confirmpwd') if username and pwd and confirmpwd: # 判断输入的用户名、密码、确认密码都不为空 select_sql = 'select username from lhldemo where username = "%s" ;'%username # 查询注册的用户是否存在数据库,如果存在,则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": "必填项不能为空"}) else: return jsonify({"code": 201, "msg": "请求方式不正确"}) if name == 'main': #port可以指定端口,默认端口是5000 #host写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面,默认是127.0.0.1 server.run(debug=True, port=8899, host='0.0.0.0')
post アクセスインターフェース:
プロジェクト開始後のインターフェースアドレスは http://127.0.0.1:5000/、デフォルトポートは 5000 です。 。
ブラウザを開き、URL http://127.0.0.1:5000/xxx を入力し、その後にインターフェイス レジスタのアドレスを入力します。postman または jmeter を使用してパラメータをリクエストします。パラメータのタイプは json です。リクエストが成功すると、{'code': 200, 'message': 'Login success'} が返されます。
リクエストメソッド - get と post の両方にアクセスできます。記述は次のとおりです:
import flask from flask import jsonify from flask import request from conf import opMysql from conf import md5_create ''' 注册接口: post请求,请求参数入参类型json { "username":"aaa", "pwd":"123456", "c_pwd":"123456" } ''' server = flask.Flask(name) @server.route('/register', methods=['get', 'post']) def registerPost(): #post请求获取请求的参数,返回结果类型是str username = request.values.get('username') pwd = request.values.get('pwd') confirmpwd = request.values.get('confirmpwd') if username and pwd and confirmpwd: # 判断输入的用户名、密码、确认密码都不为空 select_sql = 'select username from lhldemo where username = "%s" ;'%username # 查询注册的用户是否存在数据库,如果存在,则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": "必填项不能为空"}) if name == 'main': #port可以指定端口,默认端口是5000 #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面, server.run(debug=True, port=8899, host='0.0.0.0')
投稿リクエストは次の 2 つの方法で行うことができます。1 つは次のとおりです:
URL を介してパラメータを結合します:
2 番目のアクセス方法: キー値メソッドによるアクセス:
redis 関連の操作、redis にハッシュ型の値を追加します。インターフェイスの実装は次のとおりです:
import flask from flask import jsonify from conf import opRedis from flask import request ''' redis添加数据,存入数据的类型是hash类型,格式如下: post请求,请求参数入参类型json {name:{"key":"value"}} {"username":"url"} ''' server = flask.Flask(name) @server.route('/set_sties', methods =['post']) def set_sties(): # 获取url请求参数,返回结果是字典{"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') #调用redis的hset方法,将username、url存入redis opRedis.get_hashall('sites', username, url) return jsonify({"code":20}) else: return jsonify({"code": 204, "msg": "必填项不能为空"}) if name == 'main': #port可以指定端口,默认端口是5000 #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面, server.run(debug=True, port=8899, host='0.0.0.0')
ハッシュ型の構造は次のとおりです。次のように:
{name:{ key, value}}、インターフェイスへのアクセスが成功した後、redis のデータ ストレージ構造は次のようになります:
redis がデータを追加した後、redis でデータを読み取り、インターフェイスは次のように実装されます:
import flask from flask import jsonify from conf import opRedis from flask import request ''' 读取redis内的数据,redis数据存储类型是hash类型,格式如下 {name:{"key":"value"}} 思路: 1.通过redis的hgetall(name)方法读取redis所有数据,返回结果类型是字典 2. 循环字典内容,将元素类型转换为str,并将结果存放到字典内 ''' server = flask.Flask(name) @server.route('/get_sties', methods =['get', 'post']) def get_sties(): #获取redis内所有的数据信息,返回结果类型是字典,里面元素是bytes类型,name=sites dic = opRedis.get_hashall('sites') redisList = [] for key, value in dic.items(): redis_dic = {} #将字典内元素的类型由bytes转换为str k = key.decode() v = value.decode() #字典redis_dic内结构{"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可以指定端口,默认端口是5000 #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面, server.run(debug=True, port=8899, host='0.0.0.0')
postman メソッド インターフェイスを介して返されるデータは次のとおりです:
ユーザーにクエリを実行するには、トークン値を渡す必要があります。実装メソッドは次のとおりです。
ログインインターフェイス:
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 ''' 登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内 ''' 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,存入数据类型是hash类型 opRedis.get_hashall('user', name, new_token) return jsonify({"code": 200}) else: return jsonify({"code": 204}) else: return jsonify({"code": 304})
ユーザーをクエリするには、ユーザー名とトークン値を渡す必要があります。実装方法は次のとおりです:
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 ''' 登录接口,需要传用户名、密码,通过查询数据库判断用户是否登录成功,若登录成功则将用户名和token存入redis内 ''' 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: #查看数据库,看查询的用户是否存在,若存在则返回用户id sql = 'select id from lhldemo where username="%s" ; ' % (name) res_sql = opMysql.op_select(sql) if res_sql: #从redis中获取user下的用户名对应的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": "必填项不能为空"}) if name == 'main': #port可以指定端口,默认端口是5000 #host默认是127.0.0.1,写成0.0.0.0的话,其他人可以访问,代表监听多块网卡上面, server.run(debug=True, port=8899, host='0.0.0.0')
上記は一般的なインターフェイスのシナリオの一部です。支払い関連のインターフェイスやサードパーティのインターフェイスをテストするときに、インターフェイスをモックして偽のデータ操作を返すことができます~~~~
以上がPython はどのようにインターフェースを実装するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。