如何为Python服务器模块编写HTML GUI(Django)
我想知道,怎么才能用HTML做一个图形界面,比如说为一个多路复用的TCP服务器在Python中搭建界面?
我对用Django建网站比较熟悉,但我不太明白的是,TCP服务器是怎么和Django的视图部分进行沟通的?我该怎么实现数据共享(我是不是看不清楚重点)?
对我来说,问题在于无状态的“获取和离开”和有状态的Python模块“作为守护进程运行”之间的关系。
问候
编辑我的独立应用程序框架:
#!/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()
2 个回答
导入库并不总是那么简单,主要是因为进程的生命周期。例如,如果你通过CGI运行Django,每个进程只处理一个请求,那么你的TCP服务器在不同的视图之间不会保持活跃。类似地,如果你使用多个进程来处理请求(比如使用FastCGI),那么会有多个服务器同时运行。
如果你想要保持永久的网络连接,而不受请求生命周期的影响,你需要在一个外部的(守护进程)进程中运行TCP服务器。这是一些缓存方案的标准做法,在这些方案中,所有的Django进程通过一个单独的守护进程共享缓存数据(例如Redis)。
基本上,你有两种方法。
全局连接
可以为每个Django进程(如果有多个的话)建立一个全局对象的连接,并从你的视图中转发请求到这个连接。如果你的TCP服务器能够处理每个连接的多个请求,这种方法是最方便的。不过,如果你的Django进程是多线程的,就会遇到一些问题。
每个请求的连接
如果你的TCP服务器可以接受多个短暂的连接,这也是一个可行的方法。只需在视图的生命周期内打开连接。如果这个对象使用得足够频繁,你甚至可以添加一些中间件,打开连接并将其存储在请求对象中。
Django其实就是Python,所以你在Python中写的任何代码都可以在Django的“视图”中导入和引用,这样Django就能把结果作为HTTP响应返回给用户。
关于你问题的另一个部分,HTTP服务器处理TCP连接的方式,通常是通过一种叫做WSGI的协议来和Python框架沟通。这里有个不错的地方可以了解WSGI的基本原理。还有另一个链接。
关于运行后台进程和展示该进程活动的视图,最好把这两个问题分开处理。你可以把数据写入文件或数据库,然后通过你的网页应用访问和展示这些数据。
这些只是一些一般性的评论,因为你的问题不是特别清楚。如果还有其他问题,请随时问我。