Django视图写法

1.View:Django默认的视图基类,Django的HttpRequeset对象

2.APIView:REST-framework提供的所有视图的基类,继承自Django的View

REST framework的Request对象

Request对象的数据是自动根据前端发送数据的格式进行解析之后的结果。

serializer = BookSerializer(book,many=True) 序列化,获取字段

serializer.data 获取序列化后的数据

serializer = BookSerializer(data=data) 反序列化,传入字段

serializer.is_valid(raise_exception=True) 校验并返回错误

3.GenericAPIView:继承自APIView,增加列表视图和详情视图的通用方法和属性

https://blog.csdn.net/qq_31742423/article/details/83241461

属性:提前将要调用的设置好,方法中直接调用就可以

queryset 设置结果集 ~queryset = BookInfo.objects.all()

serializer_class 设置序列化器 ~serializer_class = BookSerializer

lookup_field 查询指定的对象,默认为'pk' ~lookup_field = 'id'

方法:

get_queryset(self) 返回视图使用的查询集 ~books = self.get_queryset()

get_serializer(self,_args, *_kwargs) 返回序列化器对象 ~serializer = self.get_serializer(book)

get_object(self) 返回详情视图所需的模型类数据对象 ~book = self.get_object()

ListModelMixin 列表,获取全部对象

CreateModelMixin 新增资源

RetrieveModelMixin 索引,获取一个资源

UpdateModelMixin 更新一个资源

DestoryModelMixin 损毁,删除一个资源

调用的时候和GenericAPIView一样放在类的括号里,好像光放置首字母大写也可以

Patch 补丁,局部更新某一属性,user_name,Put方法的补充

4.三级视图(对GenericAPIView和Mixin的直接封装)

第3和4算是一种关系

mixins类,会返回不同的状态码

CreateAPIView 创造

ListAPIView 列表

RetrieveAPIView 检索

DestroyAPIView 损毁

UpdateAPIView 更新

ListCreateAPIView 列表创造

RetrieveUpdateAPIView 检索更新

RetrieveDestroyAPIView 检索删除

RetrieveUpdateDestroyAPIView 检索更新删除

导入封装的模型,通过下面就可以更加简洁

from rest_framework import mixins

class ProjectsView(mixins.ListModelMixin,

mixins.CreateModelMixin,

mixins.RetrieveModelMixin,

mixins.UpdateModelMixin,

mixins.DestroyModelMixin,

GenericAPIView):

增加所需属性

def get(self, request, *args, **kwargs):

return self.list(request, *args, **kwargs)

def post(self, request, *args, **kwargs):

return self.create(request, *args, **kwargs)

5.ViewSet:继承自APIView

router = DefaultRouter() 创建默认的本机地址

router.register(r'booklist',views.BookModelViewset)

会生成两种url

user/ 列表

user/3 详情

urlpatterns += router.urls 将建立好的url放在地址列表中

需要继承viewsets.ViewSet类

类的函数不需要使用get\post\delete等,可以自建其他函数,然后在路由中转

path('user/',view.MyViewSet.as_view({

'get':'list',

}))

https://zhuanlan.zhihu.com/p/72527077

序列化:将数据库的数据模型转化为前端所需要的格式(json等)

反序列化:可以验证传入数据是否规范并保存

反序列化:拿到前端数据->序列化器的data->调用序列化器的is_vaid()方法

校验->调用序列化器的.sava()方法保存

~~~url.py~~~

viewsets

封装drf路由

from rest_framework.routers import DefaultRouter

创建路由器

router=DefaultRouter()

注册路由

router.register(r'user_model_view_set',views.UserModelViewSet)

将生成好的路由放在原路由

urlpatterns+=router.urls

~~~views.py~~~

这里使用的viewset

from rest_framework import viewsets

from rest1.serializers import UserModelViewSetSerializers

ViewSet

class UserModelViewSet(viewsets.ModelViewSet):

queryset = UserInfo.objects.all()

serializer_class = UserModelViewSetSerializers

lookup_field = 'id'

~~~serializers.py~~~

ModelSerializer

class UserModelViewSetSerializers(serializers.ModelSerializer):

定义序列化器

class Meta做为嵌套类,主要目的是给上级类添加一些功能或者标准

class Meta:

指定序列化从那个模型映射字段

model=UserInfo

映射所有字段

fields='all'

填入指定字段

fields = ('user_name', 'password')

除了这个字段

exclude = ('user_name',)

含有外键的数据库,设置depth为整数,通常为1

相关推荐
程序员的世界你不懂1 小时前
Appium+python自动化(八)- 认识Appium- 下章
python·appium·自动化
恸流失2 小时前
DJango项目
后端·python·django
Julyyyyyyyyyyy3 小时前
【软件测试】web自动化:Pycharm+Selenium+Firefox(一)
python·selenium·pycharm·自动化
蓝婷儿4 小时前
6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
开发语言·python·学习
love530love4 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
水银嘻嘻4 小时前
05 APP 自动化- Appium 单点触控& 多点触控
python·appium·自动化
狐凄5 小时前
Python实例题:Python计算二元二次方程组
开发语言·python
烛阴6 小时前
Python枚举类Enum超详细入门与进阶全攻略
前端·python
Mikhail_G7 小时前
Python应用函数调用(二)
大数据·运维·开发语言·python·数据分析
weixin_472339467 小时前
使用Python提取PDF元数据的完整指南
java·python·pdf