后端技术详解
2026/3/20大约 3 分钟
后端技术详解
技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | 3.9 - 3.10.20 | 开发语言 |
| Django | 4.2.16 | Web 框架 |
| Django REST Framework | 3.15.2 | RESTful API |
| Celery | 5.4.0 | 异步任务 |
| Redis | 5.0.8 | 缓存/消息队列 |
| MySQL | - | 数据存储 |
项目结构
salted-fish-api/
├── SaltedFish/ # Django 项目配置
│ ├── settings.py # 项目设置
│ ├── urls.py # 主路由
│ ├── celeryConf.py # Celery 配置
│ ├── middleware.py # 中间件
│ └── wsgi.py # WSGI 入口
├── SaltedFishApi/ # 主业务应用
│ ├── Auth/ # 认证模块
│ ├── User/ # 用户模块
│ ├── Goods/ # 商品模块
│ ├── publish_goods/ # 发布模块
│ └── AutoPublishGoods/ # 自动发布模块
├── SaltedFishMobileApi/ # 移动端 API
│ └── OutOrder/ # 订单模块
├── libs/ # 自定义库
│ └── web_spider/ # 爬虫库
├── Log/ # 日志目录
├── media/ # 媒体文件
├── static/ # 静态文件
├── manage.py # Django 管理脚本
└── pyproject.toml # Poetry 依赖配置
核心配置
Django 设置
# settings.py 关键配置
INSTALLED_APPS = [
'simpleui', # Admin UI 美化
'django.contrib.admin',
'rest_framework',
'rest_framework_simplejwt', # JWT 认证
'rest_framework_simplejwt.token_blacklist',
'corsheaders', # CORS 支持
'django_filters', # 过滤器
'django_celery_beat', # 定时任务
# 业务应用
'SaltedFishApi.Auth',
'SaltedFishApi.User',
'SaltedFishApi.Goods',
'SaltedFishApi.publish_goods',
'SaltedFishApi.AutoPublishGoods',
'SaltedFishMobileApi.OutOrder',
]
# 认证配置
AUTH_USER_MODEL = "User.User"
# CORS 配置
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOW_HEADERS = '*'
# 文件上传配置
ALLOWED_FILE_TYPES = ['image/jpeg', 'image/png']
中间件配置
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware', # CORS 处理
'SaltedFish.middleware.MyMiddleware', # 自定义中间件
'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',
]
业务模块详解
Auth 认证模块
路径: SaltedFishApi/Auth/
功能:
- 用户登录/登出
- JWT Token 管理
- Token 刷新机制
核心文件:
views.py- 认证视图serializers/- 请求/响应序列化urls.py- 路由配置
User 用户模块
路径: SaltedFishApi/User/
用户模型:
class User(AbstractBaseUser, PermissionsMixin, BaseModel):
username = models.CharField(max_length=15, unique=True)
nickname = models.CharField(max_length=13)
gender = models.CharField(max_length=10, choices=GENDER_CHOICES)
phone = models.CharField(max_length=11)
email = models.EmailField()
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
class Meta:
db_table = 'user'
Goods 商品模块
路径: SaltedFishApi/Goods/
商品模型:
class Goods(BaseModel):
userId = models.ForeignKey(User, on_delete=models.CASCADE)
goods_name = models.CharField(max_length=255) # 商品名称
goods_desc = models.TextField() # 商品描述
item_biz_type = models.CharField(max_length=50) # 商品类型
outer_id = models.CharField(max_length=100) # 商品编码
original_price = models.DecimalField() # 原价
price = models.DecimalField() # 售价
sp_biz_type = models.CharField(max_length=50) # 商品分类
status = models.CharField(max_length=20) # 商品状态
class Meta:
db_table = 'goods'
区域模型:
class Regional(BaseModel):
name = models.CharField(max_length=100) # 区域名称
code = models.CharField(max_length=20) # 区域编码
area_type = models.CharField(max_length=20) # 类型(省/市/区)
p_id = models.ForeignKey('self', null=True) # 父级ID
class Meta:
db_table = 'regional'
AutoPublishGoods 自动发布模块
路径: SaltedFishApi/AutoPublishGoods/
视图模块:
Publish.py- 发布逻辑Template.py- 模板管理PublishConfig.py- 发布配置ContextGallery.py- 上下文图库TagGallery.py- 标签图库uploadImages.py- 图片上传
模型:
PublishModel.py- 发布任务、发布详情TempalteModel.py- 发布模板配置
Celery 异步任务
配置
# celeryConf.py
from celery import Celery
app = Celery('SaltedFish')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
# Redis 作为消息代理
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'django-db'
启动命令
# 启动 Beat (定时任务调度)
celery -A SaltedFish beat -l info --logfile=Log/CeleryTask/celery_beat.log
# 启动 Worker (任务执行)
celery -A SaltedFish worker -l info --logfile=Log/CeleryTask/celery_worker.log -P eventlet
任务使用示例
from celery import shared_task
@shared_task
def publish_goods_task(goods_id):
"""异步发布商品任务"""
# 执行发布逻辑
pass
爬虫库
路径: libs/web_spider/
主要依赖:
drissionpage- 网页自动化curl-cffi- HTTP 请求ddddocr- OCR 验证码识别
结构:
web_spider/
├── XGJ/ # 爬虫实现 A
├── XY/ # 爬虫实现 B
├── tools/ # 工具类
├── run_js/ # JavaScript 执行
└── test/ # 测试用例
API 路由
# urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('api/auth/', include('Auth.urls')),
path('api/publish/', include('publish_goods.urls')),
path('api/autoPublish/', include('AutoPublishGoods.urls')),
path('api/products/', include('Goods.urls')),
path('api/user/', include('User.urls')),
path('api/mobile/', include('OutOrder.urls')),
]
日志配置
日志目录结构:
Log/
├── RunLog/ # 运行日志
└── CeleryTask/ # Celery 任务日志
├── celery_beat.log
└── celery_worker.log
依赖管理
使用 Poetry 进行依赖管理:
# pyproject.toml
[tool.poetry.dependencies]
python = ">=3.9,<=3.10.20"
django = "4.*"
djangorestframework = "^3.15.2"
django-filter = "^24.3"
django-celery-beat = "^2.7.0"
django-celery-results = "^2.5.1"
django-redis = "^5.4.0"
djangorestframework-simplejwt = "^5.3.1"
django-simpleui = "^2024.8.28"
django-cors-headers = "^4.6.0"
celery = "^5.4.0"
redis = "^5.0.8"
mysqlclient = "^2.2.4"
开发命令
# 安装依赖
poetry install
# 数据库迁移
python manage.py makemigrations
python manage.py migrate
# 创建超级用户
python manage.py createsuperuser
# 运行开发服务器
python manage.py runserver
# 收集静态文件
python manage.py collectstatic