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
            })


相关文章
|
3月前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
120 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
105 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
3月前
|
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网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
66 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
4月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
172 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
214 4
|
1月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
162 45
|
1月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
56 2
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
43 1
|
3月前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
140 22
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面