DRF 库提供了很多我并不会用到的功能,比如登录验证,权限管理,API 版本号管理,限流、自动翻页等等,这些我更侧重独立和手动的处理。
Generic Views 一直是一个让我感到疑惑的东西,看似写起来简单,代码量很少,像是填充一些预定义的变量和方法,简单的增删查改会方便一点,但是在实际复杂的业务场景下,可能导致问题复杂化,并没有显式的写出操作过程更清晰。
所以我仿照 DRF 的 APIView,继承 Django 的 View,自己写了一个新的 APIView,包含了核心功能,解析 JSON,同时增加了部分常用方法,比如 validate_serializer、self.success、self.error 和 self.paginate 等等。
大致的代码就是
class UserProfileAPI(APIView):
@
validate_serializer(ChangeUserProfileSeralizer)
def put(self):
....
if err:
return self.error("保存失败")
return self.success(UserProfileSerailzier(user_profile).data)
class ProblemAPI(APIView):
def get(self):
return self.success(self.paginate(request, Problem.objects.all(), ProblemSerializer)))
CSRF 和 DRF 没关系,是 Django 的验证,token 也可以在 HTTP 头中传递