用户中心,收货地址
本页主要有两方面需要处理
》收货地址的显示,get请求
》表单的提交,可用post请求
表单的模板页处理
》先让模板页的界面变继承一下
参考 user_center_info页
继承一个母版
重写一个右侧的块
图示为,要参考的代码
》继承
关注 user_center_info 的right_content里包的div的样式,复制一下
》来到用户中心的地址页、
通过搜索,快速定位到盒子
盒子收起来
前后都删掉
继承一个
重写块
试试效果
页面正常显示
模板页中,表单的完善
提交方式改为post提交
给控件添加name值
注意,post提交加上csrf_token
》小结
- 表单用post请求发送
- 给表单控件添加name值
- post表单需要加csrf_token,防止跨域伪造的请求
视图类回顾
》原来的
仅仅只做了页面的渲染
通过get方法来渲染显示页面
可是如果用户提交数据,会走post方式
所以要新增post方法
视图类的post方法
》先写好逻辑
》开始完善功能
》接收数据
》校验数据
验证空数据
验证手机格式
得到正则式,直接使用
》业务处理
先上逻辑
# 业务处理
# 保存用户提交的地址
# 情况1,如果用户首次提交地址,让这个地址为默认地址
# 情况2,如果已经有一个默认地址了,新提交的地址为非默认地址
地址表结构回顾
》开始
确保地址模型类导入
》获取登陆的用户对象
然后进行查询
查一查这个用户的地址数据中,有没有存在着默入地址的数据
如果有一个地址被设置为了默认地址
那么新增的地址就为非默认的
否则,就新增的这个地址就让它作为默认地址
# 保存用户提交的地址
# 情况1,如果用户首次提交地址,让这个地址为默认地址
# 情况2,如果已经有一个默认地址了,新提交的地址为非默认地址
# 获取用户行对象
user = request.user
try:
# 在地址表中查找,登陆的用户,地址中默认值为True的数据
address = Address.objects.get(user=user, is_default=True)
except Address.DoesNotExist:
# 如果查找不到,会进入本分支
address = None
# 如果地址查到了,表明用户已经有默认地址了
if address:
is_default = False
else:
is_default = True
# 添加地址
Address.objects.create(
user=user,
receiver=receiver,
zip_code=zip_code,
phone=phone,
addr=addr,
is_default=is_default
)
》返回应答
跳转
跳转到了当前路径
又会被get方法处理
此时的get请求来自于post数据的提交后的跳转
get渲染的页面,应该要把数据库中已经存在着的数据渲染到页面中
因此,get方法不能够仅仅只是像原来那样了
视图类的get方法
当前get渲染的数据是假数据
做下修改
让get方法查询数据
把数据传递给模板
模板页的调改
把数据填入
测试功能
》访问地址页
效果完成
逻辑小结
get方法的逻辑
通过orm查询
地址对象 = 模型类.object.get(用户名=登陆用户,是否默认=True)