6 功能开发

功能开发

  • 6 功能开发
    • 1.发布
      • 1.1 小程序
      • 1.2 API
      • 1.3 规则
    • 2.restful api回顾
      • 2.1 APIView ( 可以 )
      • 2.2 ListAPIView
        • 2.2.1 用户传递某些值
        • 2.2.2 fields和exclude的区别?
        • 2.2.3 read_only
        • 2.3.4 复杂需求
        • 2.3.5 serializers嵌套
    • 3. 首页展示
        • 扩展:分页的优化
    • 4.详细页面(3点)

6 功能开发

各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料!

1.发布

1.1 小程序

  • 选图片

  • 填内容

  • 提交

    {cover:"https://mini-1251317460.cos.ap-chengdu.myqcloud.com/08a9daei1578736867828.png",content:"小程序开发太简单了",address:"北京市",topic:1,images:["https://mini-1251317460.cos.ap-chengdu.myqcloud.com/08a9daei1578736867828.png","https://mini-1251317460.cos.ap-chengdu.myqcloud.com/08a9daei1578736867828.png"]
    }
    
    {cover:"https://mini-1251317460.cos.ap-chengdu.myqcloud.com/08a9daei1578736867828.png",content:"小程序开发太简单了",address:"北京市",topic:1,images:[{path:"https://mini-1251317460.cos.ap-chengdu.myqcloud.com/08a9daei1578736867828.png",cos_key:"08a9daei1578736867828.pn"},{path:"https://mini-1251317460.cos.ap-chengdu.myqcloud.com/08a9daei1578736867828.png",cos_key:"08a9daei1578736867828.pn"},]
    }
    

1.2 API

from rest_framework.views import APIView
from rest_framework.generics import CreateAPIView
from rest_framework import serializers
from apps.api import models
class NewsDetailModelSerializer(serializers.Serializer):key = serializers.CharField()cos_path = serializers.CharField()class NewsModelSerializer(serializers.ModelSerializer):images = NewsDetailModelSerializer(many=True)class Meta:model = models.Newsfields = "__all__"class NewsView(CreateAPIView):""" 创建动态的API """serializer_class = NewsModelSerializer
class News(models.Model):"""动态"""cover = models.CharField(verbose_name='封面', max_length=128)content = models.CharField(verbose_name='内容', max_length=255)topic = models.ForeignKey(verbose_name='话题', to='Topic', null=True, blank=True)address = models.CharField(verbose_name='位置', max_length=128, null=True, blank=True)user = models.ForeignKey(verbose_name='发布者', to='UserInfo', related_name='news')favor_count = models.PositiveIntegerField(verbose_name='赞数', default=0)viewer_count = models.PositiveIntegerField(verbose_name='浏览数', default=0)comment_count = models.PositiveIntegerField(verbose_name='评论数', default=0)create_date = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
class NewsDetail(models.Model):"""动态详细"""key = models.CharField(verbose_name='腾讯对象存储中的文件名', max_length=128, help_text="用于以后在腾讯对象存储中删除")cos_path = models.CharField(verbose_name='腾讯对象存储中图片路径', max_length=128)news = models.ForeignKey(verbose_name='动态', to='News')

1.3 规则

{k1:v1,k2:v2,k3:{...},k4:[{....}]
}

2.restful api回顾

2.1 APIView ( 可以 )

from rest_framework.response import Response
class UserModelSerializer(serializers.ModelSerializer):class Meta:model = models.UserInfofields = "__all__"class UserView(APIView):def get(self,request,*args,**kwargs):user_list = models.UserInfo.objects.all()ser = UserModelSerializer(instance=user_list,many=True)return Response(ser.data)def post(self,request,*args,**kwargs):ser = UserModelSerializer(data=request.data)if ser.is_valid():# models.UserInfo.objects.create(**ser.validated_data)ser.save(user_id=1)return Response(ser.data)return Response(ser.errors)

2.2 ListAPIView

ListAPIView,CreateAPIView,RetrieveAPIView,UpdateAPIView,DestroyAPIView
class NewTestModelSerializer(serializers.ModelSerializer):class Meta:model = models.Newsfields = "__all__"class NewTestView(CreateAPIView,ListAPIView):serializer_class = NewTestModelSerializerqueryset = models.News.objects.filter(id__gt=4)
2.2.1 用户传递某些值

创建用户时,自己在后台生成一个UID。

class NewTestModelSerializer(serializers.ModelSerializer):class Meta:model = models.Newsfields = "__all__"class NewTestView(CreateAPIView,ListAPIView):serializer_class = NewTestModelSerializerqueryset = models.News.objects.filter(id__gt=4)def perform_create(self, serializer):serializer.save(uid=str(uuid.uuid4()))
2.2.2 fields和exclude的区别?

通过fields和exclude定制页面展示数据。

需求:只显示用户表的id,name,age的数据,其他不显示。

class NewTestModelSerializer(serializers.ModelSerializer):class Meta:model = models.News# fields = ["id","name",'age']# fields = "__all__"exclude = ['gender']class NewTestView(ListAPIView):serializer_class = NewTestModelSerializerqueryset = models.User.objects.all()[{id:1,name:'xxx',age:18},{id:1,name:'xxx',age:11},{id:1,name:'xxx',age:99},
]

需求:数据库有5个字段,显示7个字段。

class NewTestModelSerializer(serializers.ModelSerializer):xx = serializers.CharField(source='id')x1 = serializers.SerializerMethodField()class Meta:model = models.News# fields = "__all__"# fields = ['id','name','age','gender','phone','xx','x1']exclude = ['id','name']def get_x1(self,obj):return obj.idclass NewTestView(ListAPIView):serializer_class = NewTestModelSerializerqueryset = models.User.objects.all()[{id:1,name:'xxx',age:18...   xx:1,x1:1},{id:2,name:'xxx',age:11...   xx:2,x1:2},{id:3,name:'xxx',age:99,     xx:3,x1:3},
]
2.2.3 read_only

添加时不要,查看时候需要。

需求:编写两个接口 添加(3字段)、获取列表(5个字段)

class NewTestModelSerializer(serializers.ModelSerializer):# phone = serializers.CharField(source='phone',read_only=True)# email = serializers.CharField(source='email',read_only=True)class Meta:model = models.Newsfields = "__all__"read_only_fields = ['phone','email',]class NewTestView(CreateAPIView, ListAPIView):serializer_class = NewTestModelSerializerqueryset = models.User.objects.all()添加:{name:'xx',age:'19',gender:1}
获取:[{name:'xx',age:'xx',gender:'',phone:'xx',email:xxx}]
2.3.4 复杂需求

添加时用一个serializers、列表时用一个serializers

class NewTestModelSerializer1(serializers.ModelSerializer):class Meta:model = models.Newsfields = "__all__"class NewTestModelSerializer2(serializers.ModelSerializer):class Meta:model = models.Newsfields = "__all__"class NewTestView(CreateAPIView, ListAPIView):queryset = models.User.objects.all()def get_serializer_class(self):if self.request.method == 'POST':return NewTestModelSerializer1if self.request.method == 'GET':return NewTestModelSerializer2
2.3.5 serializers嵌套
class CreateNewsTopicModelSerializer(serializers.Serializer):key = serializers.CharField()cos_path = serializers.CharField()class CreateNewsModelSerializer(serializers.ModelSerializer):imageList = CreateNewsTopicModelSerializer(many=True)class Meta:model = models.Newsexclude = ['user', 'viewer_count', 'comment_count',"favor_count"]def create(self, validated_data):# 把imageList切走image_list = validated_data.pop('imageList')# 创建New表中的数据news_object = models.News.objects.create(**validated_data)data_list = models.NewsDetail.objects.bulk_create([models.NewsDetail(**info, news=news_object) for info in image_list])news_object.imageList = data_listif news_object.topic:news_object.topic.count += 1news_object.save()return news_objectclass NewsView(CreateAPIView):"""发布动态"""serializer_class = CreateNewsModelSerializerdef perform_create(self, serializer):# 只能保存:News表中的数据()# 调用serializer对象的save(先调用create)new_object = serializer.save(user_id=1)return new_object

3. 首页展示

  • 小程序
    • 初始化
    • 下拉刷新
    • 上翻页
    • 瀑布流
  • 后端API
    • APIView
    • ListAPIView
      • filter
      • pagination
扩展:分页的优化
记录最大值和最小值,防止切片全部数据扫描的问题。

4.详细页面(3点)

  • 写脚本构造数据
  • 最近的访客
  • 一级评论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/621798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把项目转换为md知识库,提供给gpts使用

把项目转换为md知识库,提供给gpts使用 import osimport chardetproject_path # 项目目录路径 project_name # 项目名称# 定义全局字典,映射文件后缀名到Markdown代码块的语言 language_mapping {.java: java,.py: python,.js: javascript,.html: html,…

polar CTF CB链

一、题目 二、解答 1、通过jar包,可以看到/user路由下有反序列化操作 看到存在commons-beanutils依赖且版本为1.9.2,可利用CB链Getshell。 使用ysoserial项目中的CommonsBeanutils1链写一个POC,注意确保ysoserial项目中的pom.xml中的comm…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第一天-socket编程(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式培训笔记,嵌入式硬件,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机领域.https://blog.csdn.net/weixin_3980490…

8.1 Centos安装部署Redis

文章目录 前言一、下载Redis二、编译Redis三、配置redis.conf四、启动Redis服务端五、启动Redis客户端测试前言 本文将手把手演示在CentOS7上安装部署Redis。 一、下载Redis 可以使用wget命令进行下载,这里下载到/app目录 wget http://download.redis.io/releases/redis-5.…

Codeforces Round 908 (Div. 2) C. Anonymous Informant (思维题)

题目链接 思路: 考虑到 k 的范围很大, 肯定不能进行模拟。 通过观察以及题目的条件, a[i] i 时是定点, 并循环左移 i 次, 则左移后, 数组的最后一位即为该定点, 且通过这个定点可以知道此定点未左移时, 数组的第一个数是什么, 也就可以知道当时数组的最后一个数是什么, 即又找…

webserver面试

1 难点 1.1 网络框架的选取 常见的有reactor和proactor,在linux中,异步io不完善,所以很多项目都采用reactor模式。我又参考了开源的项目,最终选择使用同步io模拟异步的模式。 1.2 RAII 参考开源项目,资源获取即初始化&#xf…

Centos安装Datax

Centos7安装DataX 一、DataX简介二、DataX的数据源支持三、安装DataX1、下载DataX2、解压3、检验是否安装成功4、使用 四、实践案例1、环境信息2、编写同步的配置文件(user_info.json)3、执行同步4、验证同步结果 一、DataX简介 DataX 是阿里云 DataWorks数据集成 的开源版本&a…

【Unity】空引用处理方法总结

在 Unity 中,空处理(Null Handling)指的是在处理对象引用时,考虑到可能为空(null)的情况,并采取适当的措施来避免潜在的错误或异常。下面是一些处理空引用的常见方法: 空引用检查&am…

RocketMQ源码阅读-Message消息存储

RocketMQ源码阅读-Message消息存储 1. CommitLog的作用2. CommitLog 存储消息3. 时序图4. 小结 在Broker消息接收一篇中,分析到Broker接收到消息,最终会调用CommitLong#putMessage方法存储消息。 本篇来分析CommitLong#putMessage存储消息的流程。 1. C…

自编C++题目——战争

预估难度 困难 题目描述 国与国以河为界,有一天他们两国发生了战争,在边疆的战士开始了厮杀。小明是一个参谋,他也知道两国的兵都能打个人,所以他想让你帮忙安排布置兵,以击杀所有国的兵。 打仗规则 只能打在同一…

Java-集合-FAQ-List/Set/Map区别

1 需求 2 接口 3 示例 4 参考资料 JAVA学习-List&#xff0c;Set&#xff0c;Map三者的区别_list<list<integer>>和map区别-CSDN博客 Java集合-HashSet的使用及与LinkedHashSet、TreeSet的对比_linkedhashset和treeset的区别-CSDN博客 java中Map有哪些实现类_ma…

鸿蒙应用开发尝鲜:初识HarmonyOS

初识HarmonyOS 来源:华为官方网站 : https://developer.huawei.com/ 相信大家对鸿蒙应用开发也不在陌生,很多身处互联网行业或者不了解的人们现在也一定都听说过华为鸿蒙.这里我将不再说废话,直接步入正题 鸿蒙应用开发语言 HarmonyOS应用开发采用的是ArkTS语言,ArkTS是在Typ…

高校站群内容管理系统开发语言各有优势

站群管理系统开发可以选择多种编程语言&#xff0c;具体选择哪种语言最好需要考虑多个因素&#xff0c;包括开发团队的技术栈、项目需求、性能要求、安全性等。下面列举一些常见的编程语言及其适用场景&#xff1a; PHP&#xff1a;PHP是一种广泛使用的服务器端脚本语言&#…

数据结构:堆和堆排序

数据结构&#xff1a;堆和堆排序 文章目录 数据结构&#xff1a;堆和堆排序1.二叉树的存储结构1.顺序结构2.链式结构 2.堆3.堆的实现4.堆排序&#xff08;选择排序中的一类&#xff09;1. 基本思想2.代码实现 1.二叉树的存储结构 1.顺序结构 顺序结构存储就是使用数组来表示一…

【数据结构 | 直接插入排序】

直接插入排序 基本思路直接插入排序SelectSort 基本思路 扑克牌是我们几乎每个人都可能玩过的游戏最基本的扑克玩法都是—边模牌,— 边理牌。加入我们拿到如图这样的扑克牌&#xff1a; 我们会按照如下理牌&#xff1a; 将3和4移动至5的左侧&#xff0c;再将2移动到最左侧&a…

按键开关机的锂电池充放电解决方案

一、产品概述 TP4562 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理SOC&#xff0c;为锂电池的充放电提供完整的单芯片电源解决方案。 TP4562 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块、…

使用Spark操作Hudi表详细教程

Hudi Spark使用 本篇为大家带来通过Spark shell和Spark SQL操作Hudi表的方式。 Hudi表还可以通过Spark ThriftServer操作。 软件准备 Scala 2.12Flink 1.15Spark 3.3Hudi 0.13.1 Hudi编译的时候会遇到依赖下载缓慢的情况。需要换用国内源。修改settings.xml文件&#xff0c…

java常见面试题:如何使用Java进行性能调优和内存优化?

Java性能调优和内存优化是一个涉及多个方面的复杂主题。以下是一些建议和步骤&#xff0c;可以帮助你提高Java应用程序的性能和内存效率&#xff1a; 性能分析&#xff1a; 使用性能分析工具&#xff08;如VisualVM, JProfiler, YourKit等&#xff09;来监控和分析应用程序的运…

Pandas实战100例 | 案例 44: 添加新列

案例 44: 添加新列 知识点讲解 在数据分析过程中&#xff0c;经常需要基于现有数据计算新的数据列。Pandas 允许你轻松地向 DataFrame 添加新列&#xff0c;并基于现有列进行计算。 添加新列: 直接通过赋值的方式可以向 DataFrame 添加新列。新列的值可以是基于现有列的计算…

[NSSCTF Round#16 Basic]RCE但是没有完全RCE

[NSSCTF Round#16 Basic]RCE但是没有完全RCE 第一关 <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[md…