Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I best find out how django works internally?

so I have been playing around with django for a bit and I really do like this framework. However, I would like to understand better how it actually works 'under the covers'.

Here is my current view of client-server-django world, which is very rough and will probably make your toenails curl (sorry)...

  1. The browser sends a Http request to the server.
  2. The server does its magic and dumps the request via the CGI to django (?)
  3. Some part of django (which?) receives the request and turns it into a django request object.
  4. The request object wanders on some nebulous paths through the middleware which does strange things with it.
  5. The request object finally ends up in some function (which?) which looks at the urls, takes the patterns out of urls.py and calls up a view function.
  6. The view functions do their magic (with models and templates as partners in vice) , this is probably where I have the strongest illusion of understanding (well, apart from the database abstraction magic, that is... ;)
  7. The view functions returns an HttpResponse object, I guess this is returned on some nebulous paths to the CGI.
  8. Webserver takes over again and sends the Http response to the client.

Ok, so what the heck is my question you ask? Well, how does this all work, really? I am not expecting that you spoon-feed me everything... I suspect that the answer will ultimately be to "read the source, luke", however, I would be grateful if

  1. You could clear up my grosses misconseptions
  2. tell me where to start? What I would like to do is grap a debugger and just walk through the process a couple of times, but I don't really know where to get started
  3. you could point me to any documents that explain this well... yes, I have heard of this google thing but haven't really found anything super-useful.

thanks a lot Paul

like image 218
Paul Avatar asked Nov 24 '10 15:11

Paul


People also ask

How does Django work explain in detail?

Starting a Django project allows you to build your application's entire data model in Python without needing to use SQL. Using an object-relational mapper (ORM), Django converts traditional database structure into Python classes to make it easier to work within a fully Python environment.

What server Django runs on?

Django's primary deployment platform is WSGI, the Python standard for web servers and applications. Django's startproject management command sets up a minimal default WSGI configuration for you, which you can tweak as needed for your project, and direct any WSGI-compliant application server to use.

Does Django need a Web server?

Django, being a web framework, needs a web server in order to operate. And since most web servers don't natively speak Python, we need an interface to make that communication happen. Django currently supports two interfaces: WSGI and ASGI.


2 Answers

Well, your first misconception is that CGI has anything to do with this. It doesn't, except very unlikely and little-used server configurations.

Mostly, Django interfaces with the server via WSGI, which is a Python specification for web servers to talk to web applications. You can see more information at the WSGI website.

Apart from that, the whole request/response cycle is very well described by James Bennett in his blog entry here. It's quite old, but little has changed in Django at that level since it was written.

like image 69
Daniel Roseman Avatar answered Sep 19 '22 18:09

Daniel Roseman


Watch James Bennett's Django in Depth tutorial from Pycon 2015.

From the Pycon website, here's the abstract of James' talk:

Most books, tutorials and other documentation for Django take a high-level approach to its components and APIs, and so barely scratch the surface of the framework. In this tutorial, however, we'll take a detailed look under the hood, covering everything from the guts of the ORM to the innards of the template system to how the admin interface really works.

Whether you're the newest of newbies or the most seasoned of application developers, you'll come away with a deeper knowledge of Django, and a plethora of new tips and tricks you can use in your own applications.

like image 39
Matthew Rankin Avatar answered Sep 18 '22 18:09

Matthew Rankin