Django Restframework.2
APIView
-
-
入口函数
-
as_view
-
queryset检测
-
不要直接操作queryset, 直接操作会发生多个请求之间的数据错乱
-
推荐使用 all 或者 get_queryset
-
-
调用父类中的as_view
-
参数检测
-
定义闭包函数
-
记录数据
-
dispatch
-
-
-
dispatch
-
重写方法
-
做了一个Request转换(初始化)
-
之后进行整体初始化
-
格式化后缀
-
内容决策
-
版本决策
-
强制升级
-
推荐升级
-
没有升级
-
-
执行认证
-
检查权限
-
节流,限流
-
-
根据请求方法进行分发
-
如果上述处理过程中出线异常,异常并不会直接被抛,异常会被捕获
-
提供异常策略
-
最终对响应进行统一处理
-
最后返回
generics
-
-
-
APIView
-
-
属性
-
filter_backends
-
lookup_field
-
lookup_url_kwarg
-
pagination_class
-
queryset
-
serializer_class
-
-
方法
-
get_queryset
-
get_object
-
get_serializer
-
get_serializer_class
-
get_serializer_context
-
filter_queryset
-
paginator
-
使用property修饰
-
-
paginate_queryset
-
get_paginated_response
-
-
-
CreateAPIView
-
继承
-
GenericAPIView
-
CreateModelMixin
-
-
方法
-
post
-
create
-
-
-
-
ListAPIView
-
继承
-
GenericAPIView
-
ListModelMixin
-
-
方法
-
get
-
list
-
-
-
-
RetrieveAPIView
-
继承
-
GenericAPIView
-
RetrieveModelMixin
-
-
方法
-
get
-
retrieve
-
-
-
-
DestroyAPIView
-
继承
-
GenericAPIView
-
DestroyModelMixin
-
-
方法
-
delete
-
destroy
-
-
-
-
UpdateAPIView
-
继承
-
GenericAPIView
-
UpdateModelMixin
-
-
方法
-
put
-
update
-
-
patch
-
partial_update
-
-
-
-
ListCreateAPIView
-
继承
-
GenericAPIView
-
ListModelMixin
-
CreateModelMixin
-
-
方法
-
post
-
create
-
-
get
-
list
-
-
-
-
RetrieveUpdateAPIView
-
继承
-
GenericAPIView
-
RetrieveModelMixin
-
UpdateModelMixin
-
-
方法
-
get
-
retrieve
-
-
put
-
update
-
-
patch
-
partial_update
-
-
-
-
RetrieveDestroyAPIView
-
继承
-
GenericAPIView
-
RetrieveModelMixin
-
DestroyModelMixin
-
-
方法
-
get
-
retrieve
-
-
delete
-
destroy
-
-
-
-
RetrieveUpdateDestroyAPIView
-
继承
-
GenericAPIView
-
RetrieveModelMixin
-
UpdateModelMixin
-
DestroyModelMixin
-
-
方法
-
get
-
retrieve
-
-
put
-
update
-
-
patch
-
partial_update
-
-
delete
-
destroy
mixins
-
CreateModelMixin
-
函数
-
create
-
perform_create
-
get_success_headers
-
-
-
ListModelMixin (复数)
-
函数
-
list
-
-
-
RetrieveModelMixin (单数)
-
函数
-
retrieve
-
-
-
UpdateModelMixin (单数)
-
函数
-
-
perform_update
-
partial_update
-
-
-
DestroyModelMixin (单数)
-
函数
-
destroy
-
perform_destroy
用法(简单的注册登陆)
- 创建模型
class User(models.Model): u_name = models.CharField(max_length=32, unique=True) u_password = models.CharField(max_length=256) @classmethod def get_user(cls, u_name): try: user = User.objects.get(u_name=u_name) return user except Exception as e: print(e) def check_password(self, password): return self.u_password == password
- 生成迁移文件
- 创建序列化器
class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ("id", "u_name", "u_password")
- 创建路由
urlpatterns = [ url(r'^users/', views.UsersAPIView.as_view()), ]
- 创建视图类
class UsersAPIView(CreateAPIView): queryset = User.objects.all() serializer_class = UserSerializer def post(self, request, *args, **kwargs): action = request.query_params.get("action") if action == "register": return self.do_register(request, *args, **kwargs) elif action == "login": return self.do_login(request, *args, **kwargs) else: raise APIException(detail="please supply correct action [register, login]") def do_register(self, request, *args, **kwargs): print(type(request)) print(type(self)) return self.create(request, *args, **kwargs) def do_login(self, request, *args, **kwargs): u_name = request.data.get("u_name") u_password = request.data.get("u_password") user = User.get_user(u_name) if not user: raise APIException(detail="用户不存在") if not user.check_password(u_password): raise APIException(detail="密码错误") token = uuid.uuid4().hex # 存token data = { "msg": "ok", "status": HTTP_200_OK, "token": token } return Response(data)