django - 如何在 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
解决方案
设置.py
MIDDLEWARE = [
...
'package name.python file name.RestrictUserMiddleware',
]
推荐阅读
- vb.net - Visual Basic 上的二分法问题
- python - Python Cannot Inherit attributes from a class to another class
- excel - 如何从另一列中查找值并显示行号?
- java - 如何使用流和可选重写代码
- javascript - 如何转换这些字符?
- sql-server - How to enlarge the storage size Azure SQL Database greater than 4 TB?
- c# - 可以组合 AutoMapper 映射吗?
- tensorflow - Keras重复元素将ValueError List参数'indices'抛出到'SparseConcat'Op,长度0小于最小长度2
- javascript - How to sync three swiper slider?
- javascript - Webpack 4 + Babel 7.4.0 + Babel Polyfill