相关文章推荐
正直的荔枝  ·  Visual Studio Code – ...·  2 月前    · 
飘逸的花卷  ·  STM32 ...·  1 年前    · 
粗眉毛的镜子  ·  Developing for ...·  1 年前    · 

FLASK 中如何获取 GET/POST 请求的参数

一般来说,传递请求参数的方式有两种,一是打包成 JSON 之后再传递,二是直接放进 URL 进行传递 。对于第一种方式,一般用 POST 请求来传递参数,然后用 FLASK 中 request 模块的 get_json() 方法获取参数。而对于第二种方式,一般用 GET 请求传递参数,然后从 request.args 中用 get() 方法获取参数,不过需要说明的是用 POST 请求也可以通过 URL 的方式传递参数,而且获取参数的方式与 GET 请求相同。下面用代码来说明获取参数的过程。

1. 获取 POST 请求参数

from flask import request, jsonify
@app.route('/', methods = ["POST"])
def post_data():
	# 假设有如下 JSON 数据
    #{"obj": [{"name":"John","age":"20"}] }
    # 方法一
    data = request.get_json()                # 获取 JSON 数据
    data = pd.DataFrame(data["obj"])   # 获取参数并转变为 DataFrame 结构
    # 方法二
    # data = request.json        # 获取 JOSN 数据
    # data = data.get('obj')     #  以字典形式获取参数
    # 经过处理之后得到要传回的数据
    res = some_function(data)
    # 将 DataFrame  数据再次打包为 JSON 并传回
    # 方法一
    res = '{{"obj": {} }}'.format(res.to_json(orient = "records", force_ascii = False))
    # 方法二
    # res = jsonify({"obj":res.to_json(orient = "records", force_ascii = False)})
    return res

2. 获取 GET 请求参数

@app.route('/', methods = ["GET","POST"])   # GET 和 POST 都可以
def get_data():
    # 假设有如下 URL
    # http://10.8.54.48:5000/index?name=john&age=20
    #可以通过 request 的 args 属性来获取参数
    name = request.args.get("name")
    age = request.args.get("age")
    # 经过处理之后得到要传回的数据
    res= some_function(name, age)
    # 将数据再次打包为 JSON 并传回
    res = '{{"obj": {} }}'.format(res.to_json(orient = "records", force_ascii = False))
    return res

3. 统一调用方法

def request_parse(req_data):
	'''解析请求数据并以json形式返回'''
    if req_data.method == 'POST':
        data = req_data.json
    elif req_data.method == 'GET':
        data = req_data.args
    return data
@app.route('/', methods = ["GET","POST"])   # GET 和 POST 都可以
def get_data():
	data = request_parse(request)
	# 假设有如下 URL
    # http://10.8.54.48:5000/index?name=john&age=20
    name = data.get("name")
    age = data.get("age")
from flask import Flask
from flask import render_template, redirect,url_for
from flask import request
app = Flask(__name__)
@app.route('/login', methods=['POST','GET'])
def login():
  error = None
1.get请求:
使用场景:如果只从服务器获取数据,并没有对服务器产生任何影响,那么这时候使用get请求。
传参:get请求传参是放在url,并且是通过’?‘的形式来制动key和value的。
2.post请求:
使用场景:如果对服务器产生影响,那么使用post请求。
传参:post请求传参不是放在url,是通过’form data‘的形式发送给服务器的。
3.get和post请求获取参数:
*get请求:是通过’flask.request.args’来获取。
*post请求:
                                    form-data、x-www-form-urlencoded:不可以用@RequestBody;可以用@RequestParamapplication/json:json字符串部分可以用@RequestBody;url的?后面参数可以用@RequestParam在GET请求,不能使用@RequestBody。在POST请求,可以使用@RequestBody和@RequestParam;可以使用多个@RequestParam获取数据,@RequestBody不可以;
                                    对于post请求 有几种方式。实体头部用于指示资源的MIME类型media type。content-type是http请求头的字段。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。对于不同的content-type 发送的数据不太一样,对于服务器端,需要如何获取数据,以及正确解析的方法也是不一样的。下面列出常用的几种 Content-Typetext/plaintext/xmltext/html。
<form method="post">
      <label>用户名</label><input type="text" name="username"><br>
      <label>密码</label><input type="password" name="password"><br>
      <label>确认密码</label><in.
                                    1、简要说明
近日,在使用flask框架获取前端的请求获取参数时,遇到了几个问题;之前的项目也有使用这部分,当时程序没有问题就没再深究,直到遇到了问题。果然,遇到问题才会成长!^_^
因此,对GET和POST两种请求方式的参数获取方式进行梳理。
request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据。
request请求总体分为两类:
get请求
GET把参
                                    文章目录1 请求报文和响应报文2 request对象2.1 什么是request对象?2.2 为什么要有request对象?2.3 requst对象的常用方法2.3.1 使用request属性获取url2.3.2 其他request对象常用的属性和方法。3 GET和post的实例:3.1 常见的HTTP方法见下表:3.2 GET请求:3.3 POST请求:3.3.1 render_template的简单使用3.3.2 正式开始我们的POST案例:3.4 一个视图函数同时可以接收GET和POST请求
                                    什么是SWFUpload?
  SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合Flash与JavaScript技术为WEB开发者提供了一个具有丰富功能继而超越传统标签的文件上传模式。
[编辑本段]SWFUpload的主要特点
  * 可以同时上传多个文件;
  * 类似AJAX的无刷新上传;
  * 可以显示上传进度;
  * 良好的浏览器兼容性;
  * 兼容其他JavaScript库 (例如:jQuery, Prototype等);
  * 支持Flash 8和Flash 9;
  SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的在文件上传过程更新页面内容来营造各种动态效果。
  在使用SWFUpload之前,请确认你具备一定的JavaScript和DOM知识。在实际开发,大部分的错误都是由于错误的设置和低劣的Event Handlers处理程序所造成的。
[编辑本段]文档文翻译
  http://www.v-sky.com/doc/swfupload/v2.1.0/Documentation.html
[编辑本段]效果演示
  * Classic Form Demo http://demo.swfupload.org/formsdemo ;
  * Features Demo http://demo.swfupload.org/featuresdemo ;
  * Application Demo http://demo.swfupload.org/applicationdemo ;
  * v1.0.2 Plugin Demo http://demo.swfupload.org/v102demo ;
[编辑本段]选择合适的Flash控件
  在发行包(SWFUpload v2)含有2个版本的Flash控件(swfupload_f8.swf 与wfupload_f9.swf),其第一个版本拥有最佳的兼容性,但是为此损失了部分功能;而第二个版本提供了一些附加的功能但是损失了兼容性。
[编辑本段]SWFUpload的初始化与配置
  首先,在页面引用SWFUpload.js ,如
  然后,初始化SWFUpload ,如
  var swfu; 
  window.onload = function () { 
  swfu = new SWFUpload({ 
  upload_url : "http://www.swfupload.org/upload.php",
  flash_url : "http://www.swfupload.org/swfupload_f9.swf", file_size_limit : "20480" 
  以下是一个标准的SWFUpload初始化设置所需的参数,你可以根据需要自己进行删减:
  upload_url : "http://www.swfupload.org/upload.php", 处理上传请求的服务器端脚本URL
  file_post_name : "Filedata", 是POST过去的$_FILES的数组名
  post_params : { 
  "post_param_name_1" : "post_param_value_1", 
  "post_param_name_2" : "post_param_value_2", 
  "post_param_name_n" : "post_param_value_n" 
  file_types : "*.jpg;*.gif", 允许上传的文件类型
  file_types_description: "Web Image Files", 文件类型描述
  file_size_limit : "1024", 上传文件体积上限,单位MB
  file_upload_limit : 10, 限定用户一次性最多上传多少个文件,在上传过程,该数字会累加,如果设置为“0”,则表示没有限制
  file_queue_limit : 2, 上传队列数量限制,该项通常不需设置,会根据file_upload_limit自动赋值
                                    Ajax方法好,网站感觉跟高大上,但由于Js的局限,跨域Ajax无法实现,这里,讲一下解决办法,前提是需要能够自己可以控制flask端的响应。
主要技术:
修改服务器相应的相应头,使其可以相应任意域名。and设置响应头,使其能够相应POST方法。
实现代码:
这里先放flask代码:
from flask import make_response
@app.route('/test',methods=['get','post'])
def Test():
 if request.method=='GET':
  rst = make_response('aaa')
  rst.headers
                                    在Django框架开发,request对象就是用来处理GET\POST请求的关键对象,而Flask框架也是一样的。
下面来看看request对象的常用方法。
request对象的常用方法
request对象的导入:
from flask import request
Flask 框架的 request 对象保存了一次HTTP请求的一切信息。那么这个HTTP请求可能会是GET\POST请求,...