get
传参数:/cart/add?sku_id=1&count=3
post
传参数:['sku_id': 1, 'count': 3]
url
传参数:url配置
时,捕获参数
# url传参 示例
re_path(r'^goods/(?P<goods_id>\d+)$', DetailView.as_view(), name='detail'), # 详情页url
re_path(r'list/(?P<type_id>\d+)/(?P<page>\d+)$', ListView.as_view(), name='list'), # 列表页
涉及到数据的修改,采用post
传参
只涉及到数据的捕获,采用get
传参
商品添加到购物车:
- 请求方式: 采用ajax post
- 传递参数: 商品id,商品的数目
django防止csr
f的方式:
1)默认打开csrf
中间件
2)表单post
提交数据时 需要加上{% csrf %}
标签
防御原理:
1)渲染模板文件时,把{% csrf %}
标签 替换为 一个叫做csrfmiddlewaretoken
的隐藏域
2)服务器交给浏览器 保存一个名为csrftoken
的cookie
信息
3)提交表单时,两个值(csrfmiddlewaretoken
, csrftoken
)都会发给服务器。服务器拿到两个值 进行对比,对比一致 则csrf
验证通过,否则 报csrf
错。
表单提交时 默认会把csrfmiddlewaretoken
进行提交。
ajax提交时 也有 csrf
验证。而ajax提交时 需要自己拿到csrfmiddlewaretoken的值
进行提交。
ajax 发起的请求,都在后台。在浏览器中 是看不到效果的。
前后端 分离时,要确定的几件事情:
- 前端是否会
传递数据
,传递什么数据
,数据的格式
- 前端的
访问方式(get, post)
- 返回
什么数据
给前端,返回数据的格式
============================================
request.POST
request.GET
获得的 都是QueryDict
类型的值。
QueryDict
允许 一个key
对应多个value
。
通过request.POST.getlist('sku_ids')
获取sku_ids
对应的 多个value
。