django中怎么利用request获取请求的IP 地址
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,django中怎么利用request获取请求的IP 地址,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。安装第三方库pip install
千家信息网最后更新 2025年12月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安全错误
数据库的锁怎样保障安全
怎么提升数据库效率
斗客网络技术有限公司
复旦思科网络技术学院
樱花服务器ssr
密云先进网络技术
数据库删除实验报告
安徽pdu服务器电源哪家便宜
成都微娱软件开发有限公司评论
福建千游网络技术诈骗
dede 数据库结构
网络安全技能大赛图片
地堡主服务器
sql数据库编写代码
家庭服务器软件
熟悉软件开发什么意思
迪科数金的软件开发怎么样
顺义回收服务器价目表
网站服务器价的格
底层软件开发属于哪一专业
韩服传奇2 数据库
成都有哪些是软件开发学校
思科网络技术大全
信阳市网络安全监察在哪里
浙江专业网络技术价目表
潮州招商租赁管理软件开发
空间数据库原理与应用复习资料
dede 数据库结构
个人怎么接软件开发的活
csgo kz服务器
配置dhcp服务器无法获取ip