博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django-request获取数据
阅读量:6814 次
发布时间:2019-06-26

本文共 7119 字,大约阅读时间需要 23 分钟。

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 是一个无状态,不连续的协议。如果想让服务器记住当前的访问对象,就需要记录请求者的一些信息来达到这个目的。
# 设置sessionrequest.session["name"] = "root"# 获取sessionname = 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            
input
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)
View Code

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的字典的表现形式

 

转载于:https://www.cnblogs.com/fmgao-technology/p/9987609.html

你可能感兴趣的文章
分布式工作流任务调度系统Easy Scheduler正式开源
查看>>
Flutter实战(一)写一个天气查询的APP
查看>>
Python零基础学习笔记(十二)—— 字符串及其常用方法
查看>>
Webpack 和 Gulp 构建伪命令行项目
查看>>
在线面试, 前端, 提纲, 草稿
查看>>
hive_异常_01_ Terminal initialization failed; falling back to unsupported
查看>>
分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器
查看>>
Vue - day1
查看>>
kvm.virsh常用命令篇
查看>>
[Hive]Hive使用指南四 客户端导入数据
查看>>
10.JUC线程高级-线程八锁
查看>>
Apache Flink轻量级异步快照机制源码分析
查看>>
PostgreSQL 11 preview - 分区表 增强 汇总
查看>>
MediaCodec在Android视频硬解码组件的应用
查看>>
用JAVA自己画一张二维码
查看>>
Flutter Engine线程管理与Dart Isolate机制
查看>>
美国泛达公司:下一代数据中心的光缆布线系统
查看>>
以太坊(ethereum)技术开发相关资料
查看>>
Pandas数据排序
查看>>
gulp常用插件
查看>>