zoukankan      html  css  js  c++  java
  • Django request.META包含的数据及获取用户访问IP方法

    request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent(通常是浏览器的名称和版本号)。 注意,Header信息的完整列表取决于用户所发送的Header信息和服务器端设置的Header信息。 

    因为 request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。 (HTTP header信息是由用户的浏览器所提交的、不应该给予信任的“额外”数据,因此你总是应该好好设计你的应用以便当一个特定的Header数据不存在时,给出一个优雅的回应。)你应该用 try/except 语句,或者用Python字典的 get() 方法来处理这些“可能不存在的键”。

    我们可以写一个函数来获取所有的字典项:

    def ergodic_meta(request):
    
        tuple_dict = request.META.items()  #将字典转换成可遍历的元组。
    
        tuple_dict.sort()   #对元组进行排序,方便查看。
    
        html = []
    
        for k, v in tuple_dict:
    
            html.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))
    
        return HttpResponse('<table>%s</table>' % '
    '.join(html))

    使用django来获取用户访问的IP地址:

    如果用户是正常情况下其字典的KEY键名为‘’REMOTE_ADDR‘’:

    request.META['REMOTE_ADDR']

    但是有些网站服务器会使用ngix等代理http,或者是该网站做了负载均衡,导致使用remote_addr抓取到的是1270.0.1,这时使用HTTP_X_FORWARDED_FOR才获得是用户的真实IP。推荐使用以下代码:

    if 'HTTP_X_FORWARDED_FOR' in request.META: 
       ip
    = request.META.get('HTTP_X_FORWARDED_FOR')
    else:
       ip
    = request.META.get('REMOTE_ADDR')
  • 相关阅读:
    Windows 10下CUDA及cuDNN的安装 —— Pytorch
    Centos7 python3环境搭建 兼容python2.7
    VMware中Linux虚拟机与Windows主机共享文件夹
    基于阿里云服务器的网站搭建 新手教程
    CVE-2017-11882 漏洞分析总结 新手漏洞分析详细教程
    Linux基本命令 和 Regex 正则表达式
    Shell 编程 基础用法
    Perl 编程 基础用法
    Python3 网络通信 网络聊天室 文件传输
    Ant Design of Angular
  • 原文地址:https://www.cnblogs.com/sly27/p/10175395.html
Copyright © 2011-2022 走看看