<p>这不是一个直接的解决办法,但可能会帮助你或指出一个好的解决办法。在</p>
<ul>
<li><em>定制中间件呢?</em></li>
</ul>
<p>我们有两种选择:</p>
<ol>
<li><p>一个中间件,您可以在其中检查用户的国家/地区并重定向到您允许的国家/地区(如果不允许用户国家/地区,则可以重定向到自定义url或显示404错误)</p></li>
<li><p>一个中间件,您可以在其中检查客户机的url路径,因此您将拥有<code>/country_code/url</code>并且可以执行上述操作,如果不允许路径,则可以重定向到自定义url或显示404错误</p></li>
</ol>
<p>小例子:</p>
<h2>1。检查国家的中间件</h2>
<p><strong>pygeoIP</strong>在示例中使用,以按ip获取国家/地区</p>
<pre><code>import pygeoip
class CountryMiddleware:
def process_request(self, request):
allowed_countries = ['GB','ES', 'FR'] # Add your allowed countries
gi = pygeoip.GeoIP('/usr/share/GeoIP/GeoIP.dat', pygeoip.MEMORY_CACHE)
ip = request.META.get('REMOTE_ADDR')
user_country = gi.country_code_by_addr(ip)
if user_country not in allowed_countries:
return HttpResponse... # Here you decide what to do if the url is not allowed
# Show 404 error
# or Redirect to other page...
</code></pre>
<h2>2。一个检查url的中间件</h2>
^{pr2}$
<hr/>
<p>如果您决定使用这些选项,您必须记住:</p>
<ul>
<li>您需要在路径<code>your_project/middleware/middlewarefile.py</code>中添加中间件文件</li>
<li><p>你需要在你的设置.py公司名称:</p>
<p>中间件类=(</p>
<pre><code>'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
# etc.....
'yourproject.middleware.domainmiddleware.DomainMiddleware',
</code></pre>
<p>)</p></li>
<li><p>我在这里展示的代码还没有完成或测试,它只是帮助您找到一个好的解决方案的方向</p></li>
</ul>