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

相关推荐
做程序员的第一天18 分钟前
在PyTorch中,钩子(hook)是什么?在神经网络中扮演什么角色?
pytorch·python·深度学习
yyywxk35 分钟前
VSCode 新建 Python 包/模块 Pylance 无法解析
ide·vscode·python
Nerinic38 分钟前
PyTorch基础2
pytorch·python
搏博1 小时前
Python3.9.13与深度学习框架TensorFlow的完整详细安装教程
python·tensorflow
胜天半月子1 小时前
Python | 结合动态加载importlib模块来理解inspect模块的使用
python·importlib·inspect
Jurio.1 小时前
Conda 管理项目环境
人工智能·python·深度学习·conda·virtualenv·pip
B站计算机毕业设计超人1 小时前
计算机毕业设计SparkStreaming+Kafka新能源汽车推荐系统 汽车数据分析可视化大屏 新能源汽车推荐系统 汽车爬虫 汽车大数据 机器学习
数据仓库·爬虫·python·数据分析·kafka·数据可视化·推荐算法
Joyner20182 小时前
pytorch训练的双卡,一个显卡占有20GB,另一个卡占有8GB,怎么均衡?
人工智能·pytorch·python
瑞雨溪2 小时前
python中的OS模块的基本使用
开发语言·python
Leuanghing2 小时前
使用Python生成F分布表并导出为Excel文件
开发语言·python·excel·f分布