django中怎么利用request获取请求的IP 地址
发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,django中怎么利用request获取请求的IP 地址,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。安装第三方库pip install
千家信息网最后更新 2025年02月12日django中怎么利用request获取请求的IP 地址
django中怎么利用request获取请求的IP 地址,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
安装第三方库
pip install django-ipware
view 里调用
一般用法:
from ipware.ip import get_ip # 导入包def view_test(request): ip = get_ip(request) # 获取 request 的请求 IP
site-packages/ipware/ip.py 源码:
from .utils import is_valid_ipfrom . import defaults as defsNON_PUBLIC_IP_PREFIX = tuple([ip.lower() for ip in defs.IPWARE_NON_PUBLIC_IP_PREFIX])TRUSTED_PROXY_LIST = tuple([ip.lower() for ip in defs.IPWARE_TRUSTED_PROXY_LIST])def get_ip(request, real_ip_only=False, right_most_proxy=False): """ Returns client's best-matched ip-address, or None """ best_matched_ip = None for key in defs.IPWARE_META_PRECEDENCE_ORDER: value = request.META.get(key, request.META.get(key.replace('_', '-'), '')).strip() if value is not None and value != '': ips = [ip.strip().lower() for ip in value.split(',')] if right_most_proxy and len(ips) > 1: ips = reversed(ips) for ip_str in ips: if ip_str and is_valid_ip(ip_str): if not ip_str.startswith(NON_PUBLIC_IP_PREFIX): return ip_str if not real_ip_only: loopback = defs.IPWARE_LOOPBACK_PREFIX if best_matched_ip is None: best_matched_ip = ip_str elif best_matched_ip.startswith(loopback) and not ip_str.startswith(loopback): best_matched_ip = ip_str return best_matched_ipdef get_real_ip(request, right_most_proxy=False): """ Returns client's best-matched `real` `externally-routable` ip-address, or None """ return get_ip(request, real_ip_only=True, right_most_proxy=right_most_proxy)def get_trusted_ip(request, right_most_proxy=False, trusted_proxies=TRUSTED_PROXY_LIST): """ Returns client's ip-address from `trusted` proxy server(s) or None """ if trusted_proxies: meta_keys = ['HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR'] for key in meta_keys: value = request.META.get(key, request.META.get(key.replace('_', '-'), '')).strip() if value: ips = [ip.strip().lower() for ip in value.split(',')] if len(ips) > 1: if right_most_proxy: ips.reverse() for proxy in trusted_proxies: if proxy in ips[-1]: return ips[0] return None
用途:用装饰器保存 访问 IP
import refrom django.core.cache import cachefrom django.shortcuts import renderfrom ipware.ip import get_ipdef get_ipv4(ip): """ 获取 IPv4 :param ip: :return: """ # IP patterns ipv4_re = r'(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}' # ipv6_re = r'\[[0-9a-f:\.]+\]' # (simple regex, validated later) ipv4 = re.search(ipv4_re, ip) if ipv4: return ipv4.group() return ipdef save_ip(ip): """ 保存 IP :param ip: :return: """ ip = get_ipv4(ip) cache_ip = cache.get(ip) if not cache_ip: cache.set(ip, int(time.time()), CACHE_TIMEOUT_ARTICLE) visit_status = UserIP.objects.filter(ip=ip).exists() if visit_status: ip_info = UserIP.objects.get(ip=ip) ip_info.visit_num += 1 ip_info.save(update_fields=["visit_num", "time_updated"]) else: ip_info = UserIP( ip=ip, location=get_ip_location(ip), visit_num=1, ) ip_info.save()# 这是一个装饰器的函数,外层的函数是用来接收被装饰函数的的def save_visit_ip(func): """ 访问视图函数时保存 访问ip :param func: :return: """ def inner(request, *args, **kwargs): ip = get_ip(request) save_ip(ip) return func(request, *args, **kwargs) return inner@save_visit_ipdef status_code(request): code = request.GET.get("code", None) status_code = { "200": "访问正常
", "403": "
访问被拒
", "404": "
资源未找到
", "500": "
服务器内部错误
", "503": "
服务器维护中
", } if code in status_code.keys(): response = HttpResponse(status_code[code]) response.status_code = int(code) return response return render(request, "web_status_code.html", locals())
看完上述内容,你们掌握django中怎么利用request获取请求的IP 地址的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
函数
地址
内容
方法
更多
服务器
问题
服务
束手无策
为此
原因
外层
对此
技能
源码
用途
第三方
篇文章
经验
行业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
美国服务器是做什么用
精锐达网络技术有限公司
智能储物柜软件开发费用
服务器等级80
知网服务器无响应
用户不改dns访问域服务器
通信与网络技术国家中心
深圳中兴通讯的软件开发职位好吗
mysql 链接服务器
计算机网络技术需要运行什么软件
网络技术教育应用
网络安全辩论赛消极辩词
2022年网络安全比赛
服务器监控王
职业院校网络安全调查报告
c#登录界面文件含数据库
勤哲excel服务器内容没了
软件开发网站设计研发设备
上海软件开发大会
软件开发社招简历模板下载
网络安全处理是一个周而复始
战地4服务器好少
采用无线网络技术是什么
个人软件开发所得如何纳税
db2数据库怎么查看密码
如何增强网络安全常识
大连在线学习软件开发
敏捷软件开发视频
岳阳串口服务器怎么收费
图像加密属于网络安全