Django网站可以在局域网内访问,局域网外的主机就不能访问网站,如何解决呢?

Django网站可以在局域网内访问,局域网外的主机就不能访问网站,如何解决呢?
我的网站是在自己笔记本上做的,连接的是无线网192.168.1.111,使用IP地址是192.168.1.110的主机是可以访问的,
但是10.222.21.8这个主机无法访问,请问怎么解决呢

这很正常,运营商一般都会把80端口封了。你可以租用云服务器,好像学生可以1元使用3个月。

  • 这篇博客: django 获取访问者外网ip地址中的 #2 需求 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 获取本地ip
    • 获取访问者ip
  • 以下回答由chatgpt基于相关博客总结生成:

    解决方案:

    1. 确认本机的IP地址,打开命令提示符,输入ipconfig命令查看本机的ipv4地址。例如本机ip为192.168.2.118。

    2. 在Django的settings.py文件中添加ALLOWED_HOSTS = ["*"],允许任何host进行访问。

    3. 在启动Django服务时,指定IP地址为本机IP地址,命令为python manage.py runserver 192.168.2.118:8000。

    4. 若要使其他局域网内的主机访问该站点,需要将之前指定的IP地址改为0.0.0.0,命令为python manage.py runserver 0.0.0.0:8000,同时需关闭防火墙。

    5. 若仍不能访问,则需检查网络配置是否正确,并根据错误提示进行排除。

    6. 在Django的views.py文件中添加获取访问者IP的方法,例如:

    def get_request_ip(request):
        try:
            x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
            if x_forwarded_for:
                ip = x_forwarded_for.split(',')[0]  # 所以这里是真实的ip
            else:
                ip = request.META.get('REMOTE_ADDR')  # 这里获得代理ip
        except:
            ip = None
        return HttpResponse("request_ip : %s" % ip)
    

    该方法通过获取request对象中的HTTP_X_FORWARDED_FOR和REMOTE_ADDR属性来获取访问者的IP地址,并返回该IP地址。在网站访问统计和IP地址定位等方面具有重要的应用价值。

    1. 可以通过第三方模块如geoip2来获取IP的地理位置信息,包括经纬度、国家、区域、城市等。参考链接为:https://django-geoip2.readthedocs.io/en/latest/usage.html

    注:对于本题中的无法访问问题,根据参考资料3,还需将Django的ALLOWED_HOSTS配置为包括局域网内PC对应的外网ip,例如ALLOWED_HOSTS = ['192.168.1.110', '10.222.21.8']。