【问题标题】:Configuring the Django development server output配置 Django 开发服务器输出
【发布时间】:2010-09-19 19:03:40
【问题描述】:

是否可以配置 Django 开发服务器的输出以显示发出请求的客户端的 IP 地址?

【问题讨论】:

  • 所以输出行看起来像这样:[19/Sep/2010 11:49:46] 192.168.1.110 "GET /static/media/css/site.css HTTP/1.1" 304 0
  • 而不是这个:[19/Sep/2010 11:49:46] "GET /static/media/css/site.css HTTP/1.1" 304 0

标签: django manage.py


【解决方案1】:

这在我们的新 Django 版本的“标准模块”列表中。对于 Django 1.2.1,在 django/core/servers/basehttp.py 的第 614 行,更改:

   msg = "[%s] %s\n" % (self.log_date_time_string(), format % args)

   msg = "[%s] %s %s\n" % (self.log_date_time_string(),
                       self.client_address[0], format % args)

【讨论】:

  • 谢谢彼得!我也刚刚将它添加到我的 Django 标准模块列表中。可惜我们必须修改代码才能获得它,但正如 Django 开发人员所说,他们制作的是框架,而不是服务器。
  • 您还想分享任何其他“标准模组”吗?我很想看看你的名单!
  • 我查看了我们拥有的内容,并将最有可能对您有用的内容放在 PasteBin 上。 pastebin.com/bjpS1mgg。除了我上面展示的之外,还有一个新方法 cache.get_or_eval() 简化了检查/设置缓存,另一个修复了模板变量解析方法,以便一个简单的值,例如{{something}},如果它实际上是一个 callable(),就会被调用。我们使用包裹在重量级 DB 调用周围的 curried 函数,并在上下文中传递它们。这两个修复程序都是 MonkeyPatches,并且会被一些人不赞成。嗯。
  • 谢谢你分享这些,彼得。
【解决方案2】:

我向我建议的其他答案:

  1. 将 Gunicorn 视为开发服务器:http://gunicorn.org/ (orginNell)
  2. 考虑在 basehttp.py 上使用类继承来创建新的管理命令并避免与核心代码 (orginNell) 混淆
  3. 使用真实服务器 (Harro)
  4. 编写一些中间件以记录到文件 (Harro)
  5. 考虑用 django-devserver 替换内置服务器:http://github.com/dcramer/django-devserver (mikeshantz)
  6. 我喜欢cherrypy 和 django:http://www.cherrypy.org/ (John M)
  7. 切诺基也很好:http://www.cherokee-project.com/ (John M)

【讨论】:

  • 哇!我认为我从 your 的答案中得到的答案比你从我的答案中得到的更多。谢谢!