记录如下:
#pip install ddddocr
#pip install flask
import flask
from flask import request,make_response,jsonify
import json
import ddddocr #智能识图框架-识图效率较差,但是不用安装其他东西
import logging #日志框架
#flask:一个web框架,通过flask提供的装饰器@server.route()将普通函数转为服务
# 创建一个服务。 将当前文件注册为服务
server = flask.Flask(__name__)
# 配置日志
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
server.logger.addHandler(handler)
server.logger.setLevel(logging.INFO)
@server.route('/get_login_image',methods=['post'])
@server.before_request
def get_login_image():
#request.method, request.path, request.headers,
#server.logger.info('Request: %s', request)
#解析图片验证码
requestdata = request.get_data(as_text=True)
server.logger.info('Request imagepath: %s',requestdata)
#force=True,非标准的json强制转化为json-如果可以转,当传参路径是“\”时解析也会失败,应该是转义导致的,转为/后解析成功
data1 = request.get_json(force=True,).get('imagepath')
server.logger.info('Request result: %s',data1)
#path = "D:\pythonfile\image\logimage1.jpeg"
path = data1.replace('/','\\')
server.logger.info('Request path: %s',path)
if path :
ocr = ddddocr.DdddOcr(show_ad=False)
with open(path, 'rb') as f:
img_data = f.read()
ret = ocr.classification(img_data)
result = {'message': '请求成功!','code':str(ret)}
return json.dumps(result, ensure_ascii=False)
else:
return '参数不能为空!'
# 在route()方法中定义服务路径、请求方法
@server.route('/login_get', methods=['get'])
def log_get():
# get请求时,获取参数的方法
username = request.values.get('u') # 获取参数的值
password = request.values.get('p')
if username and password:
if username == 'zzz' and password == '1234':
result = {'code': 200, 'message': '请求成功!'} # 类型为字典dict
# 将字典转化为json格式。注意是json.dumps,不是json.dump
return json.dumps(result, ensure_ascii=False)
else:
result = {'code': 400, 'message': '请求失败!'}
return json.dumps(result, ensure_ascii=False)
else:
return '参数不能为空!'
@server.route('/login_post', methods=['post'])
def login_post():
# post请求时,获取参数的方法
username = flask.request.json.get('u') # 获取参数的值
password =flask.request.json.get('p')
# 多层级json时,获取参数的方法
key = flask.request.json.get('accesskey1').get('accesskey3').get('accesskey4')
if username and password:
if username == 'zzz' and password == '1234':
result = {'code': 200, 'message': '请求成功!'}
return json.dumps(result, ensure_ascii=False)
else:
result = {'code': 400, 'message': '请求失败!'}
return json.dumps(result, ensure_ascii=False)
else:
return '参数不能为空!'
@server.route('/login_response', methods=['get'])
#使用make_response设置响应状态,响应头和响应消息
def login_response():
response = make_response('make_res测试')
response.headers['id'] = 'who'
response.status = '404 not found'
return response
#('响应消息','响应状态','{headers}')
# return ('hello', 200, {'id': 'who are you'})
@server.route('/')
#使用jsonify设置响应头和响应消息
def login_jsonify():
response = jsonify({'message': 'Hello, world!'})
response.headers['content-type'] = 'application/json'
return response
if __name__ == '__main__':
#配置远程访问服务器,需要在run中如示例指定host和port,不考虑防火墙的情况下即可访问,访问地址在运行时,会在服务台打印出来
server.run(host="0.0.0.0",port=5000) # 运行服务