试图找出在这里使用的正确机制。
我想修改每次出现的烧瓶请求。
我认为请求是不变的,因此我试图弄清楚这种机制是否存在。
基本上,我想在输入请求的末尾附加一个字符串。
我可以像这样在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
但是我不确定该怎么做才能添加它,并且看不到实现它的方法...我想我可以重定向,但是在这种情况下,这似乎很愚蠢。有什么想法吗?
答案 0 :(得分:2)
请求对象是不可变的(https://werkzeug.palletsprojects.com/en/1.0.x/wrappers/#base-wrappers),但是可以使用Flask的子类化(request.args
或request.form
从ImmutableOrderedMultiDict
设置为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)