django run localhost from another computer connected to another network - python

I am running my django project in localhost and it works fine..
For test purpose I want to run my localhost from another computer connected in the same network.
I have done python manage.py runserver 'my ip address'
That works fine too.. Is there any way that I can access my localhost from another computer connected to another network?
Like I am connected to A network and running my localhost and my friend is connected to B network. Suppose he wants to access my localhost and see my project running then is it possible to access localhost of a computer from another computer connected to another project?

You can. Just run the django runserver in
python manage.py runserver 0.0.0.0:8000
Now you can access your app using youripaddress:8000
From Django ...
Note that the default IP address, 127.0.0.1, is not accessible from other machines on your network. To make your development server viewable to other machines on the network, use its own IP address (e.g. 192.168.2.1) or 0.0.0.0 or :: (with IPv6 enabled).
You can provide an IPv6 address surrounded by brackets (e.g. [200a::1]:8000). This will automatically enable IPv6 support.
Updated:
In order to match the answer to Title of the question. You need configure your router to forward port 80 to yourapp address

Run server with local host or your system IP like one of the below
python manage.py runserver 192.168.6.7:8000
python manage.py runserver 0.0.0.0:8000
python manage.py runserver 127.0.0.1:8000
add hosts in settings.py to access from other system in network.
ALLOWED_HOSTS = ['127.0.0.1', 'localhost','192.168.6.7']

If you're working DEBUG=True mod in your Django project, you shouldn't need anything other than that (I assume you are not using port 80, it requires root access).
You must use 0.0.0.0 as host IP, it is a simple solution. And the command is:
python manage.py runserver 0.0.0.0:8000. That's it.

Related

Connect to python development django server from a non-local network machine

I am able to run my django dev server on my machine and make it accessible to the local network by running:
sudo python manage.py runserver IP:80
OR
sudo python manage.py runserver 0.0.0.0:8000
Now, how can I make my server accessible over the internet by a machine not in my local wifi network?
Use your machine LAN/WAN ip address, then configure your modem/router to let this ip have external access.
For example, considering your machine LAN/WAN ip address is 192.168.0.100.
You run your django development server as python manage.py runserver 192.168.0.100:8000.
An then, set up your modem/router.. Probably inside your DMZ settings.
You can use a tool like ngrok.
Here you can find a detailed usage description: http://www.lexev.org/en/2014/remote-url-localhost-server/

Accessing the Django embedded server for development inside PyCharm by other hosts inside my local network?

I'm working with PyCharm and I wonder if there's a way to make the Django embedded server accesible for the other hosts in my local network or I need to deploy my app on a dedicated web server such as Apache?
Now, I'm accessing my Django app like this in the browser:
http://localhost:8000/mypage/
and I want other users inside my local network to type:
http://my_private_ip:8000/mypage/
in their browsers and see the same page.
Just run the server (which is Django's embedded server FWIW, not PyCharm's) under http://my_private_ip:8000:
# ./manage.py help runserver
Usage: manage.py runserver [options] [optional port number, or ipaddr:port]
Starts a lightweight Web server for development.
(...)
# ./manage.py runserver my_private_ip:8000
Assuming a Unix environment.
You need to ensure the server is listening not on the lo interface but on all interfaces (or at least the one used to connect to the LAN).
If you can customize the way PyCharm launches the server, use 0.0.0.0 as the host, as in:
python manage.py runserver 0.0.0.0:8000
Your coworkers can then use your LAN IP address. If you don't know it, use $ ip a.

why I can't open any port when I deploy my django on my server, but my test program can run on my own machine

I'm learning django to make a test website, I can run the site on my own laptop, and use the browser to visit 127.0.0.1 , it's ok
but when I do the same thing on my server, I bought a vps and a domain, I just can't telnet the port , the browser also can't connect, I don't know why
I do the following
python manage.py runserver 8080
on my laptop, 8080 port can be connected by telnet, but on my server , it can't
Two things.
Firstly, as the documentation explains, by default runserver only binds to the localhost interface, which means it is only available on a browser running on the same machine. To get it to be visible outside the local machine, you need to bind to an externally-visible address, or 0.0.0.0 for all addresses:
python manage.py runserver 0.0.0.0:8080
Secondly, as the documentation also explains, you should not be trying to use the development server in a production setting anyway. Use a proper webserver, eg Apache + mod_wsgi.

Serve Django project on local WiFi Network

I used
python manage runserver 0.0.0.0:8000
to start the server so that I can access the project from other computers on my wifi network, but when i browse to internet-ipaddress:8000 on an another computer, the project doesn't load. Am I missing a setting?
Assuming all the machines can see eachother ...
get the IP address of the machine you are running runserver on. For example run ifconfig at the console.
ifconfig
eth0 Link encap:Ethernet HWaddr 10:1e:72:b8:2a:4b
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
...
check if you are running a firewall. For example
sudo ufw status
if active, you need to open port 8000 so, again at the console, run
sudo ufw allow 8000/tcp
then start the runserver (or runserver_plus if using django-extensions)
python manage.py runserver_plus 192.168.1.2:8000
open a browser on another machine
http://192.168.1.2:8000/admin
What do you mean by internet-ipaddress? That sounds like you're using the external IP of your router. You should be using the IP of the particular machine you're serving from, which will be an internal address like 192.168.0.2.
You should bind it to your local IP address. For example
python manage.py runserver 192.168.1.100:8000
You should check out solutions like Pagekite or Show Off as they're generally trivially easy to set up and offer a great deal of flexibility (and mobility) and provide a stable domain name to your localhost server.
Note: 192.168.2.5 is my ip. So, give your own
Open settings.py and add this to ALLOWED_HOSTS
ALLOWED_HOSTS = ['192.168.2.5']
Then run command
python manage.py runserver 192.168.2.5:8000
Allow access in the firewall's warning appeared.
Now access your host from the systems on same network.
add 192.168.0.8 (or whatever your router ip is) as a string to ALLOWED_HOSTS list in settings then run server using python manage.py runserver 192.168.0.8:8000

manage.py runserver

I am running python manage.py runserver from a machine A
when I am trying to check in machine B. The url I typed is http://A:8000/ .
I am getting an error like The system returned: (111) Connection refused
You can run it for machines in your network by
./manage.py runserver 0.0.0.0:8000
And than you will be able to reach you server from any machine in your network.
Just type on other machine in browser http://192.168.0.1:8000 where 192.168.0.1 is IP of you server... and it ready to go....
or in you case:
On machine A in command line ./manage.py runserver 0.0.0.0:8000
Than try in machine B in browser type http://A:8000
Make a sip of beer.
Source from django docs
You need to tell manage.py the local ip address and the port to bind to. Something like python manage.py runserver 192.168.23.12:8000. Then use that same ip and port from the other machine. You can read more about it here in the documentation.
I was struggling with the same problem and found one solution. I guess it can help you. when you run python manage.py runserver, it will take 127.0.0.1 as default ip address and 8000. 127.0.0.0 is the same as localhost which can be accessed locally. to access it from cross origin you need to run it on your system ip or 0.0.0.0. 0.0.0.0 can be accessed from any origin in the network.
for port number, you need to set inbound and outbound policy of your system if you want to use your own port number not the default one.
To do this you need to run server with command python manage.py runserver 0.0.0.0:<your port> as mentioned above
or, set a default ip and port in your python environment. For this see my answer on
django change default runserver port
Enjoy coding .....
Just in case any Windows users are having trouble, I thought I'd add my own experience. When running python manage.py runserver 0.0.0.0:8000, I could view urls using localhost:8000, but not my ip address 192.168.1.3:8000.
I ended up disabling ipv6 on my wireless adapter, and running ipconfig /renew. After this everything worked as expected.
in flask using flask.ext.script, you can do it like this:
python manage.py runserver -h 127.0.0.1 -p 8000
For people who are using CentOS7, In order to allow access to port 8000, you need to modify firewall rules in a new SSH connection:
sudo firewall-cmd --zone=public --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
I had the same problem and here was my way to solve it:
First, You must know your IP address.
On my Windows PC, in the cmd windows i run ipconfig and select my IP V4 address. In my case 192.168.0.13
Second as mention above: runserver 192.168.0.13:8000
It worked for me.
The error i did to get the message was the use of the gateway address not my PC address.
First, change your directory:
cd your_project name
Then run:
python manage.py runserver
Ok just came across this post this is a little off topic but hopefully explains a few things, The IP 127.0.0.1 points to your network card so any traffic that you cause to go to that IP address will not leave your computer.
For example modern network cards in laptops for example will not even give you that IP if you are not connected to a wifi or cabled network so you'll need to be connected at least to activate the card.
If you need to run multiple servers on the same machine but want to access them with a domain then you have a couple of options
edit your computers host file to define the domain and what IP it goes to
use a DNS Alias I set up using a cname record years ago *.local.irishado.com will point to 127.0.0.1
so for example these three domains will point to your local machine
http://site1.local.irishado.com
http://site2.local.irishado.com
http://site3.local.irishado.com
will all point to your local machine then in python projects you will need to edit the projects setting file ALLOWED_HOSTS property to hold the domain it will accept
ALLOWED_HOSTS = ['site1.local.irishado.com']

Categories