Files
chunyu_project/utils/response_codes.py
T
2026-08-05 23:59:15 +08:00

121 lines
4.2 KiB
Python

"""
Response codes and messages enumeration for standardized API responses
This module contains all response codes and messages used across the application.
Codes are 5-digit numbers:
- 10000-19999: Success codes
- 20000-29999: Error codes
"""
from enum import IntEnum, Enum
class ResponseCode(IntEnum):
"""Response codes enumeration (5-digit numbers)"""
SUCCESS = 10000
EMAIL_SENT_REGISTER = 10001
EMAIL_SENT_LOGIN = 10002
REGISTRATION_SUCCESS = 10003
LOGIN_SUCCESS = 10004
PASSWORD_CHANGED = 10005
PASSWORD_SET = 10006
EMAIL_CHANGE_CODE_SENT = 10007
EMAIL_CHANGED = 10008
PARAMETER_ERROR = 20001
EMAIL_EMPTY = 20002
EMAIL_SEND_FAILED = 20003
VERIFICATION_CODE_EXPIRED = 20004
USER_DATA_INVALID = 20005
VERIFICATION_CODE_ERROR = 20006
LOGIN_VERIFICATION_EXPIRED = 20007
LOGIN_VERIFICATION_ERROR = 20008
SERVER_INTERNAL_ERROR = 20009
OLD_PASSWORD_ERROR = 20010
PASSWORD_MISMATCH = 20011
PASSWORD_TOO_SHORT = 20012
PASSWORD_TOO_WEAK = 20013
EMAIL_SAME_AS_OLD = 20014
EMAIL_ALREADY_IN_USE = 20015
RESET_CODE_SENT = 10009
PASSWORD_RESET_SUCCESS = 10010
VALIDATION_ERROR = 20016
NOT_FOUND = 20017
USER_NOT_FOUND = 20018
CAPTCHA_ERROR = 20020
CAPTCHA_EXPIRED = 20021
CAPTCHA_REQUIRED = 20022
EMAIL_DOMAIN_INVALID = 20023
class ResponseMessage:
"""Response messages enumeration (static class)"""
SUCCESS = 'Success'
EMAIL_SENT_REGISTER = '账号未注册,已发送注册邮件'
EMAIL_SENT_LOGIN = '邮件发送成功'
REGISTRATION_SUCCESS = '注册成功'
LOGIN_SUCCESS = '登录成功'
PASSWORD_CHANGED = '密码修改成功'
PASSWORD_SET = '密码设置成功'
EMAIL_CHANGE_CODE_SENT = '验证码已发送至邮箱'
EMAIL_CHANGED = '邮箱修改成功'
PARAMETER_ERROR = '参数异常'
EMAIL_EMPTY = '邮箱地址不能为空'
EMAIL_SEND_FAILED = '邮件发送失败'
VERIFICATION_CODE_EXPIRED = '验证码已过期或未发送'
USER_DATA_INVALID = '用户数据验证失败'
VERIFICATION_CODE_ERROR = '验证码错误'
LOGIN_VERIFICATION_EXPIRED = '验证码已过期或未发送'
LOGIN_VERIFICATION_ERROR = '验证码错误'
SERVER_INTERNAL_ERROR = '服务器内部错误'
OLD_PASSWORD_ERROR = '当前密码错误'
PASSWORD_MISMATCH = '两次输入的新密码不一致'
PASSWORD_TOO_SHORT = '密码长度不能少于8位'
PASSWORD_TOO_WEAK = '密码必须包含字母和数字'
EMAIL_SAME_AS_OLD = '新邮箱与当前邮箱相同'
EMAIL_ALREADY_IN_USE = '该邮箱已被其他账号使用'
RESET_CODE_SENT = '重置密码验证码已发送至邮箱'
PASSWORD_RESET_SUCCESS = '密码重置成功'
VALIDATION_ERROR = '数据验证失败'
NOT_FOUND = '资源不存在'
USER_NOT_FOUND = '该邮箱未注册'
CAPTCHA_ERROR = '验证码错误'
CAPTCHA_EXPIRED = '验证码已过期,请重新获取'
CAPTCHA_REQUIRED = '操作过于频繁,请输入验证码'
EMAIL_DOMAIN_INVALID = '邮箱域名不存在,请输入真实邮箱地址'
def get_response_message(code: ResponseCode) -> str:
"""Get the corresponding message for a response code."""
return getattr(ResponseMessage, code.name, str(code))
SUCCESS = 200
SERVER_INTERNAL_ERROR = 500
def create_standardized_response(data=None, code=None, status_code=200, message=None):
"""Create a standardized success response."""
from rest_framework.response import Response
response_data = {}
if data is not None:
response_data['data'] = data
if code is not None:
response_data['code'] = int(code)
response_data['message'] = message or get_response_message(code)
return Response(response_data, status=status_code)
def create_standardized_error_response(data=None, code=None, status_code=400, message=None):
"""Create a standardized error response."""
from rest_framework.response import Response
response_data = {}
if data is not None:
response_data['data'] = data
if code is not None:
response_data['code'] = int(code)
response_data['message'] = message or get_response_message(code)
else:
response_data['message'] = message or 'Unknown error'
return Response(response_data, status=status_code)