初遇Flask

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空•物语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值