• 104. HttpRequest对象详解


    WSGIRequest 对象常用的属性和方法:

    WSGIRequest对象常用的属性:

    WSGIRequest对象大部分属性都是只读的,因为这些属性是从客户端上传上来的,没必要做任何的修改。以下对一些常用的属性进行解释:

    1.path: 请求服务器的完整“路径”,但不包含域名和参数。比如http://www.baidu.com/xxx/yyy/, 那么path就是/xxx/yyy/。
    2.method: 代表的是当前请求的http方法,比如是GET还是POST。
    3. GET: 一个django.http.request.QueryDict 对象。操作起来类似于字典。这个属性中包含了所有以?xxx=xxx的方式上传上来的参数。包含了所有的查询字符串。
    4.POST:也是一个django.http.request.QueryDict对象。这个属性中包含了所有以POST方式上传上来的参数。
    5.FILES:也是一个django.http.request.QueryDict对象。这个属性中包含了所有以POST方式上传上来的参数。
    6.COOKIES:一个标准的Python字典,包含所有的cookie,键值对都是字符串类型。
    7.sessions:一个类似于字典的对象。用来操作服务器的session。
    8.META:存储的客户端发送上来的所有header信息。
    1.CONTENT_LENGTH:请求的正文的长度(是一个字符串)。
    2.CONTENT_TYPE:请求的正文的MIME类型。
    3.HTTP_ACCEPT:响应可接收的Content-Type。
    4.HTTP_ACCEPT_ENCODING:响应可接收的编码。
    5.HTTP_ACCEPT_LANGUAGE:响应可接收的语言。
    6.HTTP_HOST:客户端发送的HOST值。
    7.HTTP_REFERER:在访问这个页面上一个页面的url。
    8.QUERY_STRING: 单个字符串形式的查询字符串(未解析过的形式)。
    9.REMOTE_ADDR:客户端的IP地址。如果服务器使用了nginx做反向代理或者是负载均衡,那么这个值返回的是127.0.0.1,这时候可以使用HTTP_X_FORWAROED_FOR来获取,所以获取ip地址的代码片段如下:
    if request.META.has_key('HTTP_X_FORWARDED_FOR'):
        ip = request.META['HTTP_X_FORWARDED_FOR']
    else:
        ip = request.META['REMOTE_ADDR']
    
    REMOTE_HOST:客户端的主机名。
    REQUEST_METHOD:请求方法。一个字符串类似于GET或者POST。
    SERVER_NAME:服务器域名。
    SERVER_PORT:服务器端口号,是一个字符串类型。

    WSGIRequest对象常用方法:

    1.is_secure():是否是采用https协议。
    2.is_ajax():是否采用ajax发送的请求。原理就是判断请求头中是否存在X-Requested-With:XMLHttpRequest。
    print(request.is_ajax())
    # False 通过判断请求的头中是否存在,X-Responsed-With=XMLHttpRequest =>True
    
    3.get_host():服务器的域名。如果在访问的时候还有端口号,那么就会加上端口号。比如:www.baidu.com:9000。

    4.get_full_path():返回完整的path。如果有查询字符串,还会加上查询字符串,比如/book/?username=guyan。

    5.get_raw_uri():获取请求的完整url。

    QueryDict对象:

    我们平时用的request.GET对象和request.POST都是QueryDict对象,这个对象继承dict,因此用法跟dict相差无几。其中用的比较多的是get方法和getlist方法。
    1.get方法:用来获取指定的key值,如果没有这个key,那么会返回None。
    2.getlist方法:如果浏览器上传来的key对应的值有多个,那么就需要通过这个方法获取。

    如果客户端发送的是GET请求,就返回添加用户信息的页面;如果客户端发送的是POST请求,就将客户端发送的信息进行保存到数据库中。示例代码如下

    def add(request):
       == # 如果客户端发送的是get请求,就返回一个添加用户的页面;
        # 如果客户端发送的是POST请求,就将客户端发送的信息进行保存到数据库中==
        if request.method == 'GET':
            return render(request, 'book/static/add.html')
        else:
            title = request.POST.get('title')
            content = request.POST.get('content')
            teconologies = request.POST.getlist('teconologies')
            print(teconologies)
            users = User.objects.create(title=title, content=content, teconologies=teconologies)
            return HttpResponse('add 成功')
    
    

    其中add.html的示例代码如下:

    <form action="{% url 'add' %}" method="post">
        <table>
            <tbody>
            <tr>
                <td>作者</td>
                <td><input type="text" name="title" ></td>
            </tr>
            <tr>
                <td>内容</td>
                <td><input type="text" name="content"></td>
            </tr>
            <tr>
                <td>擅长技术:</td>
                <td>Python<input type="checkbox" name="teconologies"></td>
                <td>Django<input type="checkbox" name="teconologies"></td>
            </tr>
            <tr><td><input type="submit" value="提交"></td></tr>
            </tbody>
        </table>
    </form>
    
    始于才华,忠于颜值;每件事情在成功之前,看起来都是天方夜谭。一无所有,就是无所不能。
  • 相关阅读:
    HDU-5980
    HDU-5974
    HDU-5979
    关于position的定位
    javascript学习笔记w3chool
    表单相关css技巧
    fis压缩工具的使用
    将HTML页面内容存入json数组
    中介PHP连接前台HTML与数据库MySQL
    lesscss的使用
  • 原文地址:https://www.cnblogs.com/guyan-2020/p/12293260.html
Copyright © 2020-2023  润新知