zoukankan      html  css  js  c++  java
  • 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)
    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的字典的表现形式

  • 相关阅读:
    【DUBBO】dubbo架构详解(转载)
    【数据库】sql连表查询
    第十三章 三种非对称加密算法总结
    第十二章 非对称加密算法-RSA
    第十一章 非对称加密算法--DH
    第十章 五种对称加密算法总结
    第九章 对称加密算法--IDEA
    第八章 对称加密算法--AES
    第七章 对称加密算法--DES
    第六章 三大消息摘要算法总结
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9987609.html
Copyright © 2011-2022 走看看