一、HttpRequest

客户端传参的几种方式
传递方式
示例
后端获取方式
数据类型
url路径(path)
/news/1/2
正则匹配
 str
查询字符串
/news2?category=1&page=2
request.GET
QueryDict
请求体:表单类型数据
category=1&page=2
request.POST
QueryDict
请求体:json等
{"category":1,"page":2}
request.body
bytes
请求头
category=1 page=2
request.META
字典

表格说明:

  客户端通过五种方式向服务器传参,django 会自动把参数封装到 request 对象(HttpRequest类型的实例)中,我们获取这些参数需要通过 request 对象获取,而根据传参的方式的不同,获取调用的属性也会不同,获取到的数据类型也不一样。根据属性的数据类型需要调用其 get() 方法或 getlist() 方法获取值。

获取 request 请求的属性:

.GET:获取查询字符串参数  (与请求方式无关)——QueryDict对象
.POST:获取请求体中的表单类型的数据(与请求方式有关,仅限post请求)——QueryDict对象
.body:获取请求体非表单类型的数据,比如:json
.META:获取请求头中的数据(获取自定义属性时,需要加前缀“HTTP_”, 并转成大写)
.user:当前访问的登录用户对象

关于 request.user 属性:

  request 里保存着 user 属性,如果用户已登陆,那么 user 是一个 AbstractUser 对象,如果用户未登录,那么 user 是一个 AnnoymousUser 对象。

  user对象判断是否登陆:request.user.is_authenticated()返回true表示登陆。

CSRF 安全防护:

  Django 对 POST、PUT、PATCH、DELETE 请求方式开启了 CSRF 安全防护,为方便测试,可以在 settings.py 文件中注释掉 CSRF 中间件,关闭CSRF防护。

获取QueryDict:

  获取QueryDict的值时,可以在参数中设置默认值,在或取不到值时返回默认值

二、QueryDict对象

  • QueryDict 对象的包位于 django.http.QueryDict
  • 与字典类似,但一个键可以保存多个值
  • HttpRequest对象的 GET 和 POST 属性都是 QueryDict 类型

获取值的方法:

.get()方法

根据键获取值
如果一个键同时拥有多个值,将获取最后一个值
如果键不存在则返回None值,可以设置返回自定义的默认值
dict.get('键',默认值)

.getlist()方法

根据键获取多个值,值以列表返回
如果键不存在则返回空列表[]
dict.getlist('键',默认值)

  

三、HttpResponse

1、常用子类

HttpResponseRedirect   重定向
JsonResponse   返回json数据

Django提供了一系列HttpResponse的子类,可以快速设置状态码:
HttpResponseRedirect 302
HttpResponseNotModified 304
HttpResponseBadRequest 400
HttpResponseNotFound 404
HttpResponseForbidden 403
HttpResponseNotAllowed 405
HttpResponseServerError 500

2、构造响应对象

  • 使用 django.http.HttpResponse来构造响应对象:

response =HttpResponse(content=响应体, content_type=响应体数据MIME类型, status=状态码)
  • 响应头设置:

  可以直接将 HttpResponse 对象当做字典进行响应头键值对的设置:

respone['响应头key'] = 响应头值

3、JsonResponse 子类

# 传递字典类型的数据   content_type: application/json
JsonResponse({"name":"张三"})
# 解决编码问题: {"name": "\u5f20\u4e09"}
JsonResponse({"name":"张三"}, json_dumps_params={'ensure_ascii':False})
# 传递列表数据
JsonResponse([{"name":"张三"}], json_dumps_params={'ensure_ascii':False}, safe=False)

4、HttpResponseRedirect 子类

 # 重定向到首页   状态码:302
return redirect('/index') # 项目的urls.py
url(r'^', include('users.urls', namespace='users')),
# 应用的urls.py
url(r'^home$', views.index, name='index'), def my_redirect(request):
# 生成的url的值为 /home
url = reverse('users:index')
return redirect(url) # 重定向

最新文章

  1. Total Hamming Distance
  2. MySQL操作类(本人自己写的)
  3. 关于安装Ubuntu后触摸板无法使用的解决方案
  4. window对象中的常见方法
  5. #笔记#JavaScript进阶篇一
  6. SQL到NOSQL的思维转变
  7. 基于SVD的推荐算法
  8. ytu 1985:C语言实验——保留字母(水题)
  9. textarea文本域宽度和高度(width、height)自己主动适应变化处理
  10. SQLite Code配置DbConfiguration
  11. 高仿淘宝送货地址暴走漫画系列(附demo)
  12. Malware Defender(HIPS主动防御软件) V2.8 免费版
  13. Oracle 存储过程简单语法
  14. Linux学习之CentOS(四)----Linux文件属性、所有者、群组、其他组及文件权限操作简要总结
  15. SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用
  16. Arch Linux 记录
  17. AI deeplab
  18. js filter 数组去重
  19. 二、主目录 Makefile 分析(2)
  20. Expm 9_2 有向图的强连通分量问题

热门文章

  1. HDU 6036 - Division Game | 2017 Multi-University Training Contest 1
  2. Luogu P5018 对称二叉树 瞎搞树&哈希
  3. gcc/g++以c++11编译
  4. 基于熵的方法计算query与docs相似度
  5. MySQL初识数据库
  6. LIUNX 安装 nginx
  7. Codeforces 1051 D.Bicolorings(DP)
  8. mac -bash: ll: command not found
  9. 预处理、const、static、sizeof-为什么inline能很好地取代表达式形式的预定义
  10. 预处理、const、static与sizeof-C++中const有什么作用(至少说出3个)