为每个烧瓶GET请求添加查询参数

时间:2020-09-01 22:56:25

标签: python-3.x flask

试图找出在这里使用的正确机制。

我想修改每次出现的烧瓶请求。

我认为请求是不变的,因此我试图弄清楚这种机制是否存在。

基本上,我想在输入请求的末尾附加一个字符串。

我可以像这样在before_request处理程序中挂接到请求和正确的时间:

@app.before_app_request
def before_request_custom():
    # Get the request
    req = flask.request

    method = str(req.method)

    if method == "GET":
        # Do stuff here
        pass

但是我不确定该怎么做才能添加它,并且看不到实现它的方法...我想我可以重定向,但是在这种情况下,这似乎很愚蠢。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

请求对象是不可变的(https://werkzeug.palletsprojects.com/en/1.0.x/wrappers/#base-wrappers),但是可以使用Flask的子类化(request.argsrequest.formImmutableOrderedMultiDict设置为OrderedMultiDict {3}})。这是一个如何添加filter[is_deleted]=False URL参数的示例:

from flask import Flask, request, Request
from werkzeug.datastructures import OrderedMultiDict

class MyRequest(Request):
    parameter_storage_class = OrderedMultiDict

class MyApp(Flask):
    def __init__(self, import_name):
        super(MyApp, self).__init__(import_name)
        self.before_request(self.my_before_method)

    def my_before_method(self):
        if "endpoint" in request.base_url:
            request.args["filter[is_deleted]"] = "False"

app = MyApp(__name__)
app.request_class = MyRequest

@app.route('/endpoint/')
def endpoint():
    filter = request.args.get('filter[is_deleted]')
    return filter

通过这种方式,您可以在实际发送请求之前修改request.args

答案 1 :(得分:0)

怎么样?

import os
import sys

from cx_Freeze import setup, Executable


os.environ['TCL_LIBRARY'] = 'C:\\Users\\kohei\\anaconda3\\tcl\\tcl8.6'
os.environ['TK_LIBRARY'] = 'C:\\Users\\kohei\\anaconda3\\tcl\\tk8.6'

base = None
if sys.platform == "win32":
    base = "Win32GUI"

packages = [
    "csv",
    "datetime",
    "os",
    "pathlib",
    "pyautogui",
    "string",
    "subprocess",
    "termcolor",
    "time",
    "xlrd",
]

excludes = [
    "lxml",
    "matplotlib",
    "numpy",
    "pandas",
    "tkinter",
]

includes = [
    'zoom_controller',
    'zoom_controller.models',
    'zoom_controller.controller',
    'zoom_controller.templates',
    'zoom_controller.views',
    ]

build_exe_options = {
    "packages":packages,
    "excludes":excludes,
    "includes":includes,
}

directory_table = [
(
    "ProgramMenuFolder",
    "TARGETDIR",
    ".",
),
(
    "ZoomProgramMenu",
    "ProgramMenuFolder",
    "ZoomAutomator",
),
                ]

msi_data = {
    "Directory": directory_table,
}

setup(
    name = "zoom_auto_controller_app",
    version = "1.1.0",
    description = "Zoom Automator",
    options = {'build_exe': build_exe_options,
                'bdist_msi': {'data': msi_data}},
    executables = [
        Executable(
            'main.py',
            base=base,
            shortcutName="ZoomAutomator",
            shortcutDir="ZoomProgramMenu",
        )
    ])

然后,from flask import g @app.before_request def before_request(): # Get the request req = flask.request method = str(req.method) if method == "GET": g.my_addon = "secret sauce" return None 在每个视图函数中均可用:

g.my_addon

答案 2 :(得分:0)