前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >(项目)生鲜超市(八)

(项目)生鲜超市(八)

作者头像
py3study
发布于 2020-01-20 03:34:20
发布于 2020-01-20 03:34:20
70600
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

九、个人中心

1、drf的api文档生成

  之前配置过文档的url:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 path('docs',include_docs_urls(title='倍思乐接口文档')),

  然后访问该接口就会自动生成接口文档:

  可以在该文档中做交互和测试,文档可以生成js,shell和python代码段,可以拿来直接使用。

  添加注释,在每个接口的注释中按照ViewSet的格式进行添加注释,比如GoodsListViewSet:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 class GoodsListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
2     """
3     list:
4         商品列表,分页,搜索,过滤,排序
5     retrieve:
6         获取商品详情
7     """

  字段的注释有三种添加方式,model的字段中加,serializer的字段加,filter的字段加。

2、个人信息修改

  首先在users/serialziers.py中添加用户详细信息的序列化字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 class UserDetailSerializer(serializers.ModelSerializer):
2     class Meta:
3         model = User
4         fields = ("name", "gender", "birthday", "email", "mobile")

  在个人中心中,想要获取个人信息,只需要在UserViewSet中继承RetrieveModelMixin类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class UserViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
 2     """用户"""
 3  5     queryset = User.objects.all()
 6 
 7     def create(self, request, *args, **kwargs):
 8         serializer = self.get_serializer(data=request.data)
 9         serializer.is_valid(raise_exception=True)
10 
11         user = self.perform_create(serializer)
12         re_dict = serializer.data
13         payload = jwt_payload_handler(user)
14         re_dict["token"] = jwt_encode_handler(payload)
15         re_dict["name"] = user.name if user.name else user.username
16 
17         headers = self.get_success_headers(serializer.data)
18         return Response(re_dict, status=status.HTTP_201_CREATED, headers=headers)
19 
20     def perform_create(self, serializer):
21         return serializer.save()

  现在就可以从数据库中获取用户的数据了:

  想要修改个人资料,只需要在UserViewSet接口继承UpdateModelMixin即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class UserViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
 2     """用户"""
 3 
 4     # serializer_class = UserRegSerializer
 5     queryset = User.objects.all()
 6     authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
 7 
 8     def create(self, request, *args, **kwargs):
 9         serializer = self.get_serializer(data=request.data)
10         serializer.is_valid(raise_exception=True)
11 
12         user = self.perform_create(serializer)
13         re_dict = serializer.data
14         payload = jwt_payload_handler(user)
15         re_dict["token"] = jwt_encode_handler(payload)
16         re_dict["name"] = user.name if user.name else user.username
17 
18         headers = self.get_success_headers(serializer.data)
19         return Response(re_dict, status=status.HTTP_201_CREATED, headers=headers)
20 
21     # 动态获取权限,注册的时候不应该有权限限制,在获取用户详情的时候,需要有权限登录
22     def get_permissions(self):
23         if self.action == 'retrieve':
24             return [permissions.IsAuthenticated()]
25         elif self.action == 'create':
26             return []
27         return []
28 
29     # 动态选择序列化
30     def get_serializer_class(self):
31         if self.action == "retrieve":
32             return UserDetailSerializer
33         elif self.action == "create":
34             return UserRegSerializer
35         return UserDetailSerializer
36 
37     # 虽然继承了Retrieve可以获取用户详情,但是并不知道用户的id,所有要重写get_object方法
38     def get_object(self):
39         return self.request.user
40 
41     def perform_create(self, serializer):
42         return serializer.save()

  现在修改个人资料,修改成功:

3、用户收藏商品详情

  在user_operation/serializers.py中添加用户收藏详情的序列化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 class UserFavDetailSerializer(serializers.ModelSerializer):
2     # 通过商品id获取收藏的商品,需要嵌套商品的序列化
3     goods = GoodsSerializer()
4 
5     class Meta:
6         model = UserFav
7         fields = ("goods", "id")

  在UserFavViewSet接口中动态获取收藏序列化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class UserFavViewSet(mixins.ListModelMixin, mixins.CreateModelMixin, mixins.DestroyModelMixin,
 2                      mixins.RetrieveModelMixin, viewsets.GenericViewSet):
 3     """用户收藏"""
 4 
 5     # permission是权限验证 IsAuthenticated必须登录用户 IsOwnerOrReadOnly必须是当前登录的用户
 6     permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
 7 
 8     # authentication是用户认证
 9     authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
10 
11     # 搜索的字段
12     lookup_field = 'goods_id'
13 
14     # 动态选择serializer
15     def get_serializer_class(self):
16         if self.action == "list":
17             return UserFavDetailSerializer
18         elif self.action == "create":
19             return UserFavSerializer
20         return UserFavSerializer
21 
22     # 只能查看当前登录用户的收藏,不会获取所有用户的收藏
23     def get_queryset(self):
24         return UserFav.objects.filter(user=self.request.user)

  可以在个人中心我的收藏看到收藏的商品及商品详情,还可以删除收藏。

 4、用户留言功能

  在serializers.py中添加用户留言的序列化字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class LeavingMessageSerializer(serializers.ModelSerializer):
 2     user = serializers.HiddenField(
 3         default=serializers.CurrentUserDefault()
 4     )
 5     # read_only:只返回,post时候可以不用提交
 6     add_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M')
 7 
 8     class Meta:
 9         model = UserLeavingMessage
10         fields = ("user", "message_type", "subject", "message", "file", "id", "add_time")

  然后在views.py中编写用户留言的接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class LeavingMessageViewSet(mixins.ListModelMixin, mixins.DestroyModelMixin, mixins.CreateModelMixin,
 2                             viewsets.GenericViewSet):
 3     """
 4     list:
 5         获取用户留言
 6     create:
 7         添加留言
 8     delete:
 9         删除留言功能
10     """
11 
12     permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
13     authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
14     serializer_class = LeavingMessageSerializer
15 
16     # 获取自己的留言
17     def get_queryset(self):
18         return UserLeavingMessage.objects.filter(user=self.request.user)

  注册url:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 router.register(r'messages', LeavingMessageViewSet, base_name='messages')  # 用户留言

5、用户收货地址

  在serializers.py中对收货地址所需的字段进行序列化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 class AddressSerializer(serializers.ModelSerializer):
2     user = serializers.HiddenField(
3         default=serializers.CurrentUserDefault()
4     )
5     add_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M')
6 
7     class Meta:
8         model = UserAddress
9         fields = ("id", "user", "province", "city", "district", "address", "signer_name", "add_time", "signer_mobile")

  然后在views.py中编写收货地址的接口,这里直接继承ModelViewSet即可,它将增删改查全部集中在了一起:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 class AddressViewSet(viewsets.ModelViewSet):
 2     """
 3     收货地址管理
 4     list:
 5         获取收货地址
 6     create:
 7         添加收货地址
 8     update:
 9         更新收货地址
10     delete:
11         删除收货地址
12     """
13 
14     permission_classes = (IsAuthenticated, IsOwnerOrReadOnly)
15     authentication_classes = (JSONWebTokenAuthentication, SessionAuthentication)
16     serializer_class = AddressSerializer
17 
18     def get_queryset(self):
19         return UserAddress.objects.filter(user=self.request.user)

  注册url:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 router.register(r'address',AddressViewSet , base_name="address")  # 收货地址
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
五类受自然启发的AI算法
摘要:本文主要讲解了受自然启发的五类AI算法以及各自的实际用例:神经网络、遗传算法、群集集体智慧、强化学习、人体免疫。 搜索/寻路算法 搜索算法本质上是一个程序,旨在找到到达目标的最佳或最短路径。例如,旅行商问题(TSP)就是一个典型的搜索优化问题:给出城市列表以及城市之间的距离,寻找可以遍历每个城市,并花费最少的时间和开支的最佳路线。送货卡车就是这个问题的一个实际应用,假设在伦敦有100个人提交了网络订单,所有箱子都装进了一个货车里, 现在快递公司(比方说DPD)必须计算出最有效的路线(平衡距离/所花
企鹅号小编
2018/02/02
1.2K0
五类受自然启发的AI算法
入门 | 从遗传算法到强化学习,一文介绍五大生物启发式学习算法
选自Medium 作者:Luke James 机器之心编译 参与:黄小天、路雪 本文是作者献上的一部「野外纪录片」,介绍了五个直接受大自然启发而产生的人工智能算法:人工神经网络、遗传算法、集群智能、强
机器之心
2018/05/10
3.3K0
人工智能:智能优化算法
优化问题是指在满足一定条件下,在众多方案或参数值中寻找最优方案或参数值,以使得某个或多个功能指标达到最优,或使系统的某些性能指标达到最大值或最小值。优化问题广泛地存在于信号处理、图像处理、生产调度、任务分配、模式识别、自动控制和机械设计等众多领域。优化方法是一种以数学为基础,用于求解各种优化问题的应用技术。各种优化方法在上述领域得到了广泛应用,并且已经产生了巨大的经济效益和社会效益。实践证明,通过优化方法,能够提高系统效率,降低能耗,合理地利用资源,并且随着处理对象规模的增加,这种效果也会更加明显。 在电子、通信、计算机、自动化、机器人、经济学和管理学等众多学科中,不断地出现了许多复杂的组合优化问题。面对这些大型的优化问题,传统的优化方法(如牛顿法、单纯形法等)需要遍历整个搜索空间,无法在短时间内完成搜索,且容易产生搜索的“组合爆炸”。例如,许多工程优化问题,往往需要在复杂而庞大的搜索空间中寻找最优解或者准最优解。鉴于实际工程问题的复杂性、非线性、约束性以及建模困难等诸多特点,寻求高效的优化算法已成为相关学科的主要研究内容之一。 受到人类智能、生物群体社会性或自然现象规律的启发,人们发明了很多智能优化算法来解决上述复杂优化问题,主要包括:模仿自然界生物进化机制的遗传算法;通过群体内个体间的合作与竞争来优化搜索的差分进化算法;模拟生物免疫系统学习和认知功能的免疫算法;模拟蚂蚁集体寻径行为的蚁群算法;模拟鸟群和鱼群群体行为的粒子群算法;源于固体物质退火过程的模拟退火算法;模拟人类智力记忆过程的禁忌搜索算法;模拟动物神经网络行为特征的神经网络算法;等等。这些算法有个共同点,即都是通过模拟或揭示某些自然界的现象和过程或生物群体的智能行为而得到发展;在优化领域称它们为智能优化算法,它们具有简单、通用、便于并行处理等特点。 **
全栈程序员站长
2022/08/31
1.5K0
独家 | 一文读懂优化算法
一、前言 模拟退火、遗传算法、禁忌搜索、神经网络等在解决全局最优解的问题上有着独到的优点,其中共同特点就是模拟了自然过程。模拟退火思路源于物理学中固体物质的退火过程,遗传算法借鉴了自然界优胜劣汰的进化思想,禁忌搜索模拟了人类有记忆过程的智力过程,神经网络更是直接模拟了人脑。它们之间的联系也非常紧密,比如模拟退火和遗传算法为神经网络提供更优良的学习算法提供了思路。把它们有机地综合在一起,取长补短,性能将更加优良。 这几种智能算法有别于一般的按照图灵机进行精确计算的程序,尤其是人工神经网络,是对计算机模
数据派THU
2018/01/30
3.6K0
独家 | 一文读懂优化算法
生物分子序列的人工智能设计
合成生物学研究本着师法自然、改造自然及超越自然的理念,其核心是通过人工方式将基因元件优化改造和重新组合,以得到满足需要的人工生物系统。获取性能优异的生物元件是构建和控制人工生物系统的基础。
智药邦
2022/03/04
9410
生物分子序列的人工智能设计
数学建模--智能算法之免疫算法
免疫算法是一种基于生物免疫系统机制的智能优化算法,广泛应用于解决复杂优化问题、模式识别和数据挖掘等领域。它模仿了人体免疫系统的自适应性、自组织性、多样性和免疫记忆等特性,通过模拟这些机制来处理信息和寻找最优解。
用户11315985
2024/10/16
3050
数学建模--智能算法之免疫算法
学界 | 启发式搜索:华为提出通用人工智能工程方法
选自arXiv 作者:Zengkun Li 机器之心编译 参与:刘晓坤、李泽南 鉴于当前认知神经科学和人工智能工程所遇到的困难,华为 2012 实验室的研究人员提出了一种新的通用人工智能工程方法:使用学习算法的稳定性作为在特定场景中的适合度函数的启发式搜索方法。论文将其方法与人工设计方法、仿生学方法进行了对比,结果表明该方法更加有望实现通用人工智能,并且和认知神经科学有更好的交互作用。 作者指出虽然可以直接在这篇论文中提出其工程方法,但为了刚好地解释这个方法的必要性和可行性,以及使无相关背景的读者能更好地理
机器之心
2018/05/09
8550
学界 | 启发式搜索:华为提出通用人工智能工程方法
焦李成院士:进化优化与深度学习的思考
作者丨焦李成整理丨维克多‍ 编辑丨青暮 2021年12月17日,西安电子科技大学人工智能学院教授、欧洲科学院外籍院士、IEEE Fellow焦李成受邀参加2021中国计算机大会“下一代演化计算发展趋势”论坛,并做了“进化优化与深度学习的思考”的主旨报告。 在报告中焦李成梳理了“进化”相关的发展渊源与思想起源,指出了当前人工智能的学术缺陷与实际困境,并从类脑的角度给出了解决路径: “神经网络不应该是目前的意义上进行权重调参,它的结构应该具备变化性、可塑性、学习性和动态性;在类脑感知的过程中,脑的奖惩、学习、信
AI科技评论
2022/03/03
5070
路径规划算法
随着机器人技术、智能控制技术、硬件传感器的发展,机器人在工业生产、军事国防以及日常生活等领域得到了广泛的应用。而作为机器人行业的重要研究领域之一,移动机器人行业近年来也到了迅速的发展。移动机器人中的路径规划便是重要的研究方向。移动机器人的路径规划方法主要分为传统的路径规划算法、基于采样的路径规划算法、智能仿生算法。传统的路径规划算法主要有A*算法、Dijkstra算法、D*算法、人工势场法,基于采样的路径规划算法有PRM算法、RRT算法,智能仿生路径规划算法有神经网络算法、蚁群算法、遗传算法等。
六四零
2021/11/12
2.4K0
智能优化算法简介
受人类智能、生物群体社会性或自然现象规律的启发。 主要包括: (1)遗传算法: 模仿自然界生物进化机制 (2)差分进化算法: 通过群体个体间的合作与竞争来优化搜索 (3)免疫算法: 模拟生物免疫系统学习和认知功能 (4)蚁群算法:模拟蚂蚁集体寻径行为 (5)粒子群算法:模拟鸟群和鱼群群体行为 (6)模拟退火算法:源于固体物质退火过程 (7)禁忌搜索算法:模拟人类智力记忆过程 (8)神经网络算法:模拟动物神经网络行为特征
全栈程序员站长
2022/08/25
1.2K0
人工神经网络中的脑启发学习综述
Brain-inspired learning in artificial neural networks: a review
算法进阶
2023/08/28
4150
人工神经网络中的脑启发学习综述
强化学习vs遗传算法-人工智能在模拟领域的应用
强化学习(Reinforcement Learning)和遗传算法(Genetic Algorithm)都是受自然启发的AI方法,它们有何不同?更重要的是,在哪些情况下,其中一种会比另一种更受青睐?”
deephub
2021/08/20
8130
认真聊AI | 群智能算法
受自然界生物界各种各样的规律启迪,人们根据其原理设计了很多求解问题的算法。比如蚂蚁搬家、鸟群觅食、蜜蜂筑巢等等,这些现象不止是生物学家沉迷其中,计算机学家也相当痴迷。
做数据的二号姬
2025/01/13
2850
认真聊AI | 群智能算法
进化算法中的人工免疫系统算法(Artificial Immune System)
人工免疫系统算法(Artificial Immune System,AIS)是一种受到自然免疫系统启发的进化算法。它模拟了生物体免疫系统的特性和行为,通过学习和进化来解决优化和机器学习问题。本文将介绍人工免疫系统算法的基本原理、应用领域以及优势和局限性。
大盘鸡拌面
2023/10/07
9500
Nat. Microbio.l | BacterA I:在没有先验知识的情况下对微生物代谢进行建模
今天为大家介绍的是来自Paul A. Jensen团队的一篇利用强化学探索微生物知识的论文。训练人工智能(AI)系统进行自主实验可以大大提高微生物学的吞吐量;然而,很少有微生物有足够大的数据集来训练这样的系统。在本研究中,作者引入了一种名为BacterAI的自动化科学平台,它可以对微生物代谢进行建模,不需要任何先前知识。BacterAI通过将科学问题转化为与实验室机器人进行的简单游戏来进行学习。该方法将其发现总结为可以被人类科学家解释的逻辑规则。
DrugAI
2023/09/19
3610
Nat. Microbio.l | BacterA I:在没有先验知识的情况下对微生物代谢进行建模
从工厂到生活:算法 × 深度学习,正在改写自动化的底层逻辑
从工业革命时期的机械自动化,到信息时代的智能自动化,人类对自动化技术的追求从未停歇。近年来,随着物联网、大数据、云计算等技术的蓬勃发展,自动化系统的复杂度与智能化程度显著提升。算法与深度学习的深度介入,使得自动化设备不仅能够执行预设指令,更具备自主学习、智能决策的能力。这种变革正在重塑工业制造、交通运输、医疗健康等多个领域的生产与服务模式,成为推动社会经济发展的关键技术引擎。 在工业 4.0 与智能制造的大背景下,自动化设备需要处理海量且复杂的数据,传统的规则驱动型系统已难以满足需求。例如,在汽车生产线中,每分钟需要检测数百个零部件的尺寸与缺陷,人工设定的检测规则无法适应产品型号的快速迭代;而深度学习算法通过对大量图像数据的学习,能够自动识别复杂缺陷模式,将检测准确率提升至 99% 以上。此外,在智能交通领域,城市交通网络产生的动态数据规模庞大,依赖算法对交通流量进行实时预测与优化,才能有效缓解拥堵问题。
羑悻的小杀马特.
2025/05/02
1880
从工厂到生活:算法 × 深度学习,正在改写自动化的底层逻辑
AI综述专栏|神经科学启发的人工智能
在科学研究中,从方法论上来讲,都应先见森林,再见树木。当前,人工智能科技迅猛发展,万木争荣,更应系统梳理脉络。为此,我们特别精选国内外优秀的综述论文,开辟“综述”专栏,敬请关注。
马上科普尚尚
2020/05/14
1.2K0
脑启发的ANN学习机制综述
Brain-inspired learning in artificial neural networks: a review
CreateAMind
2023/09/01
4110
脑启发的ANN学习机制综述
超越强化学习:生命启发的AI
构建自主的(即基于个人需求选择目标)和自适应的(即在不断变化的环境中生存)智能 体一直是人工智能(al)的圣杯。一个活的有机体是这种代理的一个主要例子,提供了 关于适应性自主的重要课程。在这里,我们把重点放在内感受上,这是一个监控体 内环境使其保持在一定范围内的过程,它保证了生物体的生存。为了开发具有内视 知觉的人工智能,我们需要从外部环境中分解代表内部环境的状态变量,并采用内 部环境状态的受生命启发的数学特性。这篇论文提供了一个新的视角,通过将控制 论的遗产与生命理论、强化学习和神经科学的最新进展相结合,内视知觉如何帮助 构建自主和适应的主体。
CreateAMind
2023/11/01
3550
超越强化学习:生命启发的AI
【人工智能 | 认知观与系统类别】从宏观角度看人工智能认知观与系统类别:探索人工智能无垠领域
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)
计算机魔术师
2023/10/02
4010
推荐阅读
相关推荐
五类受自然启发的AI算法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档