flask 上传文件,视图
记得有template
'''
导入flask类。该类的实例将会成为我们的wsgi应用
__name__是一个适用于大多数情况的快捷方式,有了这个参数,flask才能知道在那里找到模板和静态文件等东西
然后我们使用route()装饰器来告诉flask触发函数的url
函数返回需要在用户浏览器中显示的信息。默认的内容类型是html
'''
import os
'''
路由
使用route()装饰器来把函数绑定到url
'''
''''
Http方法
web应用使用不同的http方法来处理url。
缺省晴空下,一个路由只回应get请求。可以使用route()装饰器的methods参数来处理不同的http方法
'''
from flask import Flask, request, jsonify, redirect, url_for, flash, render_template
from werkzeug.utils import secure_filename
app = Flask(__name__)
# @app.route('/')
# def hello_world():
# return 'Hello, World!'
"""
给路由传参示例
有时我们需要将同一类url映射到同一个视图函数处理,比如:使用同一个视图函数来显示不同用户的个人信息
"""
# @app.route('/user/<user_id>')
# def user_info(user_id):
# return 'hello %s' % user_id
"""
路由传参的参数默认当作string处理,也可以指定参数的类型
"""
@app.route('/user/<int:user_id>')
def user_ino(user_id):
return 'hello %d' % user_id
"""
指定请求方式
在falsk中,定义一个路由,默认的请求方式为:
get/option/head
如果想添加请求方式,那可以如下指定
"""
@app.route('/demo1/',methods=['get','post'])
def demo1():
"直接从请求中取到请求方式并返回"
return request.method
'''
返回json
在使用flask写一个接口时候需要给客户端返回json数据,在falsk中可以直接使用jsonify生成一个json的响应
'''
@app.route('/demo3/')
def demo3():
json_dict = {
'id':123,
'name':'李四'
}
return jsonify(json_dict)
'''
重定向
'''
# 重定向
@app.route('/demo4/')
def demo4():
return redirect(url_for('demo3'))
'''
自定义状态码
在falsk中,可以很方便的返回自定义状态码
'''
@app.route('/demo8/')
def demo8():
return '状态码为 666', 666
'''
请求钩子
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如
在请求开始时,建立数据库链接
在请求开始时,根据需求进行权限校验
在请求结束时,指定数据的交互格式
falsk 支持如下四种请求钩子
before_first_request:在处理第一个请求前执行
before_request:在每次请求前执行,如果在某修饰的函数中返回了一个响应,视图函数建不再被调用
after_request:如果没有抛出错误,在每次请求后执行,接受一个参数:视图函数作出的响应,在此函数中可以对响应值在返回之前做最后一步修改处理,需要将参数中的响应在此参数中进行返回
teardown_request:在每次请求后执行,接受一个参数:错误信息,如果有相关错误抛出
'''
# 在第一次请求之前调用,可以在此方法内部做一些初始化操作
# @app.before_first_request
# def before_first_request():
# print("before_first_request")
#
#
# # 在每一次请求之前调用,这时候已经有请求了,可能在这个方法里面做请求的校验
# # 如果请求的校验不成功,可以直接在此方法中进行响应,直接return之后那么就不会执行视图函数
# @app.before_request
# def before_request():
#
# print("before_request")
#
#
# # 在执行完视图函数之后会调用,并且会把视图函数所生成的响应传入,可以在此方法中对响应做最后一步统一的处理
# @app.after_request
# def after_request(response):
# print("after_request")
# response.headers["Content-Type"] = "application/json"
# return response
#
#
# # 请每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息
# @app.teardown_request
# def teardown_request(e):
# print("teardown_request")
@app.route('/')
def index():
return 'index'
'''
上传文件
'''
@app.route('/upload/', methods=['POST', 'GET'])
def upload():
if request.method == 'POST':
f = request.files['file']
basepath = os.path.dirname(__file__) # 当前文件所在路径
upload_path = os.path.join(basepath, r'.\static\uploads', secure_filename(f.filename))
f.save(upload_path)
return redirect(url_for('upload'))
return render_template('up.html',name='cf')
'''
url_for
给指定的函数构造url
访问静态文件(css/javascript等),只要在你的包中或是模块的所在目录中创建一个名为stagic的文件夹,在应用中使用/stagic即可访问
'''
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0', port=9100)
flask 上传文件,视图的更多相关文章
- flask上传文件到指定路径
flask上传文件到指定路径 项目结构如下: 首先是:视图函数uload_file.py,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- fro ...
- FLask上传文件
目录 Flask上传文件 改进上传 上传进度条 一个更简便的方案 Flask上传文件 文件上传的基本原理实际上很简单,基 本上是: 一个带有 enctype=multipart/form-data 的 ...
- flask 上传文件
flask upload 近日在学习python,接触到了flask框架,刚好客户有个需求,需要在网页上传一个python 代码的zip包,然后使用docker 容器运行这个zip里面的程序,输出结果 ...
- 记一次flask上传文件返回200前端却504的问题
前言 好久没写了, 主要是太忙了, 本篇记一下今天解决的一个问题吧, 耗了我大半天的时间才解决 问题 今天在调试代码时, 发现了一个诡异的问题, 我之前写了一个接口, 作用是接收上传的文件, 因为这个 ...
- flask上传文件时request.files为空的解决办法
在做上传文件的时候遇到request.files是空 原因在于html中的表单form没有指明 enctype="multipart/form-data" <form met ...
- windows python flask上传文件出现IOError: [Errno 13] Permission denied: 'E:\\git\\test\\static\\uploads'的解决方法
在浏览器中输入时,出现IOError: [Errno 13] Permission denied: 'E:\\git\\test\\static\\uploads' http://127.0.0.1: ...
- Flask -- 请求、上传文件、Cookies
请求对象 from flask import request request.method #值为form表单提交的method 'POST'. 'GET'等 #如果值为'POST'或'PUT',则可 ...
- flask jQuery ajax 上传文件
1.html 代码 <div> <form id="uploadForm" enctype="multipart/form-data" > ...
- Ajax+Python flask实现上传文件功能
HTML: <div > <input type="file" name="FileUpload" id="FileUpload&q ...
- flask插件系列之flask_uploads上传文件
前言 flask可以实现上传文件和下载文件的基本功能,但如果想要健壮的功能,使用flask_uploads插件是十分方便的. 安装 pip install flask_uploads 基本使用 # e ...
随机推荐
- centos7安装glibc_2.28和gcc 8.2
centos7默认的gcc版本是4.8.5,无法编译高版本的glibc 2.28,需要升级到gcc 8.2版本 注:gcc高版本和glibc 2.28不兼容 ## 查看自带默认的glibc strin ...
- 在Dash中更灵活地编写回调函数
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,使用Dash开发过交互式应用的朋友,想必都不会对回调函数感到 ...
- STL unordered类容器浅谈
一个代码: #include<cstdio> #include<vector> #include<functional> #include<algorithm ...
- 如何自学 PS、PR 等软件?
学习Photoshop(PS)和Premiere Pro(PR)等软件需要一定的时间和耐心,以下是非常详细的自学指南. 第一部分:规划学习路线 1. 确定学习目标 在自学PS和PR之前,首先要明确自己 ...
- 实验1:UML与面向对象程序设计原则
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1.掌握面向对象程序设计中类与类之间的关系以及对应的UML类图: 2.理解面向对象程序设计原则. [实验任务一]:UML复习 阅读教材第一 ...
- Tensorflow2.0实战之Auto-Encoder
autoencoder可以用于数据压缩.降维,预训练神经网络,生成数据等等 Auto-Encoder架构 需要完成的工作 需要完成Encoder和Decoder的训练 例如,Mnist的一张图片大小为 ...
- Codeforces Round #426 (Div. 2) problem B
B. The Festive Evening time limit per test 1 second memory limit per test 256 megabytes input standa ...
- JXNU acm选拔赛 不安全字符串
不安全字符串 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submis ...
- Flask-SQLAlchemy常用新旧查询语法对比
https://docs.sqlalchemy.org/en/20/tutorial/data.html 新旧版语法的说明 在2.x的SQLALchemy中,查询语法为: db.session.exe ...
- 使用Mybatis自定义插件实现不侵入业务的公共参数自动追加
背景 后台业务开发的过程中,往往会遇到这种场景:需要记录每条记录产生时间.修改时间.修改人及添加人,在查询时查询出来. 以往的做法通常是手动在每个业务逻辑里耦合上这么一块代码,也有更优雅一点的做法是写 ...