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

简介: 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 models
class 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
            })
  1. 对前端进行修改循环遍历获得所有数据
<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>
  1. 那么就到此为止了吗 , 是否可以再优化一下?
    当多用户进行设置是不可避免的会对数据库查询造成巨大的压力 , 我们可以将查询到的数据缓存到内存中 , 设置缓存时间
    那么就会大大减少数据库的压力
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
            })


相关文章
|
7天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
37 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
15 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1天前
|
Linux Python
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
解决django项目报错很离谱的报错之RuntimeError: populate() isn't reentrant
|
3天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
14 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
102 4
|
1月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
7天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
54 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
19天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
55 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
1月前
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
114 9
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
1月前
|
监控 BI Python
python django教学质量评价系统,实现学生、教师、管理员不同角色管理
本文介绍了一个基于Django框架开发的教学质量评价系统,该系统为学生、教师和管理员提供了不同角色的管理和评价功能,实现了教学质量的全方位评估和管理,旨在提高教育质量和促进教学改革。
python django教学质量评价系统,实现学生、教师、管理员不同角色管理