2009-08-17 14 views
7

¿Dónde puedo obtener los manuales técnicos/detalles de cómo funcionan las internas de django, es decir, me gustaría saber cuándo llega una solicitud de un cliente;¿Dónde puedo obtener información técnica sobre cómo funciona el interior de Django?

  • que django function lo recibe?
  • ¿qué middleware se llama?
  • ¿cómo se crea el objeto de solicitud? y qué clase/función lo crea?
  • ¿Qué función asigna la solicitud a la vista necesaria?
  • ¿Cómo su código/vista consigo llamado

? etc ...

Paul.G

+3

Cuando miraste la fuente, ¿qué viste? –

Respuesta

9

La manera más fácil de entender las partes internas de django, es leyendo un libro escrito específicamente para eso.

Lee Pro Django. Le proporciona una buena comprensión en profundidad de la programación de meta primero y demuestra cómo se usa en los modelos de django, para crearlos dinámicamente.

Se trata de manera similar con muchos otros conceptos de python y cómo lo usa django.

+2

Sí, esta es una lectura obligada –

+1

Estoy de acuerdo. Este libro muestra algunas de las técnicas avanzadas de Python que Django emplea para proporcionar el marco útil que es. –

10

"Usar la fuente, Lucas." La belleza del software de código abierto es que usted puede ver (y modificar) el código usted mismo.

+1

+1. generalmente esta es una respuesta no útil; pero la fuente de Django es __very__ legible. – Javier

+1

De acuerdo. El código fuente en proyectos grandes generalmente es difícil de entender a menos que realmente contribuyas a él de manera regular. Pero Django es altamente modular y fácil de enfocar en un elemento en particular para estudiar. – Soviut

+0

Sí, lo es. Y ciertamente, uno debería comenzar con una excelente documentación en línea, como señala Soviut. Pero, por el nivel de detalle que implica la pregunta, no hay sustituto para mirar el código. –

1

Dudo que haya manuales técnicos sobre el tema. Puede llevar un poco de investigación, pero la documentación de la API y el código fuente son sus mejores opciones para obtener información confiable y actualizada.

0

La documentación a menudo entra en detalles cuando es necesario para explicar por qué las cosas funcionan de la manera en que lo hacen. Uno de los objetivos de diseño de Django es no confiar en la "magia" tanto como sea posible. Sin embargo, siempre que Django supone asumir algo (ubicaciones de plantillas dentro de las aplicaciones, por ejemplo) se explica claramente por qué en la documentación y siempre ocurre de manera predecible.

La mayoría de sus preguntas serían respondidas mediante la implementación de una sola página.

  1. Se realiza una solicitud del cliente para una url determinada.
  2. La URL resuelve qué vista llamar según la coincidencia del patrón de URL.
  3. La solicitud se pasa a través del middleware.
  4. Se llama a la vista y pasa explícitamente el objeto de solicitud.
  5. La vista llama explícitamente a la plantilla que especifique y le pasa el contexto (variables) que especifique.
  6. Procesadores de contexto de plantilla, si los hay, luego agregue sus propias variables al contexto.
  7. El contexto se pasa a la plantilla y se procesa.
  8. La plantilla representada se devuelve al cliente.

Django Documentation

Django Book

12

Además de leer la fuente, aquí hay algunos artículos que he marcado y marcado como favorito desde hace un rato:

que he encontrado James Bennet de blog a ser una gran fuente de información sobre el funcionamiento de Django. Su libro, Practical Django Projects, también es una lectura obligada; aunque no se centra en aspectos internos, aprenderá cómo funciona django.

+0

Oh sí, el blog de James Bennet es genial. He marcado muchas páginas desde allí. Es un escritor realmente bueno, muy claro. – hughdbrown

6

Simplemente leyendo la fuente puede ser un poco abrumador, especialmente porque la parte superior es un poco confusa (cómo el servidor web pasa la solicitud al código Django). Me parece una buena manera de empezar la lectura del código es establecer un punto de interrupción de depuración en su función de vista:

def time(request): 
    import pdb; pdb.set_trace() 
    return HttpResponse(blah blah) 

después haga clic en su URL. Cuando se rompe el depurador en el punto de interrupción, examinan la pila:

(Pdb) where 
    c:\abcxyzproject\django\core\management\commands\runserver.py(60)inner_run() 
-> run(addr, int(port), handler) 
    c:\abcxyzproject\django\core\servers\basehttp.py(698)run() 
-> httpd.serve_forever() 
    c:\python25\lib\socketserver.py(201)serve_forever() 
-> self.handle_request() 
    c:\python25\lib\socketserver.py(222)handle_request() 
-> self.process_request(request, client_address) 
    c:\python25\lib\socketserver.py(241)process_request() 
-> self.finish_request(request, client_address) 
    c:\python25\lib\socketserver.py(254)finish_request() 
-> self.RequestHandlerClass(request, client_address, self) 
    c:\abcxyzproject\django\core\servers\basehttp.py(560)__init__() 
-> BaseHTTPRequestHandler.__init__(self, *args, **kwargs) 
    c:\python25\lib\socketserver.py(522)__init__() 
-> self.handle() 
    c:\abcxyzproject\django\core\servers\basehttp.py(605)handle() 
-> handler.run(self.server.get_app()) 
    c:\abcxyzproject\django\core\servers\basehttp.py(279)run() 
-> self.result = application(self.environ, self.start_response) 
    c:\abcxyzproject\django\core\servers\basehttp.py(651)__call__() 
-> return self.application(environ, start_response) 
    c:\abcxyzproject\django\core\handlers\wsgi.py(241)__call__() 
-> response = self.get_response(request) 
    c:\abcxyzproject\django\core\handlers\base.py(92)get_response() 
-> response = callback(request, *callback_args, **callback_kwargs) 
> c:\abcxyzproject\abcxyz\helpers\views.py(118)time() 
-> return HttpResponse(
(Pdb) 

ahora se puede ver un resumen de la trayectoria de la parte más profunda del servidor web a su función de vista. Use el comando "arriba" para subir la pila, y los comandos "lista" e "imprimir" para examinar el código y las variables en esos cuadros de pila.

Cuestiones relacionadas