DRF 视图初识
from django.shortcuts import render
from rest_framework.generics import ListAPIView,CreateAPIView,UpdateAPIView,RetrieveAPIView,DestroyAPIView
from rest_framework.filters import BaseFilterBackend
from rest_framework import serializers
from rest_framework.pagination import PageNumberPagination
from newapi import models
class ArticleSerializer(serializers.ModelSerializer):
author_name = serializers.CharField(source="author.username",required=False)
class Meta:
model = models.Article
exclude = ['author']
class ArticleDetailSerializer(serializers.ModelSerializer):
# 获取作者名称
author_name = serializers.CharField(source="author.username")
article_content = serializers.SerializerMethodField()
article_comment = serializers.SerializerMethodField()
class Meta:
model = models.Article
# 去除文章简介
exclude = ['summary']
# 获取文章内容
def get_article_content(self,obj):
result = obj.articledetail.content
return result
# 获取评论
def get_article_comment(self,obj):
result = obj.comment_set.all().values('id','content','user__username')
return result
class ArticleFilter(BaseFilterBackend):
"""
查询:根据URL中的cagetory参数查询
"""
def filter_queryset(self, request, queryset, view):
val = request.query_params.get('cagetory')
if val:
return queryset.filter(category = val)
return queryset
class ArticleView(ListAPIView,CreateAPIView):
# queryset对象
queryset = models.Article.objects.all()
# 序列化
serializer_class = ArticleSerializer
# 筛选规则
filter_backends = [ArticleFilter,]
# 分页
pagination_class = PageNumberPagination
def perform_create(self,serializer):
serializer.save(author_id=2)
class ArticleDetailView(UpdateAPIView,RetrieveAPIView,DestroyAPIView):
queryset = models.Article.objects.all()
serializer_class = ArticleDetailSerializer
filter_backends = [ArticleFilter, ]
pagination_class = PageNumberPagination
class PostCommentSerializer(serializers.ModelSerializer):
author_name = serializers.CharField(source="user.username",required=False)
class Meta:
model = models.Comment
exclude = ['user']
class CommentFilter(BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
val = request.query_params.get('cagetory')
if val:
return queryset.filter(category = val)
return queryset
class CommentView(CreateAPIView,ListAPIView):
queryset = models.Comment.objects.all()
serializer_class = PostCommentSerializer
filter_backends = [CommentFilter, ]
pagination_class = PageNumberPagination
def perform_create(self,serializer):
serializer.save(user_id=2)
### 重写perform_create方法时,如果save自定义的字段数据,需要在检查数据时用exclude排除掉相应字段
DRF 视图初识的更多相关文章
- 使用DRF视图集时自定义action方法
在我们用DRF视图集完成了查找全部部门,创建一个新的部门,查找一个部门,修改一个部门,删除一个部门的功能后,views.py的代码是这样子的: class DepartmentViewSet(Mode ...
- 【DRF视图】
目录 开始使用内置视图 请结合[DRF序列化]此文献中的数据文件及序列化文件来阅读如下代码. DRF视图为我们提供了非常简便的方法--内置了增删改查等一系列的操作. 我们只需在url中指定对应的方法, ...
- DRF视图-请求与响应
DRF视图 drf的代码简写除了在数据序列化体现以外,在视图中也是可以的.它在django原有的django.views.View类基础上,drf内部封装了许多子类以便我们使用. Django RES ...
- DRF视图组件
DRF视图组件: CVB模式继承----五层 from django.views import View # Django的View from rest_framework.views import ...
- drf 视图使用及源码分析
前言 drf视图的源码非常的绕,但是实现的功能却非常的神奇. 它能够帮你快速的解决ORM增删改查的重复代码,非常的方便好用. 下面是它源码中的一句话: class ViewSetMixin: &quo ...
- DRF 视图组件
目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ...
- restfull规范、DRF视图和路由
一.restfull规范的简单介绍 1.介绍 REST:表述性状态转移,是一种web交互方案 资源:在web中只要有被引用的必要都是资源 URI: URI 统一资源标识符 URL 统一资源定位符 统一 ...
- drf视图组件、认证组件
视图组件 1.基本视图 url(r'^publish/$', views.PublishView.as_view()), url(r'^publish/(?P<pk>\d+)/$', vi ...
- DRF 视图和路由
Django Rest Feamework 视图和路由 DRF的视图 APIView 我们django中写CBV的时候继承的是View,rest_framework继承的是APIView,那么他们两个 ...
随机推荐
- python虛擬環境和工具
1.命令 pip install virtualenvwrapper-win mkvirtualenv env_xadmin deactivate 退出 pip list pip install m ...
- Python3基础 tuple list转为tuple
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- docker安装并运行rabbitmq
拉取镜像: [mall@VM_0_7_centos ~]$ [sudo] password for mall: : Pulling from library/rabbitmq 5b7339215d1d ...
- Spring cloud微服务安全实战-7-11PinPoint+SpringBoot环境搭建
微服务的最后一个组件, 调用链监控,一个请求进来以后,经过N多个微服务,例如a调用了b.b又调用了c,那么在这个过程中看到,整个的调用的链路,然后每一段调用所耗费的时间,帮你去分析你的系统如果出现瓶颈 ...
- dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法2
在混淆的时候报错了,错误描述大致如下: Could not find a compatible version of ildasm to run on assembly C:\xxx.dll This ...
- Swift编码总结8
1.判断当前控制器是否在显示: // 判断当前控制器是否在显示 func isCurrentViewControllerVisible() -> Bool { return (self.isVi ...
- [LeetCode] 20. Valid Parentheses 合法括号
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...
- Rufus软件
Rufus软件(https://rufus.akeo.ie/)——制作启动盘必备,简易且开源.
- mysql执行计划详解,
一.语法 explain SQL语句 例如: explain ; 二.explain输出解释 +----+-------------+-------+-------+----------------- ...
- Linux下安装pj Navicat121 x64版本
一,先在官网下载https://www.navicat.com.cn/download/navicat-premium Linux 64位版本(说是Linux,其实就是Windows+Wine版本)[ ...