首页 > 解决方案 > 如何在 Django 中间件中返回消息并重定向用户

问题描述

在我的 Django 应用程序中,我提取了一个用户的 IP 地址并设置了一个本地城市。但是,如果用户不在应用程序覆盖的地理区域,我想引发错误并将他们重定向到此应用程序覆盖的地理区域。我正在尝试使用中间件执行此操作,但不确定如何执行此操作。

class RestrictUserMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')

        if x_forwarded_for:
            ipaddress = x_forwarded_for.split(',')[-1].strip()
        else:
           ipaddress = request.META.get('REMOTE_ADDR')

        ip = get_client_ip(request)
        reader = geoip2.database.Reader(path)
        try: 
            location = reader.city(ip)
        except:
            location = True

        if not response.subdivisions.most_specific.iso_code in 'CA':
            # raise error message here that it's not available outside CA
            request.session['city'] = 'Beverly Hills'
            return HttpResponseRedirect(reverse('index'))

        response = self.get_response(request)
        return response

标签: djangogeolocationmiddlewaredjango-middleware

解决方案


设置.py

MIDDLEWARE = [
...
'package name.python file name.RestrictUserMiddleware',
]

推荐阅读