【Flask】Request

请求方式

Flask默认是GET请求

如果我们在一个页面中即需要GET请求又需要POST请求那么我们需要重写methods方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    用户名:<input type="text">
    密码:<input type="password">
    <input type="submit" value="登录">
</form>
</body>
</html>

from flask import Flask,render_template
app = Flask(__name__)

@app.route(‘/login‘,methods=["POST","GET"])  # 重写methods方法
def login():
    return render_template("login.html")

if __name__ == ‘__main__‘:
    app.run("0.0.0.0",9876)

其他方法

Flask中的request为我们提供了很多属性,只需导入request直接调用对应的属性就可以直接看到效果

request.method

Flask 的 request 中给我们提供了一个 method 属性里面保存的就是前端的请求的方式

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route(‘/login‘,methods=["POST","GET"])
def login():
    # 获取前端的请求的方式
    print(request.method)
    return render_template("login.html")

if __name__ == ‘__main__‘:
    app.run("0.0.0.0",9876)

request.form

获取请求数据

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route(‘/login‘,methods=["POST","GET"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    if request.method == "POST":
        # 获取form表单提交的数据
        print(request.form) # ImmutableMultiDict([(‘username‘, ‘henry‘), (‘password‘, ‘123456‘)])
        return "200 ok"

if __name__ == ‘__main__‘:
    app.run("0.0.0.0",9876)

通过reqeust.form属性做登录验证

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route(‘/login‘,methods=["POST","GET"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    if request.method == "POST":
        # 获取form表单提交的数据
        print(request.form) # ImmutableMultiDict([(‘username‘, ‘henry‘), (‘password‘, ‘123456‘)])
        username = request.form.get("username")
        password = request.form.get("password")
        if username == "henry" and password == "123456":
            return "200 ok"
        else:
            return "404"

if __name__ == ‘__main__‘:
    app.run("0.0.0.0",9876)

注意:ImmutableMultiDict类型的数据和我们python中的字典用法是一样的

我们可以通过to_dict()方法将上面的这种数据类型转换成我们python中的字典,如下所示

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route(‘/login‘,methods=["POST","GET"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    if request.method == "POST":
        # 获取form表单提交的数据
        print(request.form.to_dict())  # {‘username‘: ‘henry‘, ‘password‘: ‘123456‘}
        username = request.form.get("username")
        password = request.form.get("password")
        if username == "henry" and password == "123456":
            return "200 ok"
        else:
            return "404"

if __name__ == ‘__main__‘:
    app.run("0.0.0.0",9876)

我们用get方法取字典中的值防止报错

request.headers

获取请求头中的数据

print(request.headers)
#Host: 192.168.16.42:9876
#Connection: keep-alive
#Content-Length: 27
#Cache-Control: max-age=0
#Origin: http://192.168.16.42:9876
#Upgrade-Insecure-Requests: 1
#Content-Type: application/x-www-form-urlencoded
#User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
#Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
#Referer: http://192.168.16.42:9876/login
#Accept-Encoding: gzip, deflate
#Accept-Language: zh-CN,zh;q=0.9

request.args

获取GET请求中的url参数

print(request.args)

# ImmutableMultiDict([(‘name‘, ‘henry‘), (‘age‘, ‘18‘)])

# 通过to_dict()方法转换成字典
print(request.args.to_dict())

# {‘name‘: ‘henry‘, ‘age‘: ‘18‘}

request.files

上传文件

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="file" name="my_file">
    <input type="submit" value="登录">
</form>
</body>
</html>

后端代码

from flask import Flask,render_template,request
app = Flask(__name__)

@app.route(‘/login‘,methods=["POST","GET"])
def login():
    if request.method == "GET":
        return render_template("login.html")

    if request.method == "POST":
        username = request.form.get("username")
        password = request.form.get("password")
        if username == "henry" and password == "123456":
            print(request.files) # ImmutableMultiDict([(‘my_file‘, <FileStorage: ‘click点击事件.gif‘ (‘image/gif‘)>)])
            files = request.files.get("my_file") # files是FileStorage类型 注意:不是文件句柄
            print(files.filename) # click点击事件.gif 【文件名字】
            files.save(files.filename) # FileStorage类型调用save方法保存

            return "200 ok"
        else:
            return "404"

if __name__ == ‘__main__‘:
    app.run("0.0.0.0",9876)


1

fp = os.path.join("templates",files.filename)  # 通过os模块指定保存路径

request中的其他属性

print(request.url) # 获取访问全路径
print(request.path) # 路由地址 /login
print(request.values) # 可以获取URL中的参数 也可以获取 FormData中的数据

print(request.args.get("id")) # 获取URL中的参数
print(request.args["id"]) # 获取URL中的参数
print(request.args.to_dict()) # 获取URL中的参数 转换成 字典

print(request.environ) # 获取请求原始信息
print(request.base_url) # 获取URL头,不包含参数

两个特殊的属性

print(request.json) # 请求头中 Content-type:application/json 数据序列化 request.json
print(request.data) # 请求头中 Content-type 不包含 Form or data

原文地址:https://www.cnblogs.com/youxiu123/p/11605772.html

时间: 2024-07-31 03:26:35

【Flask】Request的相关文章

【Flask】关于Flask的request属性

前言 在进行Flask开发中,前端需要发送不同的请求及各种带参数的方式,比如GET方法在URL后面带参数和POST在BODY带参数,有时候又是POST的表单提交方式,这个时候就需要从request提取参数.这篇文章是总结如何使用request. 关于request 在Flask的官方文档中是这样介绍request的: 对于 Web 应用,与客户端发送给服务器的数据交互至关重要.在 Flask 中由全局的 request 对象来提供这些信息. 从Flask模块导入request: from fla

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

表单中的文件上传 基本的表单渲染,表单类设置等等就不多说了,参看另一个文章即可.但是那篇文章里没有提到对于FileField,也就是上传文件的表单字段是如何处理,后端又是如何实现接受上传过来的文件的.因为看到了一篇很好的文章[https://zhuanlan.zhihu.com/p/23731819?refer=flask],所以我决定仔细学习一下.下面将按照那篇文章的脉络,由简至繁地说明表单中文件上传的办法. ■ 利用Flask原生的机制进行文件上传 首先在前端肯定有一个带有文件上传功能的表单

【Flask】Flask文件上传与下载

简洁明了,直接上代码吧 1. Flask实现文件上传 import os from flask import jsonify from flask import request @app.route('/upload', methods=["POST"]) def upload_file(): try: handle_upload() except Exception as e: return build_response(500, "Server error",

【Python】【Flask】前端调用后端方法

后端代码: @app.route("/test",methods=['POST','GET']) def test(): return "我是测试的" 前端代码: 1.使用<a>标签 <a href="{{url_for('test')}}">我是测试</a> 这个是最简单的,点击一下,就自动跳转了. 2.使用<button>的onclick 说起这个,光这个click就折腾了我一整天了.网上找不到

【Flask】Session

用法 Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 Flask 中 session 是需要 secret_key 的 from flask import session app = Flask(__name__) app.secret_key = "henry" secret_key 实际上是用来加密字符串的,如果在实例化的app中没有 secret_key 那么开启session一定会抛异常的 from fla

【Flask】第三方插件

Flask-Session 因为flask自带的session是将session存在cookie中: 所以才有了第三方Flask_session插件,可以将session存储在我们想存储的数据库中(redis等) pip install Flask-Session 将session保存在数据库中 注意redis数据库一定是在内网中的且是一台单独的服务器,防止被攻击 from flask import Flask,session,request,render_template from flask

【Flask】 WTForm表单编程

WTForm表单编程 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据.WTForm中最重要的几个概念如下: Form类,开发者自定义的表单必须继承自Form类或者其子类.Form类最主要的功能是通过其所包含的Field类提供对表单内数据的快捷访问方式. 各种Field类,即字段.一般而言每个Field类都对应一个input的HTML标签.比如WTForm自带的一些Field类比如BooleanField就对应

【Flask】 使用Flask-Moment进行日期时间的管理

Flask-Moment Flask-Moment又是一个flask的扩展模块,用来处理时间日期等信息.用这个模块主要是考虑到两点,第一是为了让不同时区的用户看到的都是各自时区的实际时间,而不是服务器所在地的时间.第二是对于一些时间间隔的处理,如果要手动处理很麻烦,如果有模块就很好了. ■ 简介 pip install flask-moment  来安装这个扩展模块.值得一提的是,单单在后台装好这个拓展模块是不够的,还需要前端的配合,因此前端也要配置好相关的支持库.按书上说的,使用了由JS开发的

【Flask】 项目结构说明

项目结构 Flask的一大优势就是其极其轻量化.但是也需要注意到,如果我们要用Flask做一个大项目的话,把所有代码写在一个文件里肯定是不合适的.非常难以维护.但是和Django这种框架又不一样,Flask并没有规定项目一定要遵从某种必须遵守的目录结构.最终,人们在长期的实践中得到一些比较好用因此约定俗成的目录结构. 一个典型的flask项目的目录结构是这样的(再次明确,不是强制的,而是约定俗成的一种结构): 这种结构有四个顶级文件夹,主体的程序代码都放在app包中:migrations文件夹中