赞
踩
之前在网上看过一些介绍Django处理请求的流程和Django源码结构的文章,觉得了解一下这些内容对开发Django项目还是很有帮助的。所以,我按照自己的逻辑总结了一下Django项目的运行方式和对Request的基本处理流程。
运行Django项目的方法很多,这里主要介绍一下常用的方法。一种是在开发和调试中经常用到runserver方法,使用Django自己的web server;另外一种就是使用fastcgi,uWSGIt等协议运行Django项目,这里以uWSGIt为例。
runserver方法是调试Django时经常用到的运行方式,它使用Django自带的WSGI Server运行,主要在测试和开发中使用,使用方法如下:
- Usage: manage.py runserver [options] [optional port number, or ipaddr:port]
- # python manager.py runserver # default port is 8000
- # python manager.py runserver 8080
- # python manager.py runserver 127.0.0.1:9090
看一下manager.py的源码,你会发现上面的命令其实是通过Django的execute_from_command_line方法执行了内部实现的runserver命令,那么现在看一下runserver具体做了什么。。
看了源码之后,可以发现runserver命令主要做了两件事情:
django.core.servers.basehttp.get_internal_wsgi_application
方法获取 wsgi handler
; get_internal_wsgi_application
的源码如下:
- def get_internal_wsgi_application():
- """
- Loads and returns the WSGI application as configured by the user in
- ``settings.WSGI_APPLICATION``. With the default ``startproject`` layout,
- this will be the ``application`` object in ``projectname/wsgi.py``.
- This function, and the ``WSGI_APPLICATION`` setting itself, are only useful
- for Django's internal servers (runserver, runfcgi); external WSGI servers
- should just be configured to point to the correct application object
- directly.
-
- If settings.WSGI_APPLICATION is not set (is ``None``), we just return
- whatever ``django.core.wsgi.get_wsgi_application`` returns.
- """
- from django.conf import settings
- app_path = getattr(s
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。