Django 请求参数

1.获取URL路径中的参数

需求:假设用户访问127.0.0.1/user/1/2,你想获取1,2。应该怎么操作呢?

(1)未命名参数(位置参数)

# 在项目下的urls.py下增加设置:
url(r'^user/(\d+)/(\d+)$',views.index) # 在user.views的index视图中:
def index(request,a,b): # 接受的参数按顺序的
return HttpResponse("获得数据 %s %s"%(a,b))

(2)命名参数(关键字参数)

# 在项目下的urls.py下增加设置:
url(r'^user/(?P<category>\d+)/(?P<id>\d+)$',views.index) # 在user.views的index视图中:
def index(request,id,category): # 接受的参数可以不用按顺序的
return HttpResponse("获得数据 %s %s"%(category,id))

输出结果均是  获得数据 1 2

2.获取查询字符串

需求:获取127.0.0.1:8000/user?id=1&pid=99的查询字符串的值

# 在项目下的urls.py下增加设置:
url(r'^user/$',views.index) # 在user.views的index视图中:
def index(request):
id = request.GET.get("id")
pid = request.GET.get("pid")
return HttpResponse("获得数据 %s %s"%(id,pid))

注意:查询字符串的获取与请求方式无关:不管是 GET 还是 POST请求,都可以通过request.GET 属性来获取!!!

3.获取表单数据

用postman发送一个表单请求。

def index(request):
id = request.POST.get("id")
pid = request.POST.get("pid")
return HttpResponse("获得数据 %s %s"%(id,pid))

注意:request.POST 只能用来获取POST方式的请求体表单数据!

4.获取非表单类型

  • request.body属性:获取非表单类型的请求体数据,如:JSON、XML等,获取到的数据类型为bytes类型
  • 获取数据后,自己解析数据取出参数
def index(request):
json_str = request.body
json_str = json_str.decode() # python3.6及以上不用这一句代码
dict_data = json.loads(json_str) # loads把str转换为dict,dumps把dict转换为str
id = dict_data.get("id")
pid = dict_data.get("pid")
return HttpResponse("获得数据 %s %s"%(id,pid))

5.获取请求头的内容

常见的请求头如下:

  • 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).

获取请求头内容的用META

示例:

def index(request):
ip = request.META.get("REMOTE_ADDR")
return HttpResponse("你的ip地址是%s"%ip)

6.获取自定义请求头的内容

用postman增加一个自定义的请求头,key=id,value=1。那么应该怎么取呢?

代码如下:

def index(request):
id = request.META.get("HTTP_ID")
return HttpResponse("你的id:%s"%id)

注意:获取自定义的请求头属性值时,需要添加前缀 HTTP_ 并转成大写,作为键来获取值

附录(获取各种请求参数的方法):

Attribute Description
path 请求页面的全路径,不包括域名端口参数。例如: /users/index
method 一个全大写的字符串,表示请求中使用的HTTP方法,常用值:GET, POSTDELETEPUT等。以下三种为 GET 请求:

  • form 表单默认提交(或者method指定为get)
  • 在浏览器中输入地址直接请求
  • 网页中的超链接(a标签)
user
  • 已登录:AbstractUser对象;
  • 未登录:AnonymousUser对象;
    判断是否已经登录: request.user.is_authenticated(),返回true表示已经登录
GET 类似字典的 QueryDict 对象,包含url中所有的查询字符串参数
POST 类似字典的 QueryDict 对象,包含 POST 请求的所有键值对参数(表单数据)
body 获取原始的请求体数据,获取到的数据为bytes类型
FILES 一个类似于字典的对象,包含所有的上传文件
META python 字典类型,封装了请求头headers中的数据
REMOTE_ADDR – 客户端的IP地址 
REQUEST_METHOD — 一个字符串,例如"GET" 或"POST
CONTENT_TYPE – 请求的正文的MIME 类型
注意:对于用户添加到请求头中的键值,Django会给键加上前缀 HTTP_再转换成大写,再把键值保存到request.META中 
COOKIES 一个标准的 python 字典,包含所有的 cookies, 键和值都是字符串
session 可读可写的类似字典的对象: django.contrib.sessions.backends.db.SessionStore
Django 提供了 session 模块,默认就会开启用来保存 session 数据

QueryDict对象:

  • 所在的包: django.http.QueryDict
  • HttpRequest 对象中的 GET 和 POST 属性 都是 QueryDict类型
  • 与python字典不同:QueryDict对象一个键可以保存多个值
  • get()方法

    • 根据键获取值
    • 如果一个键同时拥有多个值,将获取最后一个值
    • 如果键不存在则返回None值,可以设置返回自定义的默认值

      dict.get('键',默认值)
  • getlist()方法

    • 根据键获取多个值,值以列表返回
    • 如果键不存在则返回空列表[]

      dict.getlist('键',默认值)

CP https://www.cnblogs.com/chichung/p/9873425.html

Django 请求参数的更多相关文章

  1. django获取请求参数

    1.获取URL路径中的参数 需求:假设用户访问127.0.0.1/user/1/2,你想获取1,2.应该怎么操作呢? (1)未命名参数(位置参数) # 在项目下的urls.py下增加设置: url(r ...

  2. django 修改 request 对象中的请求参数, 并重新赋值给 request 对象

    直接上代码, 实现流程看代码及注释 def your_view(self, request): method = request.method if method == "GET" ...

  3. 爬虫 http原理,梨视频,github登陆实例,requests请求参数小总结

    回顾:http协议基于请求响应的方式,请求:请求首行 请求头{'keys':vales} 请求体 :响应:响应首行,响应头{'keys':'vales'},响应体. import socket soc ...

  4. Django - Ajax - 参数

    一.Jquery实现Ajax url   type   data   success   error  complete  statusCode {% load staticfiles %} < ...

  5. django-rest-framework解析请求参数

    django-rest-framework解析请求参数 前言 前面的文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式 ...

  6. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

  7. Django请求生命周期和ORM

    dajngo请求生命周期 django请求生命周期是:当用户在browser点击URL后,在django后台都发生了什么. 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中url在 ...

  8. Django框架10 /sweetalert插件、django事务和锁、中间件、django请求生命周期

    Django框架10 /sweetalert插件.django事务和锁.中间件.django请求生命周期 目录 Django框架10 /sweetalert插件.django事务和锁.中间件.djan ...

  9. DRF对Django请求响应做了技术升级

    Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优 ...

随机推荐

  1. 渐进增强与优雅降级 && css3中普通属性和前缀属性的书写顺序

     什么是渐进增强与优雅降级? 服务器和浏览器是不同的.当服务器有新版本时,开发人员直接使用新版本的服务器提供服务即可:但是浏览器端,不同的用户使用的浏览器版本不同,型号差异大,我们不可能让用户强制更新 ...

  2. SPSS学习系列之SPSS Modeler的功能特性(图文详解)

    不多说,直接上干货! Win7/8/10里如何下载并安装最新稳定版本官网IBM SPSS Modeler 18.0 X64(简体中文 / 英文版)(破解永久使用)(图文详解)   我这里,是以SPSS ...

  3. 解决LNMP环境下WordPress后台缺少”WP-ADMIN”路径

    LNMP一键安装包也是老左比较喜欢使用的环境之一,昨天帮助一个网友搭建LNMP环境后发现登陆WP后台之后点击左侧的菜单发现直接跳转404错误,开始还以为数据库问题,视线朝上一看原来在地址栏中的路径缺少 ...

  4. Centos虚拟机SVN的安装和使用http方式访问svn服务器

    1.查看是否安装旧版SVNrpm -qa | grep subversion2.卸载旧版本SVNyum remove subversion3.安装SVNyum -y install subversio ...

  5. C/C++内存管理详解

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄 ...

  6. 共识算法:Paxos

    两阶段提交 Two-phase Commit(2PC):保证一个事务跨越多个节点时保持 ACID 特性: 两类节点:协调者(Coordinator)和参与者(Participants),协调者只有一个 ...

  7. java-双大括号实例初始化的反模式

    今天在看springboot的batch时, 看到这样一段代码, 直接把我看懵了, 于是找了一下, 发现这 两个大括号 {{  叫实例初始化器 FlatFileItemReader<Person ...

  8. 3-nginx.conf参数配置

    –#定义Nginx运行的用户和用户组 –user www www; –#nginx进程数,建议设置为等于CPU总核心数. –worker_processes8; –#全局错误日志定义类型,[ debu ...

  9. 【ASP.NET Core】处理异常--转

    老周写的[ASP.NET Core]处理异常非常的通俗易懂,拿来记录下. 转自老周:http://www.cnblogs.com/tcjiaan/p/8461408.html 今天咱们聊聊有关异常处理 ...

  10. springMVC实现json

    很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互. 一.概要 JSON(JavaScri ...