Flash是python下的一个轻量级web服务框架,通过Flash可以快速的搭建api服务器和各位网站,在深度学习中Flash用的最多的就是模型的部署。配合上一些c++ dll库的调用,比如这个库(python通过导入自定义dll实现显存释放_万里鹏程转瞬至的博客-CSDN博客)可以实现python下的显存释放,在工程上堪称完美。

博主在这里简单分析Flash建站的使用经验,如url绑定、get参数获取、上传文件、下载文件等等的实现。

Flask的安装:pip install Flask

1、基本使用

以下代码实现了flask的基本使用,app既为flask的运行对象,python函数通过@app.route('url')实现url与函数的绑定,一个python函数可以绑定多个url。函数return的值,既为浏览器客户端页面的显示结果。

from flask import Flask, render_template, request
from flask import jsonify, session, make_response, request,send_file
from werkzeug.utils import secure_filenameimport osapp = Flask(__name__)@app.route('/')
@app.route('/index')
@app.route('/index.html')
def index():return request.host+"<br/>"+ request.url+"   <br/>hello world"if __name__ == '__main__':#host=0.0.0.0 表示支持该服务器的所有ip地址#port指端口#debug=True指输出调试信息app.run(host="0.0.0.0",debug=True,port=14000)

2、html模板(template)的使用

使用template返回html内容可以大量简化服务器代码,做到mvc的分离(模型m、视图v、控制器c)。这里模型是指数据库模型、视图指html页面、控制器指后端具体的功能代码。flask可以将一些python变量传递给模板,然后在html中动态生成内容。具体如下所示

@app.route('/get_template_html')
def template():kwargs = {"files": ["dir1", "dir2", "file1.txt", "file2.jpg"]}return render_template('hello.html',**kwargs)

这里的模板的文件名为hello.html,模板文件必须存储到./templates目录下。可以看到的是,模板文件是支持变量的遍历、判断,还支持一些过滤器来获取变量的属性(比如:长度、first、last、join等等操作),更多模板的语法可以参考flask 模板语法__missTu_的博客-CSDN博客_flask模板语法

<html>
<head><title>File Upload</title>
</head>
<body>控制结构 {{ '{%  %}'  }}<br/>变量取值 {{ '{{  }}' }}支持list、dict、tuple和基本python变量类型<br/>注释 {{ '{#  #}'  }}<br/>'变量file的长度为:'{{files|length}},这是通过过滤器获取的。更多过滤器函数可以参考https://blog.csdn.net/weixin_29370077/article/details/112575271{% for file in files %}  {% if loop.index0<=1 %}<li>dir: <a href="{{file + '\\'}}">{{file+ '\\'}}</a></li>{% else %}<li>file: <a href="{{file}}">{{file}}</a></li>{% endif %}{% endfor %}<br/><br/>这是一个上传文件的界面<form action="/uploader" method="POST" enctype="multipart/form-data"><input type="file" name="file"  /><input type="submit" value="提交" /></form>下载图片:<a href="/webhdfs/v1?filename=0007A.jpg">download</a>下载图片:<a href="/downfile?filename=0007A.jpg">downfile</a>
</body>
</html>

在浏览器打开的效果为

3、cookie的设置与获取

cookie的设置代码很简单,只有response.set_cookie('Name','Hyman')  一行。但是cookie是与服务器http相应所绑定的元信息,设置cookie前需要获取response。在这里博主通过make_response('Hello World')获取response,make_response可以将模板或str包装成response用于返回给浏览器。前面直接用return输出信息到浏览器,其实在后端也是通过了make_response的包装。在获取到response对象后,我们还可以设置其他信息,比如headers。

@app.route('/set_cookie')
def set_cookie():  #temp = render_template('hello.html')#response = make_response(temp)response=make_response('Hello World');  response.headers['X-Parachutes'] = 'parachutes are cool'response.set_cookie('Name','Hyman')  #name=request.cookies.get('Name')return response

获取cookie的代码为request.cookies.get('Name')

4、session的设置与获取

使用session需要注意的是,要设置app.secret_key,同时要设置session的有效期。具体如下列代码所示。app.secret_key可以是任意字符串。

#使用session时需要设置secret_key
app.secret_key = "affedasafafqwe"
@app.route("/setAgetSession")
def setAgetSession():name = request.args.get("name")session['name'] = name  # 设置“字典”键值对session.permanent = True  # 设置session的有效时间,长期有效,一个月的时间有效,return "now session name: "+session['name']

5、上传文件

这里用到了请求方法(GET、POST方式)判断,因为在很多的站点上传文件的页面和后端接口都是同一个url,通过请求方式的不同判断具体情况。GET请求对应着上传页面,POST请求对应着上传文件。上传图片前,请先创建upload目录

app.config['UPLOAD_FOLDER'] = 'upload/'
#请求方式判断request.method
@app.route('/uploader',methods=['GET','POST'])
def uploader():if request.method == 'POST':f = request.files['file']#跟表单里file中的name要一样f.save(os.path.join(app.config['UPLOAD_FOLDER'], secure_filename(f.filename)))return 'file uploaded successfully'else:return render_template('hello.html')

在表单页面中,post请求是要单独设置的,否则默认是get方式

    这是一个上传文件的界面<form action="/uploader" method="POST" enctype="multipart/form-data"><input type="file" name="file"  /><input type="submit" value="提交" /></form>

6、下载文件

下载文件只有一种方式,但是在请求url上有两种格式。

格式一:直接通过目录的方式下载文件,示例url:http://localhost:14000/down/static/image/head.tif

@app.route("/down/<path:sub_dir1>/<path:sub_dir2>/<filename>", methods=['GET', 'POST'])
def down(sub_dir1, sub_dir2, filename):file_path = os.path.join(os.getcwd()+ "\\"+sub_dir1+"\\"+sub_dir2+"\\" , filename)if os.path.isfile(file_path):send_file(file_path, as_attachment=True)else:return "<br/>"+file_path+"<br/>The downloaded file does not exist"    

页面请求结果如下所示

 格式二:通过get参数传递要下载的文件名,示例url: http://localhost:14000/downfile?filename=stasdfstic-sdfsdfsfdssfs/head.tif

@app.route("/downfile")
def download_file():filename = request.args.get('filename')file_path = os.path.join(os.getcwd() , filename)if os.path.isfile(file_path):return send_file(file_path, as_attachment=True)else:return "<br/>"+file_path+"<br/>The downloaded file does not exist"

运行结果如下所示

7、获取get参数返回json

这里需要注意的是传递get格式为url?key1=value1&key2=value2.......,第一个get参数与url之间通过?连接,后面的get参数之间通过&连接。json对象不能之间返回,使用jsonify将json转换为字符串后即可。

示例url:http://localhost:14000/jsonstr?key1=aaaaaaaaaaaaaa&kery2=bbbbbbbbbbbbbbb

@app.route("/jsonstr")
def jsonstr():key1 = request.args.get('key1')key2 = request.args.get('key2')json={'key1':key1,'key2':key2}return jsonify(json)

请求结果

Flask 的完全使用教程(文件上传下载,cookie,session,template使用)相关推荐

  1. 【Flask】 结合wtforms的文件上传表单

    表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的. ...

  2. struts2教程--实现文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  3. struts2教程(8)--文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  4. spring boot基础教程之文件上传下载

    一文件上传 文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个文件上传表单页面; (4)编写controller; ( ...

  5. 文件上传/下载接口(超简单的教程来了)

    前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: multi ...

  6. centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  7. SpringBoot文件上传下载以及优化过程 -- 个人笔记

    Java IO/NIO/AIO的知识体系图 博主最开始是用IO实现文件上传下载功能,但发现效率慢,于是使用了NIO 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O ...

  8. 教你如何实现c#文件上传下载功能

    简单介绍一下c#文件上传下载功能实现. NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext {public DbContext ...

  9. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  10. SpringMVC整合fastdfs-client-java实现web文件上传下载

    为什么80%的码农都做不了架构师?>>>    版权声明:本文为博主原创文章,转载请标明出处(http://blog.csdn.net/wlwlwlwl015)Thanks. 目录( ...

最新文章

  1. 01----mockjs介绍
  2. codeforces C Deletion of Repeats(hash)
  3. xml教程之java解析xml文档
  4. iframe的子界面获取父界面的标签元素
  5. PVLAN技术应用,网络管理员的新宠
  6. c语言 系统命令,c语言如何调用系统命令
  7. 纸板怎么切割光滑_激光切割机大PK!光纤、CO2、YAG,你选谁?!
  8. 【ArcGIS微课1000例】0006:创建随机点(Create Random Points)
  9. HTML+CSS+JS实现 ❤️H5 3D传送带视差照片特效❤️
  10. Openssl verify命令
  11. MySQL快速上手[学习笔记](三)
  12. 我的世界服务器领地怎么无限大,我的世界:Minecraft都市传说,MC无限大?让我们一起寻找边界吧...
  13. java pdfreader 用法_使用 iText 进行 Acroform 编辑的 Pdf
  14. 全自动抠图换背景软件下载_抠图换背景app下载-抠图换背景下载v1.1.6 安卓版-西西软件下载...
  15. 免费好用的OCR文字识别软件推荐
  16. 你不是真正的快乐---纪念即将完结的青春和陪伴我的阿星和星仔和星爷
  17. dell笔记本外接显示器_笔记本连接显示器怎么设置【图文教程】
  18. 计算机网络系列笔记(六) - 物理层
  19. linux登陆mysql数据库
  20. 视频直播应用的竞争分析

热门文章

  1. 基于Transformer实现更精准的脑出血多标签分类
  2. 11月25日科技资讯|网易回应裁撤生病员工:确实存在简单粗暴不近人情行为
  3. ios iPlayer sdk (V1.1) 正式发布了。
  4. 电信免费手机卡iFree黄金版使用须知(一)
  5. spring @Qualifier注解
  6. html中word-wrap无效,你未必知道的CSS小知识:word-wrap和overflow-wrap是等效的
  7. MySQL之text字段
  8. 【KMP】572: Boyer–Moore–Horspool algorithm
  9. SpringBoot 自动生成API文档
  10. open报错文件不存在