request

如果说 urls.py 是 Django 中前端页面和后台程序桥梁,那么 request 就是桥上负责运输的小汽车
可以说后端接收到的来至前端的信息几乎全部来自于requests中。

request对象的属性

request.META

request.MATE获取的是一个标准的python字典。它包含了所有的HTTP请求信息

1 CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
2 CONTENT_TYPE —— 请求的正文的MIME 类型。
3 HTTP_ACCEPT —— 响应可接收的Content-Type。
4 HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
5 HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
6 HTTP_HOST —— 客服端发送的HTTP Host 头部。
7HTTP_REFERER —— Referring 页面。
8 HTTP_USER_AGENT —— 客户端的user-agent 字符串。
9 QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
10 REMOTE_ADDR —— 客户端的IP 地址。
11 REMOTE_HOST —— 客户端的主机名。
12 REMOTE_USER —— 服务器认证后的用户。
13 REQUEST_METHOD —— 一个字符串,例如”GET” 或”POST”。
14 SERVER_NAME —— 服务器的主机名。
15 SE0RVER_PORT —— 服务器的端口(是一个字符串)
获取请求的源主机:HttpRequest.get_host()

request.scheme

请求的方式,即http或者是https

request.path

请求的路径,这里的路径是指相对路径,也就是说一个登陆后台页面的请求:http://127.0.0.1:8000/admin 的路径是 /admin
获取完整路径(包括参数):HttpRequest.get_full_path()
获取绝对url: HttpRequest.bulid_absolute_uri(location) 此参数默认为完整路径

request.encoding

请求提交的数据的编码方式

request.session

request.session 获取的是一个类似于字典的对象,可以进行读取写入操作,常用来保存一些数据来实现会话跟踪技术。
因为 HTTP 是一个无状态,不连续的协议。如果想让服务器记住当前的访问对象,就需要记录请求者的一些信息来达到这个目的。
# 设置session
request.session["name"] = "root"
# 获取session
name = request.sessin["name"]

!!!说到这里需要提一下,django会默认为session使用json序列化。json序列化只能序列化一些基本数据类型,如数字,字符串,列表等。所以session不能直接存储对象.可以简单的在settings中添加 SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer"

request.COOKIES

与session类似,区别是cookies数据是保存在客户端,session数据是保存在服务端。
相对而言session更安全,cookies在不同的浏览器上保存数据的大小限制也不同。但是,存在即合理。cooike自有它的好处这里不多说。
# 设置cookies 
response.set_cookie('name','root')
# 设置加密cookies
response.set_cookie('passsword','123456',salt='@#$!%^&')
# 获取cookie
request.COOKIES.get("name")
# 获取加密的cookie
request.get_signed_cookie("password",salt="@#$!%^&")

request.method

请求方式 POST/GET….

下面正式开始获取数据

request.body

请求的主体,返回的是一个字符串

request.data

请求的数据部分,返回的是一个字典对象(除此之外,与request.body是很类似的)

request.POST

获取post方式表单中提交的数据

request.POST["username"]
request.POST.get("username")

request.GET

获取get方式表单中或url提交的数据

request.POST["username"]
request.POST.get("username")

django request.POST和request.body获取值时出现的情况

django request.POST / request.body
当request.POST没有值 需要考虑下面两个要求
1.如果请求头中的: Content-Type: application/x-www-form-urlencoded request.POST中才会有值(才会去request.body中解析数据)
2.若1有,也不一定有值 必须有数据格式要求: name=alex&age=18&gender=男 如:
a. form表单提交 默认就会满足上诉的1和2
<form method...>
input
</form> b. ajax提交
$.ajax({
url:...
type:POST,
data:{
name:alex,
age=18,
} #默认也会满足上诉1和2 请求头默认为上述情况 内部数据格式会转为上述情况
}) 自定义ajax 情况一
$.ajax({
url:...
type:POST,
headers:{'Content-Type':"application/json"} #不同的请求头 导致request.POST获取不了数据 而request.body依旧存在数据
data:{name:alex, age = 18} #内部自动转换 name=alex&age=18 }) #即body有值 POST无值 自定义ajax 情况二
$.ajax({
url:...
type:POST,
headers:{'Content-Type':"application/json"} #不同的请求头 导致request.POST获取不了数据 而request.body依旧存在数据
data:JSON.stringfy{name:alex, age = 18} #{name:alex,age:18} }) #body有值 POST无值
#从 request.body里获取数据 然后再通过json.loads(request.body)

HttpRequest对象

属性

1  HttpRequest.scheme       请求的协议,一般为http或者https,字符串格式(以下属性中若无特殊指明,均为字符串格式)

2  HttpRequest.body        http请求的主体,二进制格式。

3  HttpRequest.path             所请求页面的完整路径(但不包括协议以及域名),也就是相对于网站根目录的路径。

4  HttpRequest.path_info     获取具有 URL 扩展名的资源的附加路径信息。相对于HttpRequest.path,使用该方法便于移植。

if the WSGIScriptAlias for your application is set to "/minfo", then path might be "/minfo/music/bands/the_beatles/" and path_info would be "/music/bands/the_beatles/".

5  HttpRequest.method               获取该请求的方法,比如: GET   POST .........

6  HttpRequest.encoding             获取请求中表单提交数据的编码。

7  HttpRequest.content_type      获取请求的MIME类型(从CONTENT_TYPE头部中获取),django1.10的新特性。

8  HttpRequest.content_params  获取CONTENT_TYPE中的键值对参数,并以字典的方式表示,django1.10的新特性。

9  HttpRequest.GET                    返回一个 querydict 对象(类似于字典,本文最后有querydict的介绍),该对象包含了所有的HTTP GET参数

10  HttpRequest.POST                返回一个 querydict ,该对象包含了所有的HTTP POST参数,通过表单上传的所有  字符  都会保存在该属性中。

11  HttpRequest.COOKIES        返回一个包含了所有cookies的字典

12  HttpRequest.FILES           返回一个包含了所有的上传文件的  querydict  对象。通过表单所上传的所有  文件  都会保存在该属性中。

                                               key的值是input标签中name属性的值,value的值是一个UploadedFile对象

13  HttpRequest.META                返回一个包含了所有http头部信息的字典

    CONTENT_LENGTH – The length of the request body (as a string).
CONTENT_TYPE – The MIME type of the request body.
HTTP_ACCEPT – Acceptable content types for the response.
HTTP_ACCEPT_ENCODING – Acceptable encodings for the response.
HTTP_ACCEPT_LANGUAGE – Acceptable languages for the response.
HTTP_HOST – The HTTP Host header sent by the client.
HTTP_REFERER – The referring page, if any.
HTTP_USER_AGENT – The client’s user-agent string.
QUERY_STRING – The query string, as a single (unparsed) string.
REMOTE_ADDR – The IP address of the client.
REMOTE_HOST – The hostname of the client.
REMOTE_USER – The user authenticated by the Web server, if any.
REQUEST_METHOD – A string such as "GET" or "POST".
SERVER_NAME – The hostname of the server.
SERVER_PORT – The port of the server (as a string).

14  HttpRequest.session       中间件属性

15  HttpRequest.site        中间件属性

16  HttpRequest.user       中间件属性,表示当前登录的用户。

   HttpRequest.user实际上是由一个定义在django.contrib.auth.models 中的  user model  类  所创建的对象。

   该类有许多字段,属性和方法。列举几个常用的:        获取更详细信息-->官方文档

    1  字段:

      username    用户名

      first_name

      last_name

      email

      password

      groups

      user_permissions,

      is_staff     布尔值,标明用户是否可以访问admin页面

      is_superuser

      last_login  上一次登陆时间

      date_joined     用户创建时间

    2  属性

      is_authenticated   布尔值,标志着用户是否已认证。在django1.10之前,没有该属性,但有与该属性同名的方法。

    3  方法

      1  HttpRequest.user.get_username()  注意:方法的圆括号在templates标签中必需省略!!

         获取username。尽量使用该方法来代替使用username字段

      2  HttpRequest.user.get_full_name()  注意:方法的圆括号在templates标签中必需省略!!

         获取first_name和last_name

      3  HttpRequest.user.short_name()  注意:方法的圆括号在templates标签中必需省略!!

         获取first_name

      4  HttpRequest.user.set_password(raw_password)  注意:该方法无法在template标签中使用!!

         设置密码

      5  HttpRequest.user.check_password(raw_password)  注意:该方法无法在template标签中使用!!

         如果raw_password与用户密码相等,则返回True

方法:

1  HttpRequest.get_host()            返回请求的源主机。example:  127.0.0.1:8000

2  HttpRequest.get_port()            django1.9的新特性。

3  HttpRequest.get_full_path()     返回完整路径,并包括附加的查询信息。example:  "/music/bands/the_beatles/?print=true"

4  HttpRequest.bulid_absolute_uri(location)      返回location的绝对uri,location默认为request.get_full_path()。

    Example: "https://example.com/music/bands/the_beatles/?print=true"

QueryDict

  是一个类似于Python中字典的一种对象,他是Python中字典的子类,所以继承了字典的所有方法,

  当然QueryDict对字典的某些方法进行了加工,并补充了一些独特的方法。这里列出部分方法。详情请看: 官方文档 。

1  QueryDict.get(key,default=None)   返回key所对应的value,若key不存在,则返回default的值

2  QueryDict.update(other_dict)   更新

3  QueryDict.values()   列出所有的值

4  QueryDict.items()   列出所有的键值对,若一个key有多个值,只显示最后一个值。

5  QueryDict.pop(key)   删除某个键值对

6  QueryDict.getlist(key)   根据输入的key返回一个Python中的list

7  QueryDict.dict()   返回QueryDict的字典的表现形式

django-request获取数据的更多相关文章

  1. request获取数据的几种方法

    1.request.getparameter(); String value=request.getparameter("key"); 2.request.getParameter ...

  2. python - django (request 获取 访问者的 IP)

    使用 Django 获取访问者的 IP if request.META.get('HTTP_X_FORWARDED_FOR'): ip = request.META.get("HTTP_X_ ...

  3. Django框架获取各种form表单数据

    Django中获取text,password 名字:<input type="text" name="name"><br><br& ...

  4. django 使用 request 获取浏览器发送的参数

    django 使用 request 获取浏览器发送的参数     转载请注明出处 https://blog.csdn.net/fanlei5458/article/details/80638348 获 ...

  5. django后台获取相同name名的数据

    django后台获取相同name名的post数据html: <form method="post"> <input type="text" n ...

  6. django - request.POST和request.body获取值时出现的情况

    django request.POST / request.body 当request.POST没有值 需要考虑下面两个要求 1.如果请求头中的: Content-Type: application/ ...

  7. Request三种获取数据的方式

    今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Req ...

  8. SpringMVC从Request域中获取数据

    SpringMVC从Request域中获取数据的三种方式 SpringMVC环境自行搭建, 约定存在如下目录和文件:/WEB-INF/pages/success.jsp 方式一:传入Model对象 前 ...

  9. Django与JS交互的示例代码-django js 获取 python 字典-Django 前后台的数据传递

    Django与JS交互的示例代码 Django 前后台的数据传递 https://www.cnblogs.com/xibuhaohao/p/10192052.html 应用一:有时候我们想把一个 li ...

  10. 5.1 Request 获取请求数据的几种方法

    //获取请求头和请求数据 //请求数据(1.通过超链接 2.通过表单) //获取请求数据的时候一般来说 都要先检查 再使用 public class RequestDemo2 extends Http ...

随机推荐

  1. jwt再度理解

    1,负载部分只用base64编码,是可逆的,不能存放密码 2,加密算法不在乎是对称还是非对称,因为jwt的验签不需要解密 3,一般的验签是用私钥加密签名,公钥验签,和加密反过来,加密是公钥加密,服务器 ...

  2. 代码问题: 【MatConvNet库编译】

    问题1: 老版本的MatConvNet在编译对cuDNN支持的时候,cuDNN的版本是2或者4比较好,官网有明确的描述. 比如我编译用了cuDNN 6.0的版本,在编译 nnconv_cudnn.cu ...

  3. apache的MultipartEntityBuilder文件上传

    本文讲解多文件上传方法,不比较上传有几种方法和效率,而是定向分析apache的httpmime包的MultipartEntityBuilder类,源码包:httpmime-4.5.2.jar 一.常用 ...

  4. Java锁的选择

    1.synchronized: 当只有少量竞争者.synchronized不会引发死锁 2.ReentrantLock:竞争者不少,但是趋势可以预估.使用不当,可能造成死锁.

  5. Tomcat设置UTF-8字符

    进入tomat路径 vim  conf/server.xml

  6. centos7 如何在用户级对资源进行限制

    我们已经知道,centos7上建议使用sytemd进行资源限制. 本文主要介绍如何使用systemd进行用户级资源限制. 以orange用户为例. 方案一 临时有效 配置如下: # systemctl ...

  7. 回看《例说FPGA》---DDR2控制器集成与读写测试

    回看<例说FPGA> ---DDR2控制器集成与读写测试 1.DDR2 IP核的配置 需要弄清楚的选项主要有: PLL reference clock frequency Memory c ...

  8. XE5开发Android程序调用电话相关功能(短信息和电话) [转]

    其实都可以通过intent和URI调用系统功能.Windows程序员可以理解成是ShellExecute.这个是万金油.可以有调用各种功能.后面会介绍. 1.短信息.很简单 方法a.不使用Intent ...

  9. Java Collection - 003 高效的找出两个List中的不同元素

    如题:有List<String> list1和List<String> list2,两个集合各有上万个元素,怎样取出两个集合中不同的元素? 方法1:遍历两个集合 public ...

  10. vue中的计算属性中的坑,

    new Vue({ el: '#app', data: { msg:'121', val: '', }, computed:{ val:function(){ return 3; } }, }); 这 ...