亭亭玉立,两袖清风。花拳绣腿,一事无成。|

菜鸟侦探乐

园龄:4年3个月粉丝:2关注:2

2022-03-07 22:41阅读: 134评论: 0推荐: 0

Flask框架使用

之前的小程序做着做着,发现只有前端是不够的,还需要写一些后端代码。但是仔细一想,我好像连php都不太会用!!这时我了解到了Flask,Flask是使用本宝宝最喜欢的Python语言编写的WEB应用框架,刚好可以和yolov5模型进行很好的衔接。同时Flask相比起Django而言比较轻量,关键名字也比较顺口,因此最后选择了Flask作为后端开发的框架进行简单了解,记录下简陋到只剩一条裤头的Flask基本用法。

Flask路由(route)及变量规则

使用 route() 装饰器来把函数绑定到 URL:

from flask import Flask # 导入Flask类
app = Flask(__name__) # 实例化一个Flask对象
@app.route('/user/<int:id>', methods=['GET', 'POST']) # 设置路由
'''常用的转换器:int(正整数)、float(正浮点数)string(不带斜杠的字符串)、path(包含斜杠的文本)、自定义转换器'''
def hello_world(id):
if id == 1:
return '小红'
if id == 2:
return '小明'
if id == 3:
return '大壮'
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True) #启用调试

渲染模板(render_template)

“在 Python 内部生成 HTML 不好玩,且相当笨拙。因为你必须自己负责 HTML 转义, 以确保应用的安全。因此, Flask 自动为你配置 Jinja2 模板引擎。”

from flask import Flask, render_template
app = Flask(__name__)
@app.route('/form', methods=['GET','POST'])
def hello():
return render_template('form.html', data=data) # 将data传给前端HTML页面
if __name__ == '__main__':
app.run(debug=True)

request对象

from flask import request # 导入request类

request.method # 请求类型

request.form.get(<name>) # 获取表单数据

重定向

from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/index', methods=['GET','POST'])
def index():
return redirect(url_for('hello')) # 重定向到hello()函数的url
@app.route('/')
def hello():
return 'hello world!'
if __name__ == '__main__':
app.run(debug=True)

返回json数据给前端

from flask import Flask, make_response, json, jsonify
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/index')
def index():
data = {
'name' : '张三'
}
# response = make_response(json.dumps(data, ensure_ascii=False))
# response.mimetype = 'application/json'
# return response
return jsonify(data)
app.run(debug=True)

异常处理

  • raise:主动抛出异常

  • abort:在网页当中抛出异常

from flask import Flask, render_template, request, abort
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
@app.route('/index', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('form.html')
if request.method == 'POST':
name = request.form.get('name')
password = request.form.get('passwd')
if name == 'admin' and password == '123':
return '登陆成功'
else:
abort(404)
return None
# 自定义错误处理方法
@app.errorhandler(404)
def handle_404_error(err):
return '出现了404错误,错误信息是:%s' % err
app.run(debug=True)

过滤器

过滤器的本质就是函数

{{variable | filter_name(*args)}} //使用方式:变量名|过滤器(支持链式调用);常用过滤器:略
app.add_template_filter(<自定义函数名>,<'过滤器名'>) # 自定义过滤器

Flask表单

暂时没有使用的必要。


接收文件

接收前端传来的POST请求并返回图片的base64编码值,对我的小程序而言有这个基本就够了。

import base64
from flask import request
from flask import Flask
import os
app = Flask(__name__)
# 定义路由
@app.route("/photo", methods=['POST'])
def get_frame():
# 接收图片
upload_file = request.files['file']
# 获取图片名
file_name = upload_file.filename
# 文件保存目录(桌面)
file_path = r'C:\Users\10514\Desktop\archive\img_temp'
if upload_file:
# 地址拼接
file_paths = os.path.join(file_path, file_name)
# 保存接收的图片到桌面
upload_file.save(file_paths)
# 随便打开一张其他图片作为结果返回,
with open(r'C:\Users\10514\Desktop\archive\knife\train\knife_0.jpg', 'rb') as f:
res = base64.b64encode(f.read())
return res
if __name__ == "__main__":
app.run()

解决无法访问问题

app.run()默认的host参数值为本机ip——'127.0.0.1',此时只能通过本机地址进行访问,无论从内网还是外网都不能进行访问。

此时修改host参数为默认ip——'0.0.0.0':

app.run(debug=True, port=80, host='0.0.0.0')

这样运行时会自动匹配到本机的局域网ip地址,可以通过该地址进行访问。

本文作者:菜鸟侦探乐

本文链接:https://www.cnblogs.com/zouludaxia/p/15978496.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   菜鸟侦探乐  阅读(134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起