【问题标题】:How to write a html gui (django) for a python server module如何为 python 服务器模块编写 html gui (django)
【发布时间】:2011-07-11 06:29:41
【问题描述】:

为例如python中的多路复用tcp服务器构建HTML gui的方法是什么?

我熟悉用 Django 建网站,但我不明白的是,tcp 服务器部分是如何与 Django 相关视图通信的?我如何实现数据共享(我是否看到树木的木材)? 对我来说,问题是无状态的“请假”和“状态已满”的 py 模块“作为守护进程运行”之间的映射。

问候

编辑我的独立应用程序框架:

#!/usr/bin/python

from django.core.management import setup_environ
import settings
setup_environ(settings)

from myapp.models import fanzy


def main():
    for each in fanzy.objects.all():
        print each.id, each.foo


if __name__ == '__main__':
    main()

【问题讨论】:

  • 我想我可以将 python 模型导入到我的服务器应用程序中。然后我可以玩 apidocs.djangoproject.com/en/dev/intro/tutorial01/… 太简单了 :)
  • 这并不总是那么容易,主要是因为进程的生命周期。例如,如果您通过 CGI 运行 Django,每个进程有 1 个请求,那么您的 TCP 服务器将不会在视图之间保持活动状态。同样,如果您使用多个进程来处理请求(例如使用 FastCGI),那么您将同时运行多个服务器。

标签: python html django user-interface


【解决方案1】:

Django is just Python,因此您用 Python 编写的任何内容都可以导入并在您为 Django 编写的“视图”中引用,以作为 HTTP 响应返回。

在回答您问题的另一部分时,处理 TCP 连接的 HTTP 服务器与 python 框架通信的方式最常见的是通过称为 WSGI 的协议。 This is a good place 获取更多关于 WSGI 原理的知识。这是another

关于运行后台进程和提供该进程活动的视图,最好将这两个问题分开。您可以将数据写入文件或数据库,然后通过您的 Web 应用程序访问和提供这些数据。

这些只是一般的 cmets,因为您的问题并不完全清楚。如有其他问题,请随时回复。

【讨论】:

  • 在仔细思考并阅读您的答案之后,自然而然地编写一个“标准 Web 应用程序”,将数据存储在文件/数据库中(如您所说),然后让独立的 python tcp 服务器应用程序工作将数据存储在数据库中。这正是我想要做的,这似乎是一种非常漂亮的方式!
【解决方案2】:

这并不总是像导入库那么容易,主要是因为进程的生命周期。例如,如果您通过 CGI 运行 Django,每个进程有 1 个请求,那么您的 TCP 服务器将不会在视图之间保持活动状态。同样,如果您使用多个进程来处理请求(例如使用 FastCGI),那么您将同时运行多个服务器。

如果您想让永久网络连接独立于请求生命周期,则需要在外部(守护程序)进程中运行 TCP 服务器。这是一些缓存方案的标准过程,您的所有 Django 进程通过单个守护进程(例如 Redis)共享缓存数据。

基本上,您有两种方法。

全球连接

要么为每个 Django 进程(如果你有多个)建立一个连接作为全局对象,然后从你的视图中转发请求。如果您的 TCP 服务器被编码为每个连接处理多个请求,这是最方便的。但是,如果您的 Django 进程是多线程的,则会遇到问题。

每个请求的连接

如果您的 TCP 服务器可以接受多个短期连接,这也是一种可行的方法。只需在视图的整个生命周期内打开连接即可。如果这个对象经常使用,你甚至可以添加一些中间件来打开连接并将其存储在请求对象中。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 2021-12-16
    • 2012-06-21
    • 1970-01-01
    • 2021-07-10
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多