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

相关推荐
Csvn12 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
cch891813 小时前
Python主流框架全解析
开发语言·python
sg_knight13 小时前
设计模式实战:状态模式(State)
python·ui·设计模式·状态模式·state
好运的阿财13 小时前
process 工具与子agent管理机制详解
网络·人工智能·python·程序人生·ai编程
张張40813 小时前
(域格)环境搭建和编译
c语言·开发语言·python·ai
weixin_4235339914 小时前
【Windows11离线安装anaconda、python、vscode】
开发语言·vscode·python
Ricky111zzz14 小时前
leetcode学python记录1
python·算法·leetcode·职场和发展
小白学大数据14 小时前
Selenium+Python 爬虫:动态加载头条问答爬取
爬虫·python·selenium
Hui Baby14 小时前
springboot读取配置文件
后端·python·flask
阿Y加油吧14 小时前
回溯法经典难题:N 皇后问题 深度解析 + 二分查找入门(搜索插入位置)
开发语言·python