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,那么他们两个 ...
随机推荐
- EOS require_auth函数
action的结构 要说清楚这个方法的含义和用法,咱们需要从action的结构说起.详见eoslib.hpp中的action类,这里把它的结构简化表示成下面这样: * struct action { ...
- index row size 2720 exceeds maximum 2712 for index "xxx" ,Values larger than 1/3 of a buffer page cannot be indexed.
记录一个bug情况: 我有个表NewTable,复合主键(slaveid,resid,owner) CREATE TABLE "public"."NewTable&quo ...
- how-does-mysql-replication-really-work/ what-causes-replication-lag
https://www.cnblogs.com/kevingrace/p/6274073.html https://www.cnblogs.com/kevingrace/p/6261091.html ...
- Spring cloud微服务安全实战-7-8ELK+SpringBoot环境搭建
采集不可聚合的离散的.日志信息的e ELK是三个系统的简称 LogStash:用来做日志的收集.过滤.格式转换 Kibana:和普罗米修斯的grafana一个意思.主要用来展示数据. 用docker来 ...
- 人工智能新编程语言-Gen
MIT 的一个研究小组正努力让初学者更容易入门人工智能,同时也帮助专家进一步推进这个领域的发展. 在 PLDI 大会(Programming Language Design and Implement ...
- docker 删除含有指定字符的container
docker container ls -a|grep 指定字符 | awk '{print $1}'| xargs -I{} docker rm {}
- C# .NET 支付宝IOT小程序AES密钥解密
实际测试 KEY 是 16个 byte,byte[] byteKEY = System.Convert.FromBase64String(key); 注意:是Convert.FromBase6 ...
- pcl使用入门
最近在学习pcl,C++早就忘记了,所以踩了好些坑 不过终于通过了,特此记录下来 环境:win7+pcl1.81+vs2015 1.安装pcl1.81 下载PCL-1.8.1-AllInOne-msv ...
- mysql杂项
取数据库某个表中的所有的字段 select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_nam ...
- linux下RAR和ZIP安装和使用
服务器没装rar,对于上传是压缩的文件来说,是个很大的问题. 源码安装rar: 1. 下载: wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar ...