> 백엔드 개발 > 파이썬 튜토리얼 > 파이썬은 인터페이스를 어떻게 구현합니까?

파이썬은 인터페이스를 어떻게 구현합니까?

零下一度
풀어 주다: 2017-07-09 11:59:42
원래의
1436명이 탐색했습니다.

인터페이스는 일부 메소드만 정의할 뿐 구현하지 않습니다. 주로 프로그램 설계에 사용됩니다. 필요한 기능만 설계하고 이러한 기능을 다른 클래스(B)에서 상속해야 합니다. B 클래스에 의해 전달되어 함수 중 하나 또는 모두를 구현합니다.

인터페이스에 대한 기본 지식:

인터페이스 테스트에 대해 간략하게 이야기해 보겠습니다. 일반적으로 사용되는 두 가지 인터페이스는 http api와 rpc 프로토콜 인터페이스입니다. 오늘 우리는 http api 인터페이스는 http 프로토콜을 통해 경로를 통해 호출을 구별하는 방법입니다. 요청 보고서 텍스트 형식은 모두 키-값 형식이며 반환된 메시지는 일반적으로

인터페이스 프로토콜: http, webservice, rpc 등입니다.

요청 방법: get, post 방법

요청 매개변수형식:

 a. Get 요청은 모두 url?param=xxx¶m1=xxx

 b를 통해 이루어집니다. , application/x-www-form-urlencoded, multipart/form-data, text/html 등

또한 인터페이스의 URL, 매개변수 유형, 반환된 결과의 데이터 형식, 인터페이스에 헤더, 쿠키 및 기타 정보가 있는지 여부도 알아야 합니다.

인터페이스 구현: 요청 방법 - 가져오기, 인터페이스 작성:


 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을 직접 사용하시겠습니까? 연결됨, 각 요청 매개변수는 &를 사용하여 직접 연결됩니다. 요청이 성공하면 {'code': 200, 'message': 'Login 성공적인'}이 반환됩니다.

요청 방식 - 포스트, 인터페이스 작성 :


 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')
로그인 후 복사

포스트 접속 인터페이스 :

프로젝트 시작 후 인터페이스 주소는 http://127.0.0.1:5000/ 이고, 기본 포트는 5000 입니다. .

브라우저를 열고 URL http://127.0.0.1:5000/xxx를 입력한 다음 인터페이스 레지스터의 주소를 입력하고 postman 또는 jmeter를 사용하여 매개변수를 요청하며 매개변수 유형은 json입니다. 요청이 성공하면 {'code': 200, 'message': 'Login 성공적인'}이 반환됩니다.

요청 방법 - 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')
로그인 후 복사

다음 두 가지 방법으로 게시물을 요청할 수 있으며, 그 중 하나는 다음과 같습니다.

URL을 통한 매개변수 연결:

두 번째 접근 방법: 키-값 방식을 통한 접근:

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')
로그인 후 복사

위는 일반적으로 사용되는 몇 가지 인터페이스 시나리오입니다. 업무에 사용되는 결제 관련 인터페이스나 타사 인터페이스를 테스트할 때 인터페이스를 모의하여 가짜 데이터 연산을 반환할 수 있습니다~~~~

위 내용은 파이썬은 인터페이스를 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿