我一直试图找到在Azure Functions的无服务器环境中运行Django的方法。
假设我只能使用Azure服务,我想确保我们将编写的Django代码应该是可移植的(可以部署在其他任何地方)。
我一直在尝试包括Python on Azure: Part 4—Running serverless Django和Serverless Framework在内的几种方法,但仍然无法使环境正常运行。
我想确保即使有人对运行Django无服务器有一个可行的想法,并且对好的资源也有一些指导?
答案 0 :(得分:1)
我不知道你到底想用 Django 做什么,但我实现了 Azure Functions 来运行 Django 命令(即 https://docs.djangoproject.com/en/3.1/howto/custom-management-commands/)。
首先,我按照以下步骤在自定义 docker Linux 容器中创建函数应用: https://docs.microsoft.com/de-de/azure/azure-functions/functions-create-function-linux-custom-image?tabs=bash%2Cportal&pivots=programming-language-python
这包括通过我的 Django 项目根目录下的 Azure 函数 CLI 和基于 docker 映像的 Docker 容器设置函数应用
mcr.microsoft.com/azure-functions/python:2.0-python3.7-slim
然后我通过 CLI 创建了一个 Azure 函数:
func new --name my-function --template "Timer trigger"
并启动 Django 并调用自定义命令,我的函数代码如下
def main(mytimer: func.TimerRequest) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
logging.info('Python timer trigger function started at %s', utc_timestamp)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjango.settings')
django.setup()
call_command('my_command') # possible to add command params here
logging.info('Successfully run my command')
最重要的是
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydjango.settings')
django.setup()
在函数代码中设置Django。
也许它也有助于您的目的。如果您有任何问题,我也可以为您提供更多详细信息。