python-web:
ocr.html中有这么一段代码
点击submit类型的“上传”,会触发该表单的method,浏览器会向flask服务器发送post请求。
HTTP协议:
HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
GET:向特定的资源发出请求
POST:客户端向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体request中。url也在
PS:在这里我发现了很有意思的事,{# 只有默认跳转的行为才能返回刷新整个界面。如表单提交以及链接 #},而当初次的页面节点形成,便无法更改,而数值内容可以,ajax局部刷新,数据回传填充方可。
from flask import Flask, jsonify, flash, Response
from flask import make_response
from flask import request, render_template
from flask_bootstrap import Bootstrap
from flask import redirect, url_for
from flask import send_from_directory
from werkzeug.utils import secure_filename
app = Flask(__name__)
bootstrap = Bootstrap(app)
@app.route('/', methods=['GET', 'POST']) #route()装饰器把一个函数绑定到对应的URL上 '/'同app指定,在该url下发生相应请求该方法才有效
def ocr_upload_file():
if request.method == 'POST':
if 'file' not in request.files: # check if the post request has the file part
flash('No file part')
return redirect(request.url) #back to client's url of request PS:redirect函数把用户重定向到其它地方
file = request.files['file']
if file.filename == '': # submit a empty part without filename due to do not select file
flash('No selected file')
return redirect(request.url)
filename = file.filename
if file and allowed_file(filename):
if is_video(filename):
....
else:
filename = secure_filename(filename) #服务器存储文件名同客户端上传的
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) #存储至flask服务器文件系统上(即本地)
return redirect(url_for('predict_ocr_image', filename=filename))
#url_for()来给指定的函数构造URL。它接受函数名作为第一个参数,也接受对应URL规则的变量部分的命名参数如'/image_ocr/<filename>'
return render_template("ocr.html") #会在templates文件夹里寻找模板
在 HTML 表单中设置enctype=multipart/form-data,要不客户端不发数据给flask服务器,何谈保存
@app.route('/image_ocr/<filename>')
def predict_ocr_image(filename):
img_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
save_path = os.path.join(app.config['IMAGE_FOLDER'], filename)
image = detection(img_path, ocr_detection_model, ocr_recognition_model, ocr_label_dict)
cv2.imwrite(save_path, image)
return send_from_directory(app.config['IMAGE_FOLDER'],filename) #将生成的结果发送给浏览器
@app.errorhandler(404) #状态码404,请求的资源(网页等)不存在
def not_found(error):
return make_response(jsonify({'error': 'Not found'}), 404)#make_response 响应返回内容 jsonify函数处理返回序列化json数据
#make_response 响应返回页面 make_response (render_template(“ocr.html”))
if __name__ == '__main__':
app.run(debug=True) #默认url是127.0.0.1:5000