用户收货地址管理后端实现

在用户模块中添加用户收货地址信息

class Address(models.Model):user=models.ForeignKey(User,on_delete=models.CASCADE,related_name='addresses',verbose_name='user')receiver=models.CharField(max_length=20,verbose_name='receiverinfo')province =models.ForeignKey('areas.Areas',on_delete=models.PROTECT,related_name='province_addresses',verbose_name='province')city = models.ForeignKey('areas.Areas', on_delete=models.PROTECT, related_name='city_addresses',verbose_name='city')district = models.ForeignKey('areas.Areas', on_delete=models.PROTECT, related_name='district_addresses',verbose_name='district')detail_address=models.CharField(max_length=50,verbose_name='detailaddress')zipcode =models.CharField(max_length=6,verbose_name='zipcode')tel=models.CharField(max_length=11,verbose_name='phonenum')is_delete=models.BooleanField(default=False,verbose_name='check_if_address_is_delete_or_not')class Meta:db_table='shanghui_user_address'verbose_name='User_address'verbose_name_plural=verbose_name

这是完成用户地址管理的必要字段,这部分的逻辑并不复杂,就是把address表和user表和areas表联系起来。

view和serializer模块中实现增删改查的逻辑

view视图

from rest_framework.viewsets import ModelViewSet
class AddressViewSet(ModelViewSet):serializer_class = serializers.AddressSerializerpermission_classes = [IsAuthenticated]def get_queryset(self):print('inner')print(self.request.user.addresses.filter(is_delete=False))print(self.request.user)return self.request.user.addresses.filter(is_delete=False)# 获取token中包含的user字段def list(self,request):# 使用view函数内的get_queryset方法,这里只是需要把取到的字段实例化使用query_set=self.get_queryset()print(self.request.user)print(query_set)print(self.get_serializer(query_set,many=True))# 获取之前指定的序列化器,主要是指定字段输出serializer_current=self.get_serializer(query_set,many=True)# 返回一个响应return Response({'address':serializer_current.data})def update(self, request, *args, **kwargs):# 将获取到的address实例化,这里很多部分都由内置函数实现了,我们get_queryset方法已经指定了这个视图的用户字段,内置函数实现了查找updata需要的特定字段。这里实例化来实现后面的某个值的保存操作obj=self.get_object()obj.is_delete=Trueobj.save()return Response('Okay')

serializer

class AddressSerializer(serializers.ModelSerializer):指定需要字段的属性province = serializers.StringRelatedField(read_only=True)city = serializers.StringRelatedField(read_only=True)district = serializers.StringRelatedField(read_only=True)province_id = serializers.IntegerField(required=True)city_id = serializers.IntegerField(required=True)district_id = serializers.IntegerField(required=True)class Meta:model=models.Address不显示user和is_deleteexclude=('user','is_delete')在serializer中实现create方法,当然也可以重写视图的create方法实现def create(self, validated_data):print('###################')print(self.context['request'].user)获取context内容,我会在模拟的时候给出这个内容validated_data['user']=self.context['request'].user将验证后的,这里是没验证直接就把数据存进去了return super().create(validated_data)

urls中注册视图

router=DefaultRouter()
router.register(r'addresses',views.AddressViewSet,base_name='addresses')
urlpatterns +=router.urls

在urls中添加以下字段注册视图

POSTMAN模拟

由于这里前端部分相当复杂,而且现在做的这个项目和已写的逻辑并不是完全相符,所以我会在之后的博客中具体介绍这个部分,现在我们先使用POSTMAN来模拟前端发回的请求

发送带JWT的请求

由于上面的方法是带IsAuthenticated认证方法认证的,所以我们需要在发送请求的时候带上我们的JWT
看过之前博文的读者应该知道JWT都是包含在request header里面发送的,结构是这样

我们现在就模拟这个来写就可以了

就是选到Headers这个选项中添加Authorization这个键值,和上面的完全匹配就可以了
至于复制这个JWT,你可以在console中复制,当然也可以在网页上写一个空的div然后在JS中填充一下JWT,比如这样

这样就可以获得到你登录以后生成的token了。

POST请求生成一个收货地址

在body中添加form表单,并且发送到后端url地址

前面视图写的逻辑这里会返回address里的东西,如下图所示

回到数据库就可以查询到插入的数据了

get方法得到已有的地址信息


结果如图所示,但是这里我加了一个is_delete字段来检测用户是否删除了这个字段,如果用户删除了,我就给这个字段加一个is_delete=True,然后用这个属性来判断是否输出这个字段。

updata删除收货地址

注意这里我们需要完成内置的get_object()方法,需要给后端传一个primary_key。
这个Key可以包含在URL中发送,即http://127.0.0.1:8000/addresses/1/会让后端找到id为1的地址字段

直接发送PUT请求就可以了,返回Okay是我自己自定义的Response,查询数据库可以看见is_delete属性已经变成1了(前面创建数据库时这个字段默认为0)

用户收货地址管理后端实现相关推荐

  1. 微信小程序获取用户收货地址 完整代码

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 获取用户收货地址需要用户点击授权,所以有两种情况,确认授权.取消授权. 情况一,用户第一次访问用户地址授权,并 ...

  2. 微信小程序获取用户收货地址与指纹验证接口(安卓和iphone)

    @toc 1.获取用户收货地址接口wx.chooseAddress()   wx.chooseAddress(Object object)获取用户收货地址,此接口调用的是微信的收货地址.微信收货地址不 ...

  3. Android中收货地址管理Demo

    Android 收货地址管理,城市选择为省市区三级联动 最近公司在做一个电商平台,这里展示的是一个收货地址管理的功能,实现了省市区三级联动的集成,本Demo得力于网络提供的三级联动案例,特此感谢提供者 ...

  4. 商品属性对应表,商品相册表,用户表,用户收货地址表,地区表,购物车表,送货方式表,订单表,订单明细表的数据库设计

    商品的属性 通用属性: 名称 价格 图片 存放goods表 扩展属性,也叫规格参数,不同类型的商品其规格参数是不一样的,服装有尺码,颜色,材料等,手机有分辨率,内存,存储,摄像头,书籍有作者,出版社 ...

  5. uniapp开发微信小程序如何调取自带的地址管理 获取用户收货地址

    handleChoiceAddress(){let that = this// 1 获取权限状态wx.getSetting({success:(result)=>{//2 获取权限状态 当属性名 ...

  6. 微信小程序获取用户收货地址列表wx.chooseAddress

    微信官方的说明,直接调用即可,但是由于该微信弹框如果拒绝,之后再不会弹出提示,而恰好wx.openSetting(),可以调起授权设置界面,显示用户已经调用过的微信授权,所以我们需要饶一下小弯路,但是 ...

  7. 小程序用户收货地址修改

    页面使用的是weui的组件.主要实现的思路: 1.从地址管理页跳转过来,在onload里面将传过来的参数address获取后,渲染到前台页面:同时将address数据缓存到本地: 2.修改地址后提交, ...

  8. 用户收货地址h5页面_如何实现H5可视化编辑器的实时预览和真机扫码预览功能...

    前言所见即所得的设计理念在WEB IDE领域里一直是备受瞩目的功能亮点, 也能极大的提高 web coder的编程体验和编程效率. 笔者接下来就将对H5可视化编辑器的实时预览和真机扫码预览功能做一次方 ...

  9. 用户收货地址h5页面_如何实现H5可视化编辑器的实时预览和真机扫码预览功能?...

    前言 所见即所得的设计理念在WEB IDE领域里一直是备受瞩目的功能亮点, 也能极大的提高 web coder的编程体验和编程效率. 笔者接下来就将对H5可视化编辑器的实时预览和真机扫码预览功能做一次 ...

  10. 电商项目—收货地址管理模块开发

    功能介绍:添加地址.删除地址.更新地址.地址列表.地址分页.地址详情 学习目标: spingmvc数据绑定中兑现给绑定 mybatis自动生成主键.配置和使用 如何避免横向越权漏洞的巩固 接口设计: ...

最新文章

  1. 借鉴人类,跨越模态 | NLP和预训练模型未来的发展之路
  2. Eclipse使用的小细节归档
  3. RESTful_基础知识
  4. tcp协议与粘包现象【转http://www.cnblogs.com/wzd24/archive/2007/12/24/1011932.html】
  5. RegEnumValue枚举注册表值小记
  6. 文件路径转换为数组php,php – 如何将目录结构转换为url数组
  7. 基于函数的二叉树的描述
  8. Linux学习总结(四十四)lnmp之php-fpm相关配置
  9. ftp://hxtech.com
  10. Python 之 变量进阶(理解)
  11. python 录制网易云登陆_Python爬虫教程,爬取网易云的音乐
  12. 容器技术Docker K8s 3 容器技术基础-Docker
  13. Linux自学:常用删除命令(rm)使用方法
  14. matlab截掉空间曲面一部分,用Matlab作空间曲面的切平面及法线图像.ppt
  15. C++通过CMD修改电脑IP地址
  16. 计算机电子表格减法公式,excel表格公式怎么操作
  17. hexo-theme-icarus配置 valine 评论系统
  18. IM即时通讯开发之iOS版微信小视频功能
  19. mysql 时区时间_MySql的时区(serverTimezone)引发的血案
  20. 你真正的了解i++和++i吗?

热门文章

  1. layui表格点击复制到剪切板
  2. hashcat软件的简单实用
  3. 最适合程序员的画图工具?
  4. flash swf文件 网页播放功能方案实现
  5. tinyXml解析XML文件
  6. 怎样在html中加入动态图片背景,怎样在网页中插入透明flash背景 添加透明flash背景方法介绍(图文)...
  7. 计算机网络——网络与互联网
  8. 【游戏 #1】GTA5OL快速上线方法
  9. 支持linux的midi键盘,十款人气MIDI键盘推荐,适合各个阶段的音乐人
  10. iOS 的 APP 如何适应 iPhone 5s/6.6s/6.6sPlus 三种屏幕的尺寸?