当年执行 python manage runserver命令时
1. 先执行 runserver 中的 handle方法
![](https://i-blog.csdnimg.cn/direct/2a95e9ea0e7a425da7b0d9f566ad69d3.png)
2. 执行 self.run()方法
![](https://i-blog.csdnimg.cn/direct/f7ff345018814871b9bd0552aeb428fc.png)
3. 执行 self.inner_run()
![](https://i-blog.csdnimg.cn/direct/4dbad66680c64e60a2b9a1428ffd2932.png)
3.1 inner_run 下 run方法的封装
3.1.1 接着看 handle 怎么来的 封装了一个方法 接着找返回函数
![](https://i-blog.csdnimg.cn/direct/71184a4dd7054709853055b68b85e1fa.png)
3.1.2在 basehttp 下
![](https://i-blog.csdnimg.cn/direct/20e2572e1f154dfa9071379f11b46bcb.png)
3.1.3 get_wsgi_application() 是wsgi.py下的方法
![](https://i-blog.csdnimg.cn/direct/f2de62c082524cbc91a604e21162e751.png)
3.1.4 WSGIHandler (django.core.handlers.wsgi.WSGIHandler) 继承 base.BaseHandler
![](https://i-blog.csdnimg.cn/direct/70031f2f85624b7bb83afb6f511e91fa.png)
3.2 import_string() 是 django.utils.module_loading 的 import_string方法
![](https://i-blog.csdnimg.cn/direct/d2db6d697e47413283ad4a54d9552b23.png)
3.3 接着看 self.server_cls 是 django.core.servers.basehttp import WSGIServer导入的
Django 在这部分代码中通过自定义的 WSGIServer
类与 WSGI 服务器进行关联。
具体来说,Django 使用 WSGIServer
作为服务器基础类,它继承了 wsgiref.simple_server.WSGIServer
,并且根据需要扩展了相关功能,例如支持 IPv6 和定制错误处理等。
![](https://i-blog.csdnimg.cn/direct/bb14c9bd73254f5b8550a19cabca0a67.png)
4. run()封装好了 接着开始执行
![](https://i-blog.csdnimg.cn/direct/d564b791d03f4d57a27f5c0565200e1d.png)
4.1 httpd.set_app(wsgi_handler)
set_app 执行的是 from wsgiref.simple_server import WSGIServer 下的方法
![](https://i-blog.csdnimg.cn/direct/71b4e1fab6604995a4799add7cae942e.png)
4.2 httpd.serve_forever()
serve_forever 执行的是 from socketserver import BaseServer
![](https://i-blog.csdnimg.cn/direct/d69dcffcbec34ae299cd044e24a1aca1.png)