
Django商城项目实战
文章平均质量分 64
讲解Django web框架核心逻辑,配合商城实战项目。
编程自留地
计算机专业
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
17.5 展示购物车缩略信息
将index.html list.html detail.html三个页面中之前补注释掉的“我的购物车”解注,鼠标移到上面就可看到效果。展示购物车缩略信息使用GET方式向后端发请求,获取 redis 和cookie中的购物车数据,不需要请求参数。在商城首页、商品列表页、商品详情“我的购物车”,鼠标悬停时,以下拉框形式展示购物车缩略信息。在carts应用views.py中增加CartsSimpleView视图类。在carts应用下urls.py中新增路由。原创 2025-08-17 20:39:54 · 223 阅读 · 0 评论 -
17.4 合并购物车
用户登录后,将Cookie中的购物车商品合并到redis数据库中。如果此时redis中已经有相同id的商品,则使用Cookie中的数据覆盖redis中的数据。合并功能需要在用户登录后实现,但登录视图中应避免过多与登录逻辑无关的逻辑,所以考虑对合并功能封装成一个函数,在登录视图中调用。在登录视图类LoginView中,登录成功后调用上述合并函数,LoginView视图类全部代码如下。在carts应用下创建utils.py文件,在utils.py中定义合并购物车功能的函数。原创 2025-08-16 19:14:28 · 196 阅读 · 0 评论 -
17.3 全选购物车
登录状态下,用户勾选购物车页面的“全选”时,将购物车中所有商品的sku_id放在set集合, 再发送到前端;反选时,移除集合中的所有商品。在carts应用views.py中新增如下视图类。在carts应用下urls.py本新增路由。未登录状态下,逻辑一致。原创 2025-08-16 18:03:28 · 183 阅读 · 0 评论 -
17.3 删除购物车商品
在carts应用下视图类CartsView中增加delete方法,全部代码为。测试:在购物车商品列表页,点击“删除”即可删除商品,总金额同步更新。删除购物车中的商品,需要接收sku_id,以JSON来响应。原创 2025-08-15 17:09:11 · 214 阅读 · 0 评论 -
17.2 修改购物车商品
需要更新的数据为sku_id,count , selected几个参数。carts应用下views.py中增加put方法,修改后的全部代码如下。因只是对购物车中的商品数据进行修改,所以请求方式为put。在carts应用下定义constants.py,存放常量。原创 2025-08-14 22:18:33 · 196 阅读 · 0 评论 -
17.1 添加与查询购物车
购物网站应提供用户已登录或未登录状态下都能添加商品到购物车的功能,所以两种状态要采用两种不同的实现方式。登录状态:可根据用户id保存用户勾选的商品,考虑到购物车数据量小,且更新频繁,所以采用redis来存储。redis提供的数据类型有:string hash list语法格式为: 实现购物车视图类Carts.py,post请求用于提交购物车数据,get请求用于查询购物车数据。前端页面cart.html配置路由carts应用下urls.py配置根路由,项目下urls.py下增加如下配置模式原创 2025-08-14 12:22:59 · 496 阅读 · 0 评论 -
第16次:用户浏览记录
用户的浏览历史应存放在基于内存的redis,而非基于磁盘的mysql中,所以需要配置存放浏览历史的redis 3号缓存库。第3步:在users应用下urls.py增加路由模式。在users/views.py中增加如下代码。第1步:配置redis缓存。第2步:保存与查询浏览记录。原创 2025-07-21 18:26:19 · 199 阅读 · 0 评论 -
第15次:商品搜索
实现用户在页面可自由搜索某个商品的功能。第1步:准备搜索功能用到的库whoosh是搜索引擎,对英文支持较好,但对中文效果不佳。jieba为中文分词库,弥补whoosh的缺陷。django-haystack为在django项目中使用搜索引擎的工具应用,通过它可以在不修改代码的情况下使用不同的搜索引擎。第2步:在settings.py中添加haystack应用第3步:在settings.py中新境搜索引擎whoosh的配置项第4步:将Whoosh自带的分词组件替换为jieba在虚拟环境下(.ve原创 2025-07-21 18:22:23 · 655 阅读 · 0 评论 -
第14次:商品列表、热销商品及详情
第1步:定义获取商品列表的视图类ListView,本视图中完成了如下功能:在goods应用下定义constants.py,其中定义常量上面代码中用的函数定义在goods/utils.py中,参数为类别对象。第2步:定义热销排行视图类,用于展示与商品列表同类别的、销量前2名的商品,第3步:定义展示商品详情的视图类,获取用户点击的商品。第4步:定义订单评价视图类,查询某个商品的评价信息,由于尚未完成订单的支付功能,系统中没有订单信息,所以这里是查询不到评价的。第5步:订单商品模型,定义在orders原创 2025-06-21 11:24:56 · 830 阅读 · 0 评论 -
第13次01:广告及商品数据呈现
第1步:在contents应用models.py中定义广告内容类别模型和广告内容模型第2步: 在goods应用models.py中定义商品类别模型、商品频道模型、商品频道组模型、商品品牌模型、SPU模型、SKU模型、SPU规格模型、SKU规格模型、SKU图片模型、规格选项模型等共9个模型。生成迁移文件、执行迁移文件。第3步:在contents应用下views.py配置视图函数,OrderedDict类是特殊的字典,说明如下第4步:contents应用下urls.py中配置路由第5步:导入模板完整的i原创 2025-06-08 15:50:26 · 1009 阅读 · 0 评论 -
第12次13: 修改登录密码
第1步:在users应用views.py中定义修改密码的视图第2步:导入模板文件user_center_pass.html第3步:在users应用下配置路由原创 2025-06-02 22:04:20 · 725 阅读 · 0 评论 -
第12次12: 修改和删除收货地址
第1步:在users应用下views.py中新增实现修改收货地址的视图类。第2步:在users应用下配置路由。原创 2025-06-02 22:03:00 · 304 阅读 · 0 评论 -
第12次10: 设置默认地址
第1步:在users应用views.py中新增。第2步:在users应用下配置路由。原创 2025-06-02 21:59:57 · 137 阅读 · 0 评论 -
第12次09:展示收货地址和新增地址
第1步:定义地址模型,考虑到地址模型中的创建时间与更新时间在后续其它模型中也会用到,所以先定义一个包含创建时间和更新时间的基础模型BaseModel.py,其它模型通过继承它来获取创建时间和更新时间属性。在utils包中创建models.py,并定义BaseModel模型第2步:在users应用的下的models.py创建地址模型,此模型继承BaseModel,注意Address模型在放在User模型的下面,否则无法正确使用Use的模型作为外键第3步:在User模型中添加默认收货地址的字段default原创 2025-06-02 21:58:41 · 778 阅读 · 0 评论 -
第12次08附件:省、市、区县三级行政区划数据库表
INSERT INTO `tb_areas` VALUES ('622927', '积石山保安族东乡族撒拉族自治县', '622900');INSERT INTO `tb_areas` VALUES ('530827', '孟连傣族拉祜族佤族自治县', '530800');INSERT INTO `tb_areas` VALUES ('653000', '克孜勒苏柯尔克孜自治州', '650000');原创 2025-05-27 08:47:44 · 821 阅读 · 0 评论 -
第12次08: 省市县区三级联动收货地址
第1步:在areas应用下models.py中定义地区模型类。第3步:将areas.sql文件导入数据库。第5步:配置根路由和areas应用子路由。第4步:在areas应用下,定义视图。第2步:生成迁移文件和执行迁移文件。原创 2025-05-26 19:02:55 · 232 阅读 · 0 评论 -
第12次07 :邮箱的验证
登录QQ邮箱—点击右上角“设置”—点击左下角“账号与安全”—点击左侧“安全设置”—找到“POP3/IMAP/SMTP/Exchange/CardDA服务"选项,按提示步骤开启SMTP服务,需要发送两个手机验证码。第7步:在users应用下utils.py中定义生成邮箱验证url的函数和反序列化的函数。第3步:定义发送邮件的函数,在users应用下创建emails.py,并定义函数。第6步:定义验证邮箱的链接部分的固定串和有效期,在dev.py中。第9步:views.py中定义验证邮箱的类视图。原创 2025-05-26 19:00:23 · 343 阅读 · 0 评论 -
第12次06 :用户中心添加邮箱
第一步:定义用于保存邮箱信息的视图,由于需要用户登录之后才能添加邮箱,所以在前后端交互时要先进行用户登录状态的验证(因会过期),数据交互使用json。在xiaoyumall/utils下创建views.py,并定义限制用户访问类。第三步:调整session时长,验证。继承这个类即可实现登录状态的验证。原创 2025-05-26 18:58:11 · 339 阅读 · 0 评论 -
第12次05: 用户中心-用户基本信息
第一步:未登录时,访问需要用户认证的页面时,需要跳转到登录页,在dev.py中配置第二步:登录后的重定向,如果刚才未登录的情况下,要访问用户中心页面,会直接跳转到登录页面,此时输入用户名密码之后会直接跳转到用户中心页面。LoginView.py第三步:创建用户中心视图类第四步:User模型中增加邮箱字段第五步:用户中心页面user_center_info.html第六步:配置路由第七步:index.html中把用户中心的注解去掉原创 2025-05-26 18:56:16 · 1101 阅读 · 0 评论 -
第12次03 :登录状态的保持
需要在RegisterView视图的post()方法中增加调用login()函数的代码,增加后如下。函数封装了将用户信息写入session的操作,便于快速实现登录并保持其登录状态。启动redis-cli.exe,选择1号库,可查到。第二步:记住登录状态,LoginView视图新增。新增后完整LoginView。第一步:用户注册的状态保持。原创 2025-05-26 18:54:22 · 227 阅读 · 0 评论 -
第12次04 :首页展示用户名
第三步:在users应用中增加退出登录的视图类,完成清除cookie和重定向到首页的逻辑,并配置路由。登录后,跳转到首页,首页会展示用户名;未登录时,首页将展示登录与注册的选项。第二步:补充后端代码,在登录与注册视图中增加设置cookie的语句。配置路由,users应用下子路由新增。第一步:index.html。原创 2025-05-26 18:52:57 · 552 阅读 · 0 评论 -
第16次(简要版)-支付与订单
1、在goods/models.py中,新增模型OrderInfos模型2、将模型注册到后台管理系统中,打开goods应用下的admin.py文件,添加内容如下admin.site.register(OrderInfos)3、生成迁移文件并执行迁移,python manage.py makemigrationspython manage.py migrate查看数据库可发现新表goods_orderinfos1、在templates文件夹下新建orderinfo.html,代码如下:2、修改原创 2025-05-20 08:40:18 · 832 阅读 · 0 评论 -
第15次(简要版)-购物车
4、修改auth_app的登录视图,为当前用户添加cookie,以获取当前用户的购物车信息,cookie详细介绍参考第八章用户验证系统PPT,auth_app/views.py。7、同时,在goods应用下的views.py文件文件中,新增 addcart()和delt()方法。2、将模型注册到后台管理系统中,打开goods应用下的admin.py文件,添加内容如下。2、在goods/urls.py,添加购物车carts路径。3、在goods/views.py,定义购物车视图。3、生成迁移文件并执行迁移,原创 2025-05-20 08:37:56 · 843 阅读 · 0 评论 -
第14次(简要版)-商品详情
1、在goods/models.py中,新增模型Guige_leixing、Guige,Guige_leixing模型代码放在shangpin模型上方,否则可能提示Guige_leixing不存在,2、修改模版文件夹下的index.html,为base.html的子模版,同时新增了一个导航栏用于显示商品类别,可进行检索。3、为了实现商品类别检索,需在goods应用下的views.py文件,新增相应视图函数。4、同时,在goods应用下的urls.py文件文件中,新增相应路由规则。商品规格、商品规格类型。原创 2025-05-20 08:36:23 · 1023 阅读 · 0 评论 -
第13次(简要版)-商品展示
打开浏览器输入:http://127.0.0.1:8000/admin/,进行管理员登录,查看已注册的数据库表。static用于存储不经常变化的资源,如系统图标,media可用于存储经常变化的资源,如上传的图片。(1)static 静态资源配置,在settings.py文件中添加:(注:若已存在无需添加)访问浏览器,http://127.0.0.1:8000/index/,可以看到静态页面即成功。将模型注册到后台管理系统中,打开goods应用下的admin.py文件,添加内容如下。密码:123456;原创 2025-05-20 08:34:58 · 917 阅读 · 0 评论 -
第12次(简要版)-登录与退出
判断用户是否登录, 如果用户没有登录, 默认会跳转到’/accounts/login/‘,并且URL会自动加上你请求的url作为登录后的跳转地址, 如:’/accounts/login/?next=/user/address/‘登入完后会去请求’/user/address/', 如果登录了, 会正常执行。在应用auth_app下的路由文件中urls.py文件中新增路由规则。auth_app/urls.py文件中添路径。auth_app/urls.py文件中添路径。(2)修改未登录时默认跳转的地址。原创 2025-05-14 07:19:14 · 864 阅读 · 0 评论 -
第12次02:小鱼商城-手机号登录
Django框架自带的authenticate()方法只支持使用用户名登录,其内部通过backend对象的authenticate()方法获取用户;若要使用手机号登录,需要重写backend对象的authenticate()方法。第一步:在users下定义utils.py,在其中定义get_user_by_account()方法,用于识别用户输入的是用户名还是手机号。第二步:在上一步的utils.py中自定义backend类,并重写authenticate()方法。原创 2025-05-13 10:22:41 · 245 阅读 · 0 评论 -
第12次01:小鱼商城-用户名登录
本节内容视频地址:https://www.bilibili.com/video/BV1BLEJzUEFn/users应用子路由新增。原创 2025-05-13 10:17:08 · 364 阅读 · 0 评论 -
第11次:用户注册(完整版)
上面代码用的状态码定义在xiaoyu_mall/xiaoyu_mall/utils/response_code.py中。图形验证码要存在redis数据库中,在xiaoyu_mall/dev.py配置使用redis的2号库存图形验证码。第二步:在配置文件中配置自定义User模型类,用自定义的User模型类代替Django自带的User模型类。在verifications应用下views.py定义生成图形验证码的类视图。在verifications应用中创建verify_pic.py。第一步:定义用户模型类。原创 2025-05-06 13:23:40 · 549 阅读 · 0 评论 -
第11次:用户注册(简要版)
在templates文件夹下边新建register.html,代码如下:2、定义对应的视图类在auth_app/views.py文件中定义处理用户注册请求的视图类RegisterView(),分别处理浏览器发起的GET请求和POST请求。处理get请求。当后端接收到用户通过浏览器发起的get请求后,调用RegisterView()里的get()方法处理GET请求,并返回register.html页面。注册数据通过前端校验之后,用户单击注册按钮,浏览器会向后端发送POST请求,Django接收注册页原创 2025-05-06 13:21:27 · 624 阅读 · 0 评论 -
第10次:电商项目配置开发环境
第三步:在jinja2中引用静态文件和在页面中对url反向解析相对复杂,这里通过自定义的方式将引用静态文件和反向解析两个操作与Django引擎下的操作保持一致。第三步:测试,运行项目,浏览器输入http://127.0.0.1:8000/static/images/adv01.jpg,若可访问到静态图片,说明配置成功。开发环境用于日常开发,生产环境用于线上部署,为避免单个环境下相互干扰,考虑将二者分开,须完成两步操作。第三步:配置redis数据库,在dev.py与prod.py中。原创 2025-04-29 17:31:55 · 1650 阅读 · 0 评论 -
第9次:身份验证
本节的知识点将会在项目的用户注册与登录环节使用。原创 2025-04-22 11:20:33 · 1062 阅读 · 0 评论 -
第8次:表单集
从以上示例可以看出,如果想要把页面提交的表单从2个变成3个,既要修改视图函数,又要修改HTML页面,耦合度较高,不利于扩展。表单集即多个表单的集合,从此处可以看出表单集(FormSet)由表单(Form)构成。通过表单集,可一键添加多个表单的数据,如在一个页面一键提交多个用户或商品的信息。第二步:定义视图函数,这里通过for循环一次性处理了所有的表单数据,处理更简单。第一步:应用form01下,创建forms.py模块,在其中定义表单类。第一步:froms应用下forms.py中创建表单。原创 2025-04-14 11:56:06 · 380 阅读 · 0 评论 -
第7次:表单
在Django框架中,有两种定义表单的方式。在HTML中可使用<form>标签定义表单域,此表单域中再包含单选或多行文本框、密码框、单选按钮、复选按框、下拉选择框等元素。这种方式的特点是使用纯粹的HTML和CSS知识实现,学习的成本较低,更适用于对前端HTML比较擅长的同学。在Python代码中通过Form类或其子类也可以定义表单。因表单类生成的表单不包含<form>标签,使用时须将其嵌入到<form>标签中。这种方式的特点是可表单类或表单类的部分属性,这种方式适用于喜欢写Python代码的同学。原创 2025-04-08 17:08:30 · 647 阅读 · 0 评论 -
第6次:Admin后台管理系统
Django提供了一个强大的后台管理系统,此系统以模型为中心,方便管理员对数据库表进行管理。原创 2025-04-02 07:33:41 · 1209 阅读 · 0 评论