4

我对 Django 很陌生,想知道如何检查登录到 django 支持的网站的用户是否来自美国以外?

我将如何在中间件中编写一个类来检查相同的内容?我想对退出美国的用户隐藏网站的特定部分。

我知道我没有提供任何细节,而且这个问题可能看起来很模糊......但我需要一个大致的想法才能开始。我还没有开始在网站上工作。

我浏览了 Django Middleware 文档,但仍然不明白该怎么做。用户身份验证https://docs.djangoproject.com/en/1.4/topics/auth/#limiting-access-to-logged-in-users是否提供任何此类功能?

4

1 回答 1

3

您可以使用django 附带的 GeoIP 模块

一个简单的中间件可能看起来像这样:

class GeoLocationMiddleware:
    def process_request(self, request):
        if 'geoip_check' not in request.session:
            g = GeoIP()
            country = g.country(request.META.get('REMOTE_ADDR'))
            do_something(country) #Do something with country result.
            request.session['geoip_check'] = True #Could store country result

        return None

您会注意到我在会话中添加了一个标志。在每个请求上检查 GeoIP 是不必要的,而且对性能不利,因此我们每个会话只检查一次。希望这就是你要找的。

编辑:如果您只想为登录用户执行此操作,请将其放入:

if request.user.is_authenticated():

一开始。

于 2012-12-10T21:28:32.343 回答