How is Django able to grant reserved port numbers?
Port 80 has no magical meaning, it is not "reserved" or "privileged" on your server (besides most likely requiring root privileges to access, as others have mentioned). It is just a regular port that was chosen to be a default for http, so you don't have to write google.com:80 every time in your browser, that's it. 
If you have no web server running such as apache or nginx which usually listen to that port, then port 80 is up for grabs. You can run django runserver on it, you can run a plain python script listening to it, whatever you like.
Using this command 

python manage.py runserver 0.0.0.0:8000

we can host a Django server locally on any port.So a developer can use reserved and privileged port numbers say

python manage.py runserver 127.0.0.1:80

So, now I am using port 80 defined for the HTTP protocol.
So, why does this not raise any issues and how is this request granted ?