django --获取用户真实ip、中间件

获取用户真实ip(中间件)

app下新建一个py文件

from django.utils.deprecation import MiddlewareMixin
from requests import Response
import requests
import threading


class GETAddressMiddleWare(MiddlewareMixin):
    '''获取用户IP的中间件'''

    def process_request(self, request):
        '''执行请求前的中间件'''
        ip = request.META.get("HTTP_X_FORWARDED_FOR", "")
        if not ip:
            ip = request.META.get('REMOTE_ADDR', "")
        client_ip = ip.split(",")[-1].strip() if ip else ""
        print('当前请求IP为-->{}'.format(client_ip))
        # t = threading.Timer(0, get_ip, (str(client_ip), ))
        # t.start()

    def process_response(self, request, response):
        # 基于请求响应
        return response

    def process_view(self, request, view_func, view_args, view_kwargs):
        '''
        #在视图之前执行 顺序执行
        #return view_func(request)
        '''

    def process_exception(self, request, exception):
        '''自定义异常处理器'''
        print(exception)
        # return HttpResponse(exception) #返回错误信息


def get_ip(ip: str):
    key = 'a90f24c2491eb***8'
    url = f'http://apis.juhe.cn/ip/ipNewV3?ip={ip}&key={key}'
    res = requests.get(url)
    try:
        dict_res: dict = res.json().get('result')
        print(f'国家  -->{dict_res.get("Country")}')
        print(f'省份  -->{dict_res.get("Province")}')
        print(f'市区  -->{dict_res.get("City")}')
        print(f'运营商-->{dict_res.get("Isp")}')
        print('=' * 20)
    except Exception as ext:
        pass

settings中加

MIDDLEWARE = [
	...
    'backstage.get_address_ip.GETAddressMiddleWare'
]

nginx代理如下配置

server中加

	proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值