Django:(03)请求和响应
一、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)请求和响应的更多相关文章
- tornado 03 请求与响应
tornado 03 请求与响应 一.请求与响应 浏览器与服务器之间沟通的到底是什么信息 #服务器在后台一直保持运行着 #浏览器通过URL(路由.地址)发送请求 #服务器接收请求了通过tornado处 ...
- django从请求到响应的过程深入讲解
django启动 我们在启动一个django项目的时候,无论你是在命令行执行还是在pycharm直接点击运行,其实都是执行'runserver'的操作,而ruserver是使用django自带的的we ...
- SpringMVC 03: 请求和响应的乱码解决 + SpringMVC响应Ajax请求
请求或响应的中文乱码问题 tomcat9解决了get请求和响应的中文乱码问题,但是没有解决post请求或响应的中文乱码问题 tomcat10解决了get和post请求以及响应的中文乱码问题 考虑到实际 ...
- django之请求和响应
一:请求 1. 浏览器向服务器传参的几种方式: 方式一:通过正则的形式进行传递,名字为未命名模式 路由的正则形式: from django.conf.urls import url from . im ...
- 三、Django之请求与响应-Part 1
一.新建项目 进入你指定的项目保存目录,然后运行下面的命令: $ django-admin startproject mysite 这将在目录下生成一个mysite目录,也就是你的这个Django项目 ...
- Django底层剖析之一次请求到响应的整个流程
As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...
- Django - 请求与响应、表单、中间件、上下文处理器
请求与响应篇 一.HttpRequest对象 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象.视图函数的第一个参数(request)是HttpRequest对象在djang ...
- 02_Django-路由配置-HTTP协议的请求和响应
02_Django-路由配置-HTTP协议的请求和响应 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn.net/ ...
- Django编写RESTful API(二):请求和响应
欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每一个URL代表着一个资源.当然我 ...
- Django REST FrameWork中文教程2:请求和响应
从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...
随机推荐
- 一段有关线搜索的从python到matlab的代码
在Udacity上很多关于机器学习的课程几乎都是基于python语言的,博主“ttang”的博文“重新发现梯度下降法——backtracking line search”里对回溯线搜索的算法实现也是用 ...
- ACM-ICPC 2017 西安赛区现场赛 K. LOVER II && LibreOJ#6062. 「2017 山东一轮集训 Day2」Pair(线段树)
题目链接:西安:https://nanti.jisuanke.com/t/20759 (计蒜客的数据应该有误,题目和 LOJ 的大同小异,题解以 LOJ 为准) LOJ:https://l ...
- Unrecognized SSL message, plaintext connection? 将https 换为http 即可
请求链接:https://59********* 升级后的项目地址有https换为了http ,出现这个错误,改为http请求即可
- SpringBoot AOP注解式拦截与方法规则拦截
AOP的本质还是动态代理对方法调用进行增强. SpringBoot 提供了方便的注解实现自定义切面Aspect. 1.使用需要了解的几个概念: 切面.@Aspect 切点.@Pointcut. 通知. ...
- jquery实现ajax提交表单数据或json数据
- nginx配置项
try_files location / { try_files $uri $uri/ /index.php?$query_string; } 当用户请求 http://host/instance时, ...
- Java进阶知识08 Hibernate多对一单向关联(Annotation+XML实现)
1.Annotation 注解版 1.1.在多的一方加外键 1.2.创建Customer类和Order类 package com.shore.model; import javax.persisten ...
- PCIe/NVMe Soft Protocol Analyzer - 惊天发现
最近在看一些协议方面的东西,刚刚接触很多东西不懂.为了尽快熟悉,打算搭建一套系统,包括上层主机和下层SSD. 既然是协议,那就需要硬啃spec.但是俺是懒人一个,想找个便捷方式快速熟悉.这就想到了协议 ...
- 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问.目前国内最稳定最好用的是新浪T.cn短链接. 之前新浪提供了 ...
- Java线程间如何通信(五)
1.简述 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能称为一个整体. 使线程之间进行通信后,在大大提高CPU利用率的同时还会使开发人员对各个线程任务在处理的过程中进行有效的把控. ...