django中怎么利用request获取请求的IP 地址
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,django中怎么利用request获取请求的IP 地址,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。安装第三方库pip install
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
新华互联网科技
云信互联网科技有限公司
互联网扶贫科技
互联网公司 科技公司
北京互联网科技有限公司
为想互联网科技
狮子座互联网科技培训
长亮科技 互联网金融
互联网科技公司名称
顺网科技2021年互联网排名
茂名市互联网科技产业园
互联网科技产业特征
科技类公司包括互联网吗
中国互联网公司排名锤子科技
威龙国际互联网科技公司
工业互联网展湾科技股份有限公司
小米互联网科技园入驻
卡尔迅互联网科技有限公司
互联网高科技行业有哪些企业
互联网领先科技活动
手冲咖啡和咖啡机区别
云之行互联网科技
科技互联网项目
科技与互联网发展
万达互联网科技
润盈互联网科技
互联网公司科技股
迪庆互联网科技招生
长沙互联网科技
科技互联网海报