一、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) # 重定向

Django:(03)请求和响应的更多相关文章

  1. tornado 03 请求与响应

    tornado 03 请求与响应 一.请求与响应 浏览器与服务器之间沟通的到底是什么信息 #服务器在后台一直保持运行着 #浏览器通过URL(路由.地址)发送请求 #服务器接收请求了通过tornado处 ...

  2. django从请求到响应的过程深入讲解

    django启动 我们在启动一个django项目的时候,无论你是在命令行执行还是在pycharm直接点击运行,其实都是执行'runserver'的操作,而ruserver是使用django自带的的we ...

  3. SpringMVC 03: 请求和响应的乱码解决 + SpringMVC响应Ajax请求

    请求或响应的中文乱码问题 tomcat9解决了get请求和响应的中文乱码问题,但是没有解决post请求或响应的中文乱码问题 tomcat10解决了get和post请求以及响应的中文乱码问题 考虑到实际 ...

  4. django之请求和响应

    一:请求 1. 浏览器向服务器传参的几种方式: 方式一:通过正则的形式进行传递,名字为未命名模式 路由的正则形式: from django.conf.urls import url from . im ...

  5. 三、Django之请求与响应-Part 1

    一.新建项目 进入你指定的项目保存目录,然后运行下面的命令: $ django-admin startproject mysite 这将在目录下生成一个mysite目录,也就是你的这个Django项目 ...

  6. Django底层剖析之一次请求到响应的整个流程

    As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...

  7. Django - 请求与响应、表单、中间件、上下文处理器

    请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...

  8. 02_Django-路由配置-HTTP协议的请求和响应

    02_Django-路由配置-HTTP协议的请求和响应 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn.net/ ...

  9. Django编写RESTful API(二):请求和响应

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每一个URL代表着一个资源.当然我 ...

  10. Django REST FrameWork中文教程2:请求和响应

    从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...

随机推荐

  1. FFmpeg常用命令学习笔记(八)滤镜相关命令

    滤镜相关命令 FFmpeg中关于滤镜命令有很多种.比如在视频中加入/删除水印.对视频做反转等等都属于滤镜. FFmpeg滤镜处理流程 解码后的数据帧 ---过滤处理---> 过滤后的数据帧 -- ...

  2. [六省联考2017]分手是祝愿——期望DP

    原题戳这里 首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\). 然后容(hen)易(nan)发现即使加 ...

  3. CodeForces 835C - Star sky | Codeforces Round #427 (Div. 2)

    s <= c是最骚的,数组在那一维开了10,第八组样例直接爆了- - /* CodeForces 835C - Star sky [ 前缀和,容斥 ] | Codeforces Round #4 ...

  4. 【Java-算法】 计算十六进制校验位

    如何计算16进制校验位?校验的实质是16进制取和模256的值. eg. 十六进制串:0A0B0C0D0E0F 的校验位是: 4B (HEX)计算过程: 十六进制转十进制 0A (HEX)= 10(DE ...

  5. find(expr|obj|ele)搜索所有与指定表达式匹配的元素。

    find(expr|obj|ele) 概述 搜索所有与指定表达式匹配的元素.这个函数是找出正在处理的元素的后代元素的好方法. 所有搜索都依靠jQuery表达式来完成.这个表达式可以使用CSS1-3的选 ...

  6. Makefile规则介绍

    Makefile 一个规则 三要素:目标,依赖,命令     目标:依赖 命令 1.第一条规则是用来生成终极目标的规则     如果规则中的依赖不存在,向下寻找其他的规则 更新机制:比较的是目标文件和 ...

  7. Jenkins发布.Net Core项目到IIS

    安装Java8,Git,和Jenkins及插件. jenkins安装后以windows服务的方式运行,浏览器访问本机8080端口可访问. 自动部署的原理分为三步,首先从git服务器获取最新代码,然后用 ...

  8. Hbuilder快速代码技巧和常用快捷键

    1.在body内输入div.abc按下tab键 效果:<divclass="abc"></div> 2.在body内输入div#abc按下tab键 效果:& ...

  9. C++ #include<algorithm>

    今天下午大致学完了进阶指南中algorithm头文件下的内容,在这里进行一个总结.   reverse翻转   顾名思义,reverse进行的操作就是翻转原来的顺序,理解非常简单,故不赘述. 操作样例 ...

  10. C/C++程序基础-C++与C有什么不同

    1:C和C++的联系和区别? 答:C是一个结构化语言,它的重点在于算法和数据结构.对于语言本身而言,C是C++的子集.C程序的设计首先要考虑的是如何通过一个过程,对输入进行运算处理,得到输出.对于C+ ...