面试官: fastcgi 如何访问 django

2018-06-05 11:00:34 +08:00
 dhq

面试的时候被问及,通过 uwsgi 运行 dajngo 是使用了 django 项目下默认创建的 wsgi.py 下的配置,以运行 django

但 python manage.py runfcgi host=127.0.0.1 port=9527 运行的时候项目内并无任何配置,fastcgi 又是如何运行 django 项目呢?

说实话,一直都是这么配置就能用了,我还真不知道其中具体原理,请各大神赐教

3687 次点击
所在节点    Python
15 条回复
xiaoxinxiaobai
2018-06-05 11:41:06 +08:00
读一下源码?
tkmiles
2018-06-05 11:58:15 +08:00
建议可以先了解下 wsgi 协议
lauix
2018-06-05 12:02:03 +08:00
看下 WSGI 代码,看了下 HTTP 原理你就知道了。
enenaaa
2018-06-05 12:23:06 +08:00
我没用过 django。但看 nginx 的 fastcgi 配置就可知道,nginx 在向 fastcgi 后端请求时, 会传送文件路径,uri 参数以及系统参数等信息。
fastcgi 进程启动时并不需要项目参数。
dhq
2018-06-05 13:43:46 +08:00
@xiaoxinxiaobai
@tkmiles
@lauix
@enenaaa 都写在 manage.py 了,,捂脸,-u-
yufpga
2018-06-05 14:12:43 +08:00
首先, 在 django 中允许用户自定义命令,然后使用 python manage.py <command> [参数]去执行。当然,runserver,runfcgi, sql ...都是 django 自带的命令。但其实现原理都是一样的, 都是继承了 BaseCommand 类并实现 handler 方法, 实现命令的 py 文件的目录结构也很有特点, 一定是在<app>.management.commands 目录下。因此你可以很容易的找到 runfcgi 命令实现的源码(django.core.management.commands.runfcgi), 同样其他内置的命令实现都可以在 django.core.management.commands 包中找到. 剩下的看代码吧。
dhq
2018-06-05 14:17:01 +08:00
@yufpga 很详细,3q
tkmiles
2018-06-05 14:24:48 +08:00
@dhq 没想到你想知道 django 的命令情况~~~~看来我阅读理解没过关了~
dhq
2018-06-05 14:49:39 +08:00
@tkmiles 没有,其实我是看过了 cgi, WSGI, fastcgi 这几个东西的区别,只是大概知道他们是基于 web 服务器与应用间的协议,uWSGI 就是一个 web 服务器,我只是不清楚这个协议是怎么把 django 应用给跑起来,感觉理解得好混乱
flatflax
2018-06-05 15:26:15 +08:00
runfcgi 不是在 1.9 版本后被移除了吗……
dhq
2018-06-05 15:56:47 +08:00
@flatflax 是的,只是因为我之前的项目有这个,他问起
RicardoScofileld
2018-06-06 12:01:07 +08:00
uwsgi 服务器我记得也有一个 UWSGI 协议
julyclyde
2018-06-06 13:10:35 +08:00
runfcgi 调用了 flup
flup 是一个 wsgi server,内部通过函数调用的方式访问 django 的 wsgi 接口(较新版 django 支持 wsgi ),对外提供 fastcgi server 的通信协议
dhq
2018-06-06 21:02:14 +08:00
@julyclyde 对的,后来看源码,跟你说的一样
dhq
2018-06-06 21:02:25 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/460494

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX