zoukankan      html  css  js  c++  java
  • Django request对象参数解析以及实现

    HttpRequest对象

    HttpRequest

    属性

    除非另有说明,否则所有属性都应被视为只读。

    HttpRequest.scheme

    表示请求方案的字符串(httphttps 通常)。

    HttpRequest.body

    原始HTTP请求主体为字节串。这对于以不同于常规HTML表单的方式处理数据很有用:二进制图像,XML有效负载等。对于处理常规表单数据,请使用 HttpRequest.POST

    您也可以HttpRequest使用HttpRequest.read()文件状界面 从中读取内容HttpRequest.readline()使用这些I / O流方法之一读取请求访问body属性将产生一个RawPostDataException

    HttpRequest.path

    一个字符串,代表请求的页面的完整路径,不包括方案或域。

    例: "/music/bands/the_beatles/"

    HttpRequest.path_info

    在某些Web服务器配置下,主机名之后的URL部分被分为脚本前缀部分和路径信息部分。path_info无论使用什么Web服务器,属性始终包含路径的路径信息部分。使用它代替,path可以使您的代码更容易在测试服务器和部署服务器之间移动。

    例如,如果WSGIScriptAlias您的应用程序的设置为 "/minfo",则path可能是"/minfo/music/bands/the_beatles/" 和path_info将会是"/music/bands/the_beatles/"

    HttpRequest.method

    一个字符串,代表请求中使用的HTTP方法。保证是大写的。例如:

    if request.method == 'GET':
        do_something()
    elif request.method == 'POST':
        do_something_else()
    
    HttpRequest.encoding

    一个字符串,表示用于解码表单提交数据的当前编码(或None,表示使用该DEFAULT_CHARSET设置)。您可以写入此属性以更改访问表单数据时使用的编码。任何后续的属性访问(例如从GET读取POST)都将使用新encoding值。如果您知道表单数据不在DEFAULT_CHARSET 编码中,则很有用

    HttpRequest.content_type

    CONTENT_TYPE标头解析的表示请求的MIME类型的字符串 

    HttpRequest.content_params

    CONTENT_TYPE 标头中包含键/值参数的字典

    HttpRequest.GET

    包含所有给定HTTP GET参数的类字典对象。请参阅QueryDict下面的 文档。

    HttpRequest.POST

    包含所有给定HTTP POST参数的类字典对象,条件是请求包含表单数据。请参阅QueryDict下面的 文档。如果您需要访问请求中发布的原始或非格式数据,请HttpRequest.body改为通过属性进行访问 

    可以通过带有空POST 字典的POST发出请求-例如,如果通过POST HTTP方法请求了表单,但其中不包含表单数据。因此,您不应该使用 POST方法进行检查。而是使用(请参阅)。if request.POSTif request.method == "POST"HttpRequest.method

    POST包含文件上传信息。请参阅FILES

    HttpRequest.COOKIES

    包含所有cookie的字典。键和值是字符串。

    HttpRequest.FILES

    包含所有上载文件的类字典对象。每个键 FILES都是name来自的中的每个值都是一个<input type="file" name="">FILESUploadedFile

    有关更多信息,请参见管理文件

    FILES仅当请求方法为POST且<form>发布到请求的方法为时,才会包含数据 enctype="multipart/form-data"否则,FILES将是一个空白的类似于字典的对象。

    HttpRequest.META

    包含所有可用HTTP标头的字典。可用的标头取决于客户端和服务器,但以下是一些示例:

    • CONTENT_LENGTH –请求正文的长度(以字符串形式)。
    • CONTENT_TYPE –请求正文的MIME类型。
    • HTTP_ACCEPT –响应的可接受的内容类型。
    • HTTP_ACCEPT_ENCODING –响应的可接受编码。
    • HTTP_ACCEPT_LANGUAGE –可接受的响应语言。
    • HTTP_HOST –客户端发送的HTTP Host标头。
    • HTTP_REFERER –推荐页面(如果有)。
    • HTTP_USER_AGENT –客户端的用户代理字符串。
    • QUERY_STRING –查询字符串,作为单个(未分析)字符串。
    • REMOTE_ADDR –客户端的IP地址。
    • REMOTE_HOST –客户端的主机名。
    • REMOTE_USER –由Web服务器验证的用户(如果有)。
    • REQUEST_METHOD–诸如"GET"的字符串"POST"
    • SERVER_NAME –服务器的主机名。
    • SERVER_PORT –服务器的端口(以字符串形式)。

    除了CONTENT_LENGTH和之外CONTENT_TYPE,如上所述,META通过将所有字符都转换为大写字母,用下划线替换所有连字符,并HTTP_在名称中添加前缀,将请求中的所有HTTP标头转换为因此,例如,称为的标头X-Bender将映射到METAkey HTTP_X_BENDER

    请注意,runserver该名称会删除名称中带有下划线的所有标头,因此您不会在中看到它们META这样可以防止基于下划线和破折号之间的歧义的标头欺骗在WSGI环境变量中均被标准化为下划线。它与Nginx和Apache 2.4+等Web服务器的行为相匹配。

    HttpRequest.headers是访问所有HTTP前缀标头以及plusCONTENT_LENGTH的更简单方法CONTENT_TYPE

    HttpRequest.headers

    不区分大小写,类似于dict的对象,该对象提供对请求中所有HTTP前缀的标头(plusContent-LengthContent-Type)的访问。

    每个标题的名称在显示时都带有标题框(例如User-Agent)。您可以不区分大小写地访问标头:

    >>> request.headers
    {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...}
    
    >>> 'User-Agent' in request.headers
    True
    >>> 'user-agent' in request.headers
    True
    
    >>> request.headers['User-Agent']
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
    >>> request.headers['user-agent']
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
    
    >>> request.headers.get('User-Agent')
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
    >>> request.headers.get('user-agent')
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)

    #############
    文件请求

    class TestView(APIView):

    def post(self,request,*args,**kwargs):
    #print('request.body', request.body)
    data=request.data
    file=request.FILES.get('file')
    print('HI,,,,,,,,,,',request.FILES)
    # for k,v in request.FILES.items():
    # # v是对像
    # print(k,v.read())
    print('file',file)
    print('file.getlist',request.FILES.getlist(key='file'))
    print('file.data',request.data)
    print('file.name',file.name)
    print('file.size',file.size)
    print('file.content_type',file.content_type)
    print('request.post',request.POST)
    # filenames=[]
    # for f in request.FILES.getlist('file'):
    # fname=f.name
    # filenames.append(fname)
    # print('file.read()',file.read())
    return CommonResponse({'ame':1,'code':0})
    #return HttpResponse(file.read(), content_type='application/octet-stream')
     
  • 相关阅读:
    CentOS安装使用.netcore极简教程(免费提供学习服务器)
    新生命团队netcore服务器免费开放计划
    线程池ThreadPool及Task调度死锁分析
    NetCore版RPC框架NewLife.ApiServer
    NewLife.Net——管道处理器解决粘包
    NewLife.Net——网络压测单机2266万tps
    NewLife.Net——构建可靠的网络服务
    NewLife.Net——开始网络编程
    搬家
    借助Redis做秒杀和限流的思考
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/13975453.html
Copyright © 2011-2022 走看看