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

相关推荐
程序猿炎义22 分钟前
【NVIDIA AIQ】自定义函数实践
人工智能·python·学习
THMAIL1 小时前
深度学习从入门到精通 - BERT与预训练模型:NLP领域的核弹级技术详解
人工智能·python·深度学习·自然语言处理·性能优化·bert
nuclear20112 小时前
Python 实现 Markdown 与 Word 高保真互转(含批量转换)
python·word转markdown·markdown转word·word转md·md转word
山烛2 小时前
深度学习:CNN 模型训练中的学习率调整(基于 PyTorch)
人工智能·pytorch·python·深度学习·cnn·调整学习率
THMAIL2 小时前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
dbdr09012 小时前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
花花无缺2 小时前
python自动化-pytest-用例发现规则和要求
后端·python
YUELEI1183 小时前
langchain 提示模版 PromptTemplate
python·langchain
东方不败之鸭梨的测试笔记3 小时前
LangChain: Models, Prompts 模型和提示词
人工智能·python·langchain