Django项目之电商购物商城 -- 创建收货地址

Django项目之电商购物商城 – 创建收货地址

一. 在users中创建新的视图与路由用于创建收货地址

# 设置收货地址
class AddressView(View):def get(self , request):return render(request , "user_center_site.html")
# 设置收货地址path('user_center_site/', views.AddressView.as_view() , name = 'user_center_site')

二. 创建新的app – areas 用于显示省市区等收货地址

1. 创建模型类使用自关联方式关联所有数据

from django.db import modelsclass AreaModles(models.Model):area_name = models.CharField(max_length=20)parent = models.ForeignKey('self',  on_delete=models.SET_NULL , null=True,blank=True,related_name='subs' )class Meta:db_table = 'areas'

三. 创建视图

  1. 在请求页面的时候会首先发送一次请求获取到全国的省份 , 该请求不携带任何参数

    在这里插入图片描述

  2. 当点击省份后, 会获取该省份的所有市 , 在请求过程中会携带市的id , 可以用此来区分不同的请求

    在这里插入图片描述

    在这里插入图片描述

  3. 创建视图用来获取全国的省份数据

    from django.views import View
    from areas.models import AreaModles
    from django.http import JsonResponse
    from utils.response_code import RETCODE# 获取全国城市名称
    class SetAreasView(View):def get(self , request):area_id = request.GET.get('area_id')# 判断是否携带参数if not area_id:province_modle_list = AreaModles.objects.filter(parent_id__isnull=True)province_list = []for province_modle in province_modle_list:province_dict = {'id' : province_modle.id,'name' : province_modle.area_name,}province_list.append(province_dict)print(province_list)return JsonResponse({'code' : RETCODE.OK,'errmsg' : "OK",'province_list' : province_list})else:# 获取到当前选择的省份sub_province = AreaModles.objects.get(id = area_id)print(sub_province.area_name)# 获取当前省份的所有市区sub_area_list = sub_province.subs.all()sub_list = []for sub_area in sub_area_list:sub_area_dict = {'id' : sub_area.id,'name' : sub_area.area_name,}sub_list.append(sub_area_dict)print(sub_list)sub_data = {'id' :sub_province.id,'name' : sub_province.area_name,'subs' : sub_list}return JsonResponse({'code' : RETCODE.OK,'errmsg' : "OK",'sub_data' : sub_data})
    
  4. 对前端进行修改循环遍历获得所有数据

    <div class="form_group"><label>*所在地区:</label><select v-model="form_address.province_id"><option value="0">请选择</option><option :value="province.id" v-for="province in provinces" >[[province.name]]</option></select><select v-model="form_address.city_id"><option value="0">请选择</option><option :value="city.id" v-for="city in cities" >[[city.name]]</option></select><select v-model="form_address.district_id"><option value="0">请选择</option><option :value="district.id" v-for="district in districts" >[[district.name]]</option></select></div>
    
  5. 那么就到此为止了吗 , 是否可以再优化一下?

    当多用户进行设置是不可避免的会对数据库查询造成巨大的压力 , 我们可以将查询到的数据缓存到内存中 , 设置缓存时间

    那么就会大大减少数据库的压力

    from django.shortcuts import render
    from django.views import View
    from areas.models import AreaModles
    from django.http import JsonResponse
    from utils.response_code import RETCODE
    from django.core.cache import cache# 获取全国城市名称
    class SetAreasView(View):def get(self , request):# 从缓存中获取数据province_list = cache.get('province_list')# 判断是否携带参数area_id = request.GET.get('area_id')if not area_id:# 如果数据不存在获取数据if not province_list:province_modle_list = AreaModles.objects.filter(parent_id__isnull=True)province_list = []for province_modle in province_modle_list:province_dict = {'id' : province_modle.id,'name' : province_modle.area_name,}province_list.append(province_dict)cache.set('province_list' , province_list , 3600)"""{'code' : 200,'errmsg' : "OK",'province_list' : [{ 'id' : 1 ,'name' : '北京'},{ 'id' : 2 ,'name' : '上海'},{ 'id' : 3 ,'name' : '南京'},.......}"""return JsonResponse({'code' : RETCODE.OK,'errmsg' : "OK",'province_list' : province_list})else:sub_data = cache.get(f'sub_data_{area_id}')if not sub_data:# 获取到当前选择的省份sub_province = AreaModles.objects.get(id = area_id)# 获取当前省份的所有市区sub_area_list = sub_province.subs.all()sub_list = []for sub_area in sub_area_list:sub_area_dict = {'id' : sub_area.id,'name' : sub_area.area_name,}sub_list.append(sub_area_dict)sub_data = {'id' :sub_province.id,'name' : sub_province.area_name,'subs' : sub_list}cache.set(f'sub_data_{area_id}' , sub_data , 3600)return JsonResponse({'code' : RETCODE.OK,'errmsg' : "OK",'sub_data' : sub_data})

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

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

相关文章

金和OAC6 FileDownLoad 任意文件读取漏洞

文章目录 免责声明漏洞描述漏洞原理影响版本漏洞复现修复建议 免责声明 没有网络安全就没有国家安全&#xff0c;该文章只为学习和交流&#xff0c;利用做违法乱纪的事&#xff0c;与本人无关 漏洞描述 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,…

AI视频教程下载:零代码创建AI智能体、AI Agents和ChatGPT的Gpts

这门课程专注于提示工程的掌握&#xff0c;教你以精确的方式引导GPT&#xff0c;利用它们的生成能力产生卓越的AI驱动结果。一步一步地&#xff0c;你将学会创建多样化的GPT军团——每个都设计来满足特定的专业需求。 从提供个性化职业变更指导的职业教练AI&#xff0c;到以惊…

IDEA切换分支

方法一 1、选择要切换分支的module 2、右键&#xff0c;选择git 3、再点击branches 4、可以看到当前module的本地分支&#xff08;local Branches&#xff09;及远程分支&#xff08;Remote Branches&#xff09;列表。点击你要切换到的分支,Checkout即可。 方法二 1、点击…

MATLAB模拟退火算法、遗传算法、蚁群算法、粒子群算法

概况 模拟退火算法、遗传算法、蚁群算法、粒子群算法等算法&#xff0c;都是属于概率算法&#xff0c;不绝对&#xff0c;不迅速&#xff0c;能用其它方式解决的问题&#xff0c;不要用这些相对复杂的算法&#xff0c;比如有明确的线性关系或者非线性对应关系。这里的概率算法…

大模型背后的秘密公式: Q*?

这麽说好像我是James Bond后面那个厉害的Q先生&#xff0c;Q是英文Quartermaster&#xff08;軍需官&#xff09;第1個英文字大寫&#xff0c;是007系列英國祕勤局虛構部門Q部門的領導。 Stanford大学的研究者最近发表了一篇名为"From r to Q*: Your Language Model is S…

回答篇:测试开发高频面试题目

引用之前文章&#xff1a;《测试开发高频面试题目》 https://blog.csdn.net/qq_41214208/article/details/138193469?spm1001.2014.3001.5502 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 什么是测试开发以及其在软件开发流程中的作用。 a. 测试开发是指测试人员或…

ABC352编程笔记

ABC352 编程笔记 题意&#xff1a;输入&#xff0c;四个数 a , b , c , d a,b,c,d a,b,c,d&#xff0c;若 d d d 在 c , d c,d c,d 之间&#xff0c;则输出 Yes&#xff0c;否则输出 No。 正解&#xff1a;直接判断。 #include <bits/stdc.h> //#define int long lo…

基于 stable diffusion 制作上世纪90年代的游戏美术风格

1. 项目背景 目前游戏项目中出现美术产能不足的瓶颈&#xff0c;如果使用 midjourney 之类的第三方生成式人工智能产品生成美术素材的话&#xff0c;一方面需要将我们的美术资产投喂给第三方企业进行风格训练&#xff0c;有安全性上的风险&#xff0c;另一方面&#xff0c;第三…

华为ensp中BFD和OSPF联动(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年5月6日20点26分 BFD通常指的是双向转发检测。BFD是一个旨在快速检测通信链路故障的网络协议&#xff0c;提供了低开销、短延迟的链路故障检测机制。它主要用于监测两个…

VisualGDB:Linux静态库项目创建、编译及库的使用

接上篇《VisualGDB&#xff1a;Linux动态库项目创建、编译及库的使用》&#xff0c;静态库的创建和使用与动态库基本无差别&#xff0c;唯一需要做的就是指定项目生成静态库。 一、指定项目生成静态库 二、重新构建和编译项目 这里注意&#xff0c;同样要copy一个libxxx.so格式…

【Spring】GoF 之代理模式

一、代理模式 在 Java 程序中的代理模式的作用&#xff1a; 当一个对象需要受到保护的时候&#xff0c;可以考虑使用代理对象去完成某个行为 需要给某个对象的功能进行功能增强的时候&#xff0c;可以考虑找一个代理进行增强 A 对象无法和 B 对象直接交互时&#xff0c;也可以…

IDEA终端环境配置

Idea如何配置终端&#xff1b; 第一步&#xff1a;找到我的电脑&#xff0c;右击——属性——高级系统设置——环境变量 先配置path: 在后面加入&#xff1a;C:\Program Files (x86)\Java\jdk1.7.0_75\bin&#xff08;每个人放置jdk的位置不同。&#xff09; 新建classpath:…

华为OD机试【贪吃的猴子】(java)(200分)

1、题目描述 只贪吃的猴子&#xff0c;来到一个果园&#xff0c;发现许多串香蕉排成一行&#xff0c;每串香蕉上有若干根香蕉。每串香蕉的根数由数组numbers给出。 猴子获取香蕉&#xff0c;每次都只能从行的开头或者末尾获取&#xff0c;并且只能获取N次&#xff0c;求猴子最…

机器人系统ros2-开发实践08-了解如何使用 tf2 来访问坐标帧转换(Python)

tf2 库允许你在 ROS 节点中查询两个帧之间的转换。这个查询可以是阻塞的&#xff0c;也可以是非阻塞的&#xff0c;取决于你的需求。下面是一个基本的 Python 示例&#xff0c;展示如何在 ROS 节点中使用 tf2 查询帧转换。 本教程假设您已完成tf2 静态广播器教程 (Python)和tf…

如何高效解决渠道问题

品牌渠道会围绕销售做一系列活动&#xff0c;定价也会影响渠道的发展&#xff0c;同样的维护好价格&#xff0c;对渠道来说同样重要&#xff0c;渠道中常见的问题包含低价、窜货等&#xff0c;当低价问题不及时解决&#xff0c;会波及影响更多链接&#xff0c;使其他店铺为了流…

力扣刷题第1天:消失的数字

大家好啊&#xff0c;从今天开始将会和大家一起刷题&#xff0c;从今天开始小生也会开辟新的专栏。&#x1f61c;&#x1f61c;&#x1f61c; 目录 第一部分&#xff1a;题目描述 第二部分&#xff1a;题目分析 第三部分&#xff1a;解决方法 3.1 思路一&#xff1a;先排序…

企业短信平台群发_专业群发短信平台

企业平台群发是一种方便、高效的营销方式&#xff0c;通过专业群发平台&#xff0c;企业能够快速、准确地向大量目标客户发送&#xff0c;提高品牌知名度、促进销售和客户互动。下面将详细介绍企业短信平台群发的优势及使用方法。 优势 提高信息覆盖率 企业平台群发可以让企业…

html--瀑布效果

<!doctype html> <html> <head> <meta charset"utf-8"> <title>瀑布效果</title><style> body {background: #222;color: white;overflow:hidden; }#container {box-shadow: inset 0 1px 0 #444, 0 -1px 0 #000;height: 1…

Vue 插槽

Vue插槽是一种特殊的语法&#xff0c;用于在组件中定义可复用的模板部分。它允许开发者在组件的标记中声明一个或多个插槽&#xff0c;然后在使用该组件时&#xff0c;可以根据自己的需求将内容插入到这些插槽中。 Vue插槽分为默认插槽和具名插槽两种。 目录 默认插槽 语法…

【图书推荐】《JSP+Servlet+Tomcat应用开发从零开始学(第3版)》

本书目的 系统讲解JSPServletTomcat开发技术&#xff0c;帮助读者用最短的时间掌握Java Web应用开发技能。 内容简介 本书全面系统地介绍JSPServletTomcat开发中涉及的相关技术要点和实战技巧。本书内容讲解循序渐进&#xff0c;结合丰富的示例使零基础的读者能够熟练掌握JSP…