Flask之methods、url_for进行反解析、request的使用、上传文件、abort函数与自定义异常处理、元组、使用jsonify返回json数据、设置和读取cookie

2023-11-12

Flask利用methods限制访问方式

在flask中,可以使用在路由装饰器中使用methods=【访问方式】,同一视图中可以同时存在多种访问方式

# 通过methods限定访问方式
@app.route("/post_only",methods=["POST","GET"])
def post_only():
    return "post_only"

if __name__ == '__main__':
    print app.url_map
    app.run(debug=True)

同名的URL可以有不同的访问方式

# 同样URL下和django一样,同名url不同访问方式。
@app.route("/hello",methods=["POST"])
def hello():
    return  "hello 1"

@app.route("/hello",methods=["GET "])
def hello2():
    return "hello 2"

同一视图中可以有多种访问方式,使用if进行判断区分

if request.method == "GET":
    pass
elif request.method == "POST":
    pass

使用url_for进行反解析

使用url_for 的函数,通过视图的名字找到视图对应的url路径

# coding:utf-8

from flask import Flask,current_app,redirect,url_for


# 创建FLask的应用对象
# __name__ 表示当前模块的名字
# 模块名,Falsk这个模块所在的位置为总目录,默认这个目录中static为静态目录, 为模版目录。
app = Flask(__name__)

@app.route("/login")
def login():
    # url = "/"
    # 使用url_for 的函数,通过视图的名字找到视图对应的url路径
    url = url_for("index")
    return redirect(url)


if __name__ == '__main__':
    print app.url_map
    app.run(debug=True)

获取请求参数之request的使用

Flask 中表示当前请求的 request 对象,request对象中保存了一次HTTP请求的一切信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6F1y1tS-1587388816775)(/Users/zhaobei/Library/Application Support/typora-user-images/image-20200420204253279.png)]

request中包含了前端发送过来的请求参数,request.from可以直接提取请求体中的表单格式数据,是一个类似字典的对象。

# coding:utf-8

from flask import Flask,request

app = Flask(__name__)


# 127.0.0.1:5000/index?city=shenzhen&country=china 查询字符串 Querystring
@app.route("/index",methods=["GET","POST"])
def index():
    # request 中包含了前端发送过来的所有请求数据
    # request.from可以直接提取请求体中的表单格式数据,是一个类似字典的对象
    name = request.form.get("name")
    age = request.form.get("age")
    city = request.args.get("city")
    print request.data
    name_li = request.form.getlist("name")
    print name_li[1]
    return "hello name=%s,age=%s,city=%s"%(name,age,city)

if __name__ == '__main__':
     app.run(debug=True)

上传文件

​ 已上传的文件存储在内存或是文件系统中一个临时的位置。你可以通过请求对象的 files 属性访问它们。每个上传的文件都会存储在这个字典里。它表现近乎为一个标准的 Python file 对象,但它还有一个 save() 方法,这个方法允许你把文件保存到服务器的文件系统上。这里是一个用它保存文件的例子:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNCj2l13-1587388816778)(file:Users/zhaobei/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image001.jpg)]

如果你想知道上传前文件在客户端的文件名是什么,你可以访问 filename 属性。但请记住, 永远不要信任这个值,这个值是可以伪造的。如果你要把文件按客户端提供的文件名存储在服务器上,那么请把它传递给 Werkzeug 提供的 secure_filename() 函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Krjvzvpw-1587388816779)(file:Users/zhaobei/Library/Group%20Containers/UBF8T346G9.Office/TemporaryItems/msohtmlclip/clip_image001.jpg)]

# coding:utf-8

from flask import Flask,request

app = Flask(__name__)


# 127.0.0.1:5000/index?city=shenzhen&country=china 查询字符串 Querystring
@app.route("/upload",methods=["POST"])
def upload():
    """接受前端传送过来的文件"""
    file_obj = request.files.get("pic")
    if file_obj is None:
        return "没有上传图片"

    # 直接使用上传文件对象进行保存
    file_obj.save("demo1.png")
    return "上传成功"

if __name__ == '__main__':
     app.run(debug=True)

abort函数与自定义异常处理–abort函数

abort()函数用于提前退出(Google翻译abort)一个请求,并用指定的错误码返回。

函数原型如下:

flask.abort(status, *args, **kwargs)

第一个status参数可以是一个状态码,比如,404,也可以是一个WSGI应用,必不可少!示例如下:

abort(404) # 404 Not Found

abort(Response(‘Hello World’)) # Response包装的一个WSGI应用

注意,状态码要出现在Flask定义的异常号列表(the list of exceptions)中,否则会引发内部服务器错误,比如,传递2XX、3XX就不可以的。

# coding:utf-8

from flask import Flask,request,abort,Response

app = Flask(__name__)

@app.route("/login",methods=["GET"])
def upload():
    """接受前端传送过来的文件"""
    # name = request.form.get("name")
    # pwd = request.form.get("pwd")
    name = ""
    pwd = ""
    if name != "zhangsan" and pwd != "admin":
        # 使用abort可以立即终止视图函数的执行
        # 并可以返回给前端特定的信息
        # 1、abort 中可传入特定的状态码信息
        abort(404)
        # 2、传入响应体信息
        # resp = Response("login failed")
        # abort(resp)

    return "login success"

# 自定义错误信息处理方法
@app.errorhandler(404)
def handle_404(err):
    """自定义错误处理方法"""
    # 这里返回的是前端看到的错误信息
    return u"出现了404错误,错误信息:%s"%err



if __name__ == '__main__':
     app.run(debug=True)

元组

可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。

# coding:utf-8

from flask import Flask,request,abort,Response,make_response

app = Flask(__name__)

@app.route("/index")
def index():
     # 1、使用元祖自定义相应信息
     # 响应体 状态码 响应头可用列表和字典都可以,响应体是按照顺序从前到后的,后面的可以省略
     # return ("index page",400,[("name","zhaobei"),("age","22")])
     # 自定义状态码含义,状态码与描述空格间隔
     # return ("index page", "666 this a 666 status", [("name", "zhaobei"), ("age", "22")])

     # 2、使用make_response 来构造响应信息
     resp = make_response("indes page2")
     resp.status = "999 this a 999 status"  #设置状态码
     resp.headers["name"] = "zhaobei"  # 响应头
     return resp




if __name__ == '__main__':
     app.run(debug=True)

使用jsonify返回json数据

# coding=utf-8
from flask import Flask,jsonify
import json

app = Flask(__name__)



@app.route("/index")
def index():
    # json就是字符串
    data = {
        "name": "python",
        "age": 18
    }
    # json.dumps 将字典转换为json字符串
    # json.loads 将json字符串转换为字典
    # json_str = json.dumps(data)
    # return json_str,200,{"Content-Type": "application/json"}

    # jsonify帮转转换为json数据,并设置响应头Content-Type为application/json
    return jsonify(data)


if __name__ == '__main__':
    app.run(debug=True)

设置和读取cookie

# coding=utf-8
from flask import Flask,make_response,request

app = Flask(__name__)

@app.route("/set_cookie")
def set_cookie():
    """设置cookie"""
    resp = make_response("success")
    resp.set_cookie("name","zhaochaoqun")
    resp.set_cookie("age","18",max_age=3600)
    return resp

@app.route("/get_cookie")
def get_cookie():
    """获取cookie"""
    cookie = request.cookies.get("name")
    return ("cookie is %s")%cookie

@app.route("/delete_cookie")
def delete_cookie():
    """删除cookie"""
    resp = make_response("del success")
    resp.delete_cookie("name")
    return resp

结语

不积跬步无以至千里,不积小流无以成江海。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask之methods、url_for进行反解析、request的使用、上传文件、abort函数与自定义异常处理、元组、使用jsonify返回json数据、设置和读取cookie 的相关文章

随机推荐

  • 2016年蓝桥杯省赛C/C++ A组-寒假作业

    题目 现在小学的数学题目也不是那么好玩的 看看这个寒假作业 每个方块代表1 13中的某一个数字 但不能重复 比如 6 7 13 9 8 1 3 4 12 10 2 5 以及 7 6 13 9 8 1 3 4 12 10 2 5 就算两种解法
  • ug产品摆正高级技巧_UG NX如何摆正产品零件模型

    原标题 UG NX如何摆正产品零件模型 有时 我们拿到一个产品模型 按F8也是一个歪的视图 如图 那么该如何才能将产品摆正呢 其实很简单 我们只需要移动下就好了 按ctrl t移动对象 选中模型 变化选项里面运动选择从csys到csys 指
  • 数据结构——串——王道

    目录 串 定义 串和线性表的联系及不同 串的基本操作 存储结构 顺序存储 链式存储 基本操作的实现 字符串模式匹配算法 朴素模式匹配算法 KMP算法 串 定义 串 即字符串 String 是由零个或多个字符组成的有限序列 一般记为 其中 S
  • 编写cuda代码查看自己机器的显卡信息

    代码如下 cudaDeviceProp 是一个结构体 一些参数就是cudaDeviceProp 结构体中的参数 cudaGetDeviceProperties cudade 0 这个函数就是实例化 第一个参数就是实例化 第二个参数是哪一个显
  • Windows如何开启虚拟化,以安装虚拟机?

    参考 Windows如何开启虚拟化 以安装虚拟机 作者 一只青木呀 发布时间 2020 08 28 20 58 45 网址 https blog csdn net weixin 45309916 article details 108286
  • STM32Cube 中的STM32例程EXAMPLE

    STM32 Cube 其实包含的大量的程序例子 一些模块程序编写不需要再去找其他例子 在这就能找到 在这里插入图片描述 https img blog csdnimg cn 7862d4aba5b54d4da2db87586b4ae859 p
  • Spring源码--Bean的加载

    bean的加载在AbstractBeanFactory的doGetBean中 protected
  • Allegro怎么进行走线

    1 切换到走线模式 点击走线 在options中进行走线参数设置 如下图
  • 2022蓝桥杯省赛——顺子日期

    问题描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 小明特别喜欢顺子 顺子指的就是连续的三个数字 123 456 等 顺子日期指的就是在日期的 yyyymmdd 表示法中 存在任意连续的三位数是一个顺子的日期
  • 并行CRC—Verilog代码实现

    CRC并行Verilog 1 构造系数方阵F 2 计算CRC系数 3 计算DATA系数 3 1 DATA系数真相 4 合并系数 5 验证 6 其他选项 6 1输入翻转 6 2预设初值 6 3输出翻转 取反 7 Matlab生成并行crc代码
  • vue实现文件批量上传及进度条展示

    主要实现功能 1 多文件拖拽上传 2 显示文件上传进度条 3 上传期间 还可以继续拖拽上传 4 可以支持手动修改上传并发任务数 5 上传失败自动重试 最大重试次数3次 6 上传过程中可以手动取消上传 本次使用的是element ui 上传拖
  • CUDA实现多batch基数排序

    CUDA实现多batch基数排序 基数排序是具有固定迭代次数的排序算法 其通过对最低位到最高位的一一比较 对数值排序 GPU版的基数排序将数据分为N个部分并行进行基数排序 随后并行规约得到排序后的数组 这里实现了一版多batch的基数排序实
  • 对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习

    在unix系统调用中 标准输入描述字用stdin 标准输出用stdout 标准出错用stderr表示 但在一些调用函数 引用了STDIN FILENO表示标准输入才 同样 标准出入用STDOUT FILENO 标准出错用STDERR FIL
  • C# 异步编程的三种方式

    一 通过委托实现异步 namespace Test1 class AsyncDemo public void async string i 参数 Console WriteLine 调用异步方法前 PostAsync i Console W
  • Java api中文在线版

    转载自 http blog csdn net qw599186875 article details 52265995ticket ST 213719 sl0mP1mtz9GcbY44tTbE passport csdn net java
  • 在Linux虚拟机上安装QT

    一 安装虚拟机 运行VMware workstation full 11 1 0 2496824 exe 二 在虚拟机上安装Linux 1 下载Ubuntu桌面版 从官网进入 选择 桌面版 按照提示进行下载 国内的一个镜像网址是 http
  • NC65 查询模板参照字段启用参照是否包含下级

    NC65 查询模板参照字段 勾选参照是否包含下级时 选择完参照字段返回的查询条件 参照字段的值是一个sql语句 无法查询到正确数据 当查询模板字段勾选了是否查询条件时 通过getQryDLGDelegator getGeneralCondt
  • 华为有没有公开鸿蒙系统,华为捐赠鸿蒙最核心基础架构该如何看待?

    原标题 华为捐赠鸿蒙最核心基础架构该如何看待 6月2日 华为 鸿蒙操作系统 正式发布 这是一款面向全场景的分布式操作系统 和苹果安卓等手机电脑系统不同 鸿蒙系统可用于物联网各种设备 从目前市场上的操作系统市场比例上看 安卓占据了全球68 6
  • 拉链表设计详解

    拉链表设计原理 将拉链表和每日增量数据做左连接 每日增量没有匹配的数据和拉链表endtime lt 99991231的数据保持不变 其他的endtime变为每日增量的starttime 1 如果数据发生修改 拉链表和增量数据左连接 将拉链表
  • Flask之methods、url_for进行反解析、request的使用、上传文件、abort函数与自定义异常处理、元组、使用jsonify返回json数据、设置和读取cookie

    Flask利用methods限制访问方式 在flask中 可以使用在路由装饰器中使用methods 访问方式 同一视图中可以同时存在多种访问方式 通过methods限定访问方式 app route post only methods POS