Django
Django 是一个功能强大的 Python Web 框架,遵循 "Batteries-included" 理念,提供开箱即用的全栈解决方案。它以高效开发和安全稳定著称,内置 ORM、Admin 后台、用户认证等模块,大幅减少重复代码。Django 采用清晰的 MVC(MTV)架构,支持高扩展性,适合从快速原型到企业级应用开发。
本指南介绍如何在 CloudBase HTTP 云函数上部署 Django 应用程序。
前置条件
在开始之前,请确保您已经:
- 安装了 Python 3.10 或更高版本
- 拥有腾讯云账号并开通了 CloudBase 服务
- 了解基本的 Python 和 Django 开发知识
第一步:创建 Django 应用
💡 提示:如果您已经有一个 Django 应用,可以跳过此步骤。
设置开发环境
创建项目目录并设置虚拟环境:
# 创建项目目录
mkdir django-cloudbase
cd django-cloudbase
# 创建虚拟环境
python -m venv env
# 激活虚拟环境
# Linux/macOS
source env/bin/activate
# Windows
# env\Scripts\activate
安装 Django
python -m pip install django
创建 Django 项目
django-admin startproject django_app .
此命令将在当前目录创建一个名为 django_app 的 Django 项目。
配置 Django 设置
编辑 django_app/settings.py 文件,添加 CloudBase 云函数的必要配置:
import os
from pathlib import Path
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('SECRET_KEY', 'your-secret-key-here')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = os.environ.get('DEBUG', 'False').lower() == 'true'
ALLOWED_HOSTS = ['*'] # 允许所有主机访问
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'django_app.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# Database
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
}
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
# Default primary key field type
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
创建简单的视图
编辑 django_app/urls.py 文件:
from django.contrib import admin
from django.urls import path
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
def home(request):
"""首页视图"""
return JsonResponse({
'message': 'Hello from Django on CloudBase!',
'method': request.method,
'path': request.path
})
def health(request):
"""健康检查接口"""
return JsonResponse({
'status': 'healthy',
'framework': 'Django',
'version': '4.2'
})
@csrf_exempt
def api_info(request):
"""API 信息接口"""
data = {
'method': request.method,
'path': request.path,
'headers': dict(request.headers),
'get_params': dict(request.GET),
}
if request.method == 'POST':
try:
data['post_data'] = json.loads(request.body) if request.body else {}
except json.JSONDecodeError:
data['post_data'] = request.POST.dict()
return JsonResponse(data)
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
path('health/', health, name='health'),
path('api/info/', api_info, name='api_info'),
]
第二步:本地测试
在部署之前,先在本地测试应用:
⚠️ 重要提示:CloudBase HTTP 云函数要求应用监听 9000 端口。
# 运行数据库迁移
python manage.py migrate
# 启动开发服务器(使用 9000 端口)
python manage.py runserver 0.0.0.0:9000
打开浏览器访问 http://127.0.0.1:9000,您应该能看到 JSON 响应。
测试其他接口:
http://127.0.0.1:9000/health- 健康检查http://127.0.0.1:9000/api/info/- API 信息
第三步:配置依赖项
生成 requirements.txt 文件:
pip freeze > requirements.txt
⚠️ 注意:只有在虚拟环境中运行上述命令才是安全的,否则它将生成系统上所有已安装的 Python 包,可能导致云函数无法正常启动。
典型的 requirements.txt 内容:
# Django 4.2 LTS - 兼容 SQLite 3.26+, 云函数默认运行时 SQLite 版本有要求
Django==4.2.16
asgiref==3.7.2
psycopg2-binary==2.9.11
sqlparse==0.4.4
typing_extensions==4.15.0
第四步:创建启动脚本
💡 注意:
- 在 windows 下创建
scf_bootstrap文件时,优先使用nano scf_bootstrap或者vim scf_bootstrap创建- 在 windows 下使用 vscode 创建
scf_bootstrap文件时,部署到 HTTP 云函数可能会报错:scf_bootstrap文件不存在- 这个错误是因为脚本文件包含了 Windows 格式的回车符(^M),导致 Linux 无法正确识别解释器路径。这是 WSL 中常见的问题
创建 scf_bootstrap 文件(无扩展名):
#!/bin/bash
# 设置 Python 依赖加载路径,我们默认设置在 third_party 目录
export PYTHONPATH="./third_party:$PYTHONPATH"
# 运行数据库迁移
/var/lang/python310/bin/python3.10 manage.py migrate --noinput
# 收集静态文件
/var/lang/python310/bin/python3.10 manage.py collectstatic --noinput
# 启动 Django 应用
/var/lang/python310/bin/python3.10 manage.py runserver 0.0.0.0:9000
为启动脚本添加执行权限:
chmod +x scf_bootstrap
💡 说明:
scf_bootstrap是 CloudBase 云函数的启动脚本- 脚本会自动运行数据库迁移和静态文件收集
- 确保应用监听 9000 端口
第五步:准备部署文件
部署前将依赖安装到 third_party 目录下:
⚠️ 注意:
- HTTP 云函数并不会自动安装 Python 依赖,所以我们需要自己将依赖下载到代码包中
pip install -r requirements.txt -t third_party
确保您的项目目录结构如下:
django-cloudbase/
├── third_party/ # 第三方依赖
├── django_app/ # Django 项目目录
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py # Django 管理脚本
├── requirements.txt # 依赖列表
├── scf_bootstrap # 启动脚本
第六步:部署到 CloudBase HTTP 云函数
通过控制台部署
- 登录 CloudBase 控制台
- 选择您的环境,进入「云函数」页面
- 点击「新建云函数」
- 选择「HTTP 云函数」
- 填写函数名称(如:
django-app) - 选择运行时:Python 3.10
- 提交方法选择:本地上传文件夹
- 函数代码选择项目根目录进行上传
- 自动安装依赖:开启此选项
- 点击「创建」按钮等待部署完成
通过 CLI 部署
详情请参考 部署HTTP云函数
打包部署
如果需要手动打包:
# 创建部署包
zip -r django-app.zip third_party django_app manage.py scf_bootstrap
第七步:访问您的应用
部署成功后,您可以参考通过 HTTP 访问云函数设置自定义域名访问HTTP 云函数。
您可以测试以下接口:
- 根路径:查看欢迎消息
/health/:查看健康状态/api/info/:查看请求信息/admin/:访问 Django 管理后台
常见问题
Q: 为什么必须使用 9000 端口?
A: CloudBase HTTP 云函数要求应用监听 9000 端口,这是平台的标准配置。
Q: 如何处理静态文件?
A: 在 settings.py 中配置 STATIC_ROOT,并在 scf_bootstrap 中运行 collectstatic 命令。
Q: 数据库如何配置?
A: 对于生产环境,建议使用 CloudBase 数据库或其他云数据库服务,而不是 SQLite。
Q: 如何查看应用日志?
A: 在 CloudBase 控制台的云函数页面,点击函数名称进入详情页查看运行日志。
Q: Django 的 SECRET_KEY 如何管理?
A: 建议使用环境变量管理敏感配置,在云函数中设置环境变量。
最佳实践
- 环境变量管理:使用环境变量管理敏感配置信息
- 数据库选择:生产环境使用云数据库而非 SQLite
- 静态文件处理:正确配置静态文件的收集和服务
- 安全配置:在生产环境中关闭 DEBUG 模式
- 日志记录:配置适当的日志级别和输出格式
- 错误处理:实现全局异常处理和友好的错误页面
进阶配置
使用 WSGI 服务器
对于生产环境,建议使用 Gunicorn 等 WSGI 服务器:
# 安装 Gunicorn
pip install gunicorn
# 更新 requirements.txt
pip freeze > requirements.txt
修改 scf_bootstrap:
#!/bin/bash
export PYTHONPATH="./env/lib/python3.10/site-packages:$PYTHONPATH"
# 运行迁移
/var/lang/python310/bin/python3.10 manage.py migrate --noinput
# 收集静态文件
/var/lang/python310/bin/python3.10 manage.py collectstatic --noinput
# 使用 Gunicorn 启动
/var/lang/python310/bin/python3.10 -m gunicorn django_app.wsgi:application --bind 0.0.0.0:9000
环境变量配置
在云函数控制台设置环境变量:
SECRET_KEY: Django 密钥DEBUG: 调试模式(False)DATABASE_URL: 数据库连接字符串(如果使用外部数据库)
下一步
- 了解更多 HTTP 云函数配置选项
- 学习如何 连接 CloudBase 数据库