V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dhq
V2EX  ›  Python

面试官: fastcgi 如何访问 django

  •  
  •   dhq · 2018-06-05 11:00:34 +08:00 · 3449 次点击
    这是一个创建于 2124 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    15 条回复    2018-06-06 21:02:25 +08:00
    xiaoxinxiaobai
        1
    xiaoxinxiaobai  
       2018-06-05 11:41:06 +08:00 via Android
    读一下源码?
    tkmiles
        2
    tkmiles  
       2018-06-05 11:58:15 +08:00
    建议可以先了解下 wsgi 协议
    lauix
        3
    lauix  
       2018-06-05 12:02:03 +08:00
    看下 WSGI 代码,看了下 HTTP 原理你就知道了。
    enenaaa
        4
    enenaaa  
       2018-06-05 12:23:06 +08:00
    我没用过 django。但看 nginx 的 fastcgi 配置就可知道,nginx 在向 fastcgi 后端请求时, 会传送文件路径,uri 参数以及系统参数等信息。
    fastcgi 进程启动时并不需要项目参数。
    dhq
        5
    dhq  
    OP
       2018-06-05 13:43:46 +08:00
    @xiaoxinxiaobai
    @tkmiles
    @lauix
    @enenaaa 都写在 manage.py 了,,捂脸,-u-
    yufpga
        6
    yufpga  
       2018-06-05 14:12:43 +08:00   ❤️ 2
    首先, 在 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
        7
    dhq  
    OP
       2018-06-05 14:17:01 +08:00
    @yufpga 很详细,3q
    tkmiles
        8
    tkmiles  
       2018-06-05 14:24:48 +08:00
    @dhq 没想到你想知道 django 的命令情况~~~~看来我阅读理解没过关了~
    dhq
        9
    dhq  
    OP
       2018-06-05 14:49:39 +08:00
    @tkmiles 没有,其实我是看过了 cgi, WSGI, fastcgi 这几个东西的区别,只是大概知道他们是基于 web 服务器与应用间的协议,uWSGI 就是一个 web 服务器,我只是不清楚这个协议是怎么把 django 应用给跑起来,感觉理解得好混乱
    flatflax
        10
    flatflax  
       2018-06-05 15:26:15 +08:00
    runfcgi 不是在 1.9 版本后被移除了吗……
    dhq
        11
    dhq  
    OP
       2018-06-05 15:56:47 +08:00
    @flatflax 是的,只是因为我之前的项目有这个,他问起
    RicardoScofileld
        12
    RicardoScofileld  
       2018-06-06 12:01:07 +08:00
    uwsgi 服务器我记得也有一个 UWSGI 协议
    julyclyde
        13
    julyclyde  
       2018-06-06 13:10:35 +08:00
    runfcgi 调用了 flup
    flup 是一个 wsgi server,内部通过函数调用的方式访问 django 的 wsgi 接口(较新版 django 支持 wsgi ),对外提供 fastcgi server 的通信协议
    dhq
        14
    dhq  
    OP
       2018-06-06 21:02:14 +08:00 via iPhone
    @julyclyde 对的,后来看源码,跟你说的一样
    dhq
        15
    dhq  
    OP
       2018-06-06 21:02:25 +08:00 via iPhone
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2884 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:23 · PVG 22:23 · LAX 07:23 · JFK 10:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.