django-request获取数据
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
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获取数据的更多相关文章
- request获取数据的几种方法
1.request.getparameter(); String value=request.getparameter("key"); 2.request.getParameter ...
- python - django (request 获取 访问者的 IP)
使用 Django 获取访问者的 IP if request.META.get('HTTP_X_FORWARDED_FOR'): ip = request.META.get("HTTP_X_ ...
- Django框架获取各种form表单数据
Django中获取text,password 名字:<input type="text" name="name"><br><br& ...
- django 使用 request 获取浏览器发送的参数
django 使用 request 获取浏览器发送的参数 转载请注明出处 https://blog.csdn.net/fanlei5458/article/details/80638348 获 ...
- django后台获取相同name名的数据
django后台获取相同name名的post数据html: <form method="post"> <input type="text" n ...
- django - request.POST和request.body获取值时出现的情况
django request.POST / request.body 当request.POST没有值 需要考虑下面两个要求 1.如果请求头中的: Content-Type: application/ ...
- Request三种获取数据的方式
今天在做ajax请求后台代码时,发现ajax的方法都对,但就是请求不了后台代码,后来在同事帮助下才发现前台定义了两个相同参数导致请求出错. 下面记录一下request三种获取数据的方式: 1. Req ...
- SpringMVC从Request域中获取数据
SpringMVC从Request域中获取数据的三种方式 SpringMVC环境自行搭建, 约定存在如下目录和文件:/WEB-INF/pages/success.jsp 方式一:传入Model对象 前 ...
- Django与JS交互的示例代码-django js 获取 python 字典-Django 前后台的数据传递
Django与JS交互的示例代码 Django 前后台的数据传递 https://www.cnblogs.com/xibuhaohao/p/10192052.html 应用一:有时候我们想把一个 li ...
- 5.1 Request 获取请求数据的几种方法
//获取请求头和请求数据 //请求数据(1.通过超链接 2.通过表单) //获取请求数据的时候一般来说 都要先检查 再使用 public class RequestDemo2 extends Http ...
随机推荐
- ONVIF让NVR与网络监控摄像机更"亲密"
NVR的发展目前看主要分为二大类,一类是接入级的嵌入式NVR,其主要针对主流的IP摄像机研发的一种NVR. 另一类是针对社区和平安城市级的大型NVR,其主要采用的是以高端服务器软.硬件结构为基础,以传 ...
- Visual Studio Code 使用
VS Code 快捷键: 快捷键 作用 Option+Up 或 Option+Down 上下移动一行 Shift+Option+Up 或 Shift+Option+Down 向上向下复制一行 VS C ...
- Linux 下的三种时间介绍
Linux 下的三种时间介绍: Access Time:简写为atime,表示文件访问的时间,当文件内容被访问时,更新atime时间 Modify Time:简写为mtime,表示文件内容修改的时间, ...
- Hanlp在java中文分词中的使用介绍
项目结构 该项目中,.jar和data文件夹和.properties需要从官网/github下载,data文件夹下载 项目配置 修改hanlp.properties: 1 #/Test/src/han ...
- 在Centos7上安装配置ss-libev Proxifier
http://note.youdao.com/noteshare?id=6f768652c33a64d6b8935eb08b10a213 servier:ss-libev client:ss+Prox ...
- Visual Studio 2008(C#)XML注释提取成帮助文档的方法
Visual Studio 2008(C#)XML注释提取成帮助文档的方法 1.给方法和类添加XML注释 可以手动添加,具体规则可以看MSDN:http://msdn.microsoft.co ...
- elasticsearch mysql logstash 同步 简单配置【环境centos7 elasticsearch 6.0 mysql 5.7 logstash 6.0】
插件:logstash-input-jdbc 安装插件logstash-input-jdbc 1.安装 gem yum install gem 2.替换国内的镜像 gem sources -- ...
- QT建立简单的计时器程序
1.创建一个窗口项目 2.拖一个lcd控件命名lcdNumber,两个pushbutton,分别命名pbStart与pbEnd 3.mainWindow.h添加以下代码 private slots: ...
- django之中间件middleware
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...
- Qt 常用类 (4)—— QPoint
转载:落叶知秋时 QPoint 类代表一个坐标点,实现在 QtCore 共享库中.它可以认为是一个整型的横坐标和一个整型的纵坐标的组合. 构造 QPoint 类支持以下两种构造方式: QPoint() ...