gpt4 book ai didi

python - 从 Python 2 升级到 Python 3 Google App Engine

转载 作者:行者123 更新时间:2023-12-05 06:17:36 27 4
gpt4 key购买 nike

我想将我的应用引擎 python 版本从 Python 2 升级到 Python 3。但是在第二代应用引擎中,我们不能使用 app.yaml 中的处理程序中的登录字段来使应用引擎中的某些页面只能由管理员访问。

根据 Google 的指导方针,建议如下:不支持登录字段。使用 Cloud Identity and Access Management 进行用户管理。

我不知道如何使用身份和访问管理来控制登录访问?

最佳答案

您是否正在尝试让管理员用户实际可以调用的仅限管理员的端点?或者您是否尝试拥有仅用于运行 cron 作业和/或排队任务的仅限管理员的端点?

如果是前者(即具有管理员人员实际查看的页面/处理程序),则文档 here可能是你要找的。不幸的是,正如我在应用引擎文档中注意到的那样,您可能不得不一页页地阅读“理论”,而永远看不到您可以尝试实际使用的示例代码。然而,我的猜测是您最终可能会编写一个装饰器来检查用户授权和身份验证,如下所示。

如果您只是想限制对端点的访问以保护正在运行的 cron 作业和排队任务,那么您可能正在寻找 thisthis解决方案。基本上,您编写一个装饰器来验证端点/处理程序是否正在被 cron 作业或任务队列调用。这是应该可以正常运行的工作代码:

# main.py

from flask import Flask, request, redirect, render_template

app = Flask(__name__)

# Define the decorator to protect your end points
def validate_cron_header(protected_function):
def cron_header_validator_wrapper(*args, **kwargs):
# https://cloud.google.com/appengine/docs/standard/python3/scheduling-jobs-with-cron-yaml#validating_cron_requests
header = request.headers.get('X-Appengine-Cron')
# If you are validating a TASK request from a TASK QUEUE instead of a CRON request, then use 'X-Appengine-TaskName' instead of 'X-Appengine-Cron'
# example:
# header = request.headers.get('X-Appengine-TaskName')
# Other possible headers to check can be found here: https://cloud.google.com/tasks/docs/creating-appengine-handlers#reading_app_engine_task_request_headers

# If the header does not exist, then don't run the protected function
if not header:
# here you can raise an error, redirect to a page, etc.
return redirect("/")

# Run and return the protected function
return protected_function(*args, **kwargs)

# The line below is necessary to allow the use of the wrapper on multiple endpoints
# https://stackoverflow.com/a/42254713
cron_header_validator_wrapper.__name__ = protected_function.__name__
return cron_header_validator_wrapper


@app.route("/example/protected/handler")
@validate_cron_header
def a_protected_handler():
# Run your code here
your_response_or_error_etc = "text"
return your_response_or_error_etc


@app.route("/yet/another/example/protected/handler/<myvar>")
@validate_cron_header
def another_protected_handler(some_var=None):
# Run your code here
return render_template("my_sample_template", some_var=some_var)

关于python - 从 Python 2 升级到 Python 3 Google App Engine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61560517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com