zoukankan      html  css  js  c++  java
  • Django 请求参数

    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_ 并转成大写,作为键来获取值

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

    AttributeDescription
    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

  • 相关阅读:
    集合:HashMap原理
    监控管理
    jvm(内存分配和回收策略、字节码执行引擎、运行时栈的结构)
    jvm:收集器
    多线程(线程的四种创建方式)
    scrapy之下载器中间件(Download Middleware)
    scrapy之Spider
    Scrapy之原理&提取数据
    小程序之请求服务器资源注意问题
    小程序之页面跳转
  • 原文地址:https://www.cnblogs.com/icemonkey/p/10506337.html
Copyright © 2011-2022 走看看