实现步骤
- 引入必要的模块和类。
- 把函数参数从
req改为request,这是DRF视图函数的标准参数名。 - 采用DRF的
APIView或者@api_view装饰器来处理请求。 - 对异常处理逻辑进行优化,明确捕获特定异常并返回合适的错误信息。
- 运用DRF的
Response类来返回格式化后的数据。
代码示例
下面是修改后的代码:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework import status
@api_view(['GET']) # 明确指定支持的HTTP方法
@permission_classes([AllowAny]) # 设置权限,这里允许任何用户访问 用于跳过jwt认证
@csrf_exempt # 如果你确实需要禁用CSRF保护
def get_setting_img(request):
rsp_data = {}
try:
set_data = get_setting_config()
if set_data:
rsp_data['enterprise_logo'] = set_data.get('enterprise_logo')
rsp_data['enterprise_bg'] = set_data.get('enterprise_bg')
rsp_data['cancel_registration'] = set_data.get('cancel_registration')
# 如果set_data为空,返回空的rsp_data(根据业务需求调整)
return Response({
'data': rsp_data,
'code': 200,
'message': '获取成功'
}, status=status.HTTP_200_OK)
except Exception as e:
# 记录错误日志
import logging
logger = logging.getLogger(__name__)
logger.error(f"获取设置图片失败: {str(e)}")
# 返回错误响应
return Response({
'data': None,
'code': 500,
'message': '获取失败,请稍后重试'
}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)关键修改点说明
- 导入必要的模块:
引入了api_view装饰器、AllowAny权限类以及status模块,为使用DRF的功能做好准备。 - 使用
@api_view装饰器:
替代了原来的@csrf_exempt,这样能更规范地处理HTTP方法,同时正确处理DRF的请求和响应。 错误处理优化:
- 捕获特定异常并记录错误日志,方便后续排查问题。
- 返回符合统一格式的错误响应,包含
code、message和data字段。
- 响应格式统一:
按照之前讨论的格式,将数据包裹在{"data": ..., "code": ..., "message": ...}结构中。 - 权限设置:
使用@permission_classes([AllowAny])允许未认证用户访问该接口,你可以根据实际需求调整权限。
注意事项
- 要保证
get_setting_config()函数能够正确处理并返回预期的数据结构。 - 在生产环境中,建议移除
@csrf_exempt或者确保有其他的CSRF保护机制。 - 可以根据项目的日志配置,对错误日志的记录方式进行调整。


Comments | NOTHING