我已经阅读了关于Django和HTTP Push的所有问题和答案.然而,没有一个提供关于如何实现所谓"彗星"功能的基本"hello world"的清晰,简洁,开端到终端的解决方案.
第一个问题(1):HTTP在多大程度上没有(至少到目前为止)为此做出的问题?所有潜在的解决方案基本上都是黑客吗?
2)目前最好的解决方案是什么?
其他解决方案?
3)nginx推送模块如何参与此讨论?
4)这些解决方案中哪一个需要替换典型的mod_wsgi/nginx(或apache)部署模型?他们为什么要这个?在任何情况下这都是有利的转变吗?
5)使用已经在Python中的解决方案的优势有多重要?
来自PyCon 2010的Alex Gaynor的演讲,我刚刚在blip.tv上观看过,它非常精彩且内容丰富,但对Django中HTTP Push的当前状态并不十分具体.他说的一件事给了我一些信心:Orbited在抽象和模拟网络套接字的概念方面做得很好.因此,当WebSockets实际着陆时,我们将处于转型的好地方.
6)HTML5 Websockets与当前解决方案有何不同?Gaynor对从Orbited过渡的难易程度的评估是否准确?
假设:我找到一个带有按钮的页面('#bigButton'),单击该按钮会导致llama('img #theLlama')使用jQuery显示().
所以,在buttons.js中的某个地方(比如第76行):
$('#bigButton').click(function(){
$('img#theLlama').show();
})
Run Code Online (Sandbox Code Playgroud)
现在,假设我有一个包含大量.js文件的大HTML页面.我可以点击按钮看到骆驼出现,但我不知道上面的代码在哪里.
我正在寻找的解决方案与Firebug中的CSS提供的解决方案非常相似.我想检查元素,让它告诉我这个jQuery发生在buttons.js的第76行,以及这个元素上的任何其他绑定.
*注意:赏金是针对'美洲驼问题'的特定答案,即指向上述解决方案.*
FireQuery是许多jQuery任务的一个很好的工具,但它似乎没有回答骆驼问题.如果我错了,请纠正我.
我使用Postgres进行生产和开发,但我想使用sqlite来运行一些测试.我没有看到一种简单的方法来配置一个引擎用于测试,另一个用于开发/生产.我错过了什么吗?
尽管我喜欢django文档,但管理员中关于bookmarklet的部分却很奇怪.
我的问题是这样的:如果我在视图中并且我有一个django模型(或者,在某些情况下,是一个实际的对象),我怎样才能到达该模型(或对象)的相关管理页面?如果我有对象coconut_transportation.swallow.objects.all()[34],我怎么能直接跳到管理页面来编辑那个特定的燕子?
同样,如何获取管理页面的URL以添加另一个吞咽?
websockets的有趣部分是从服务器向浏览器发送基本上未经请求的内容吗?
好吧,我正在使用GregorMüllegger的django-websocket.在使用Django的websockets时,这是一个非常精彩的早期破解.
我已经完成了"你好世界".其工作方式是:当请求是websocket时,对象websocket将附加到请求对象.因此,我可以在解释websocket的视图中执行以下操作:
request.websocket.send('We are the knights who say ni!')
Run Code Online (Sandbox Code Playgroud)
这很好.我在浏览器中收到的消息就像魅力一样.
但是,如果我想在不发出浏览器请求的情况下这样做呢?
好的,首先我将websocket保存在会话字典中:
request.session['websocket'] = request.websocket
Run Code Online (Sandbox Code Playgroud)
然后,在shell中,我按会话密钥抓取会话.果然,会话字典中有一个websocket对象.快乐!
但是,当我尝试做的时候:
>>> session.get_decoded()['websocket'].send('With a herring!')
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "<console>", line 1, in <module>
error: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
伤心.:-(
好了,我不知道很多关于插座什么,但我知道足够嗅出在调试器周围,你瞧,我看到在我的调试器插座(这是联系在一起的真正的WebSocket从请求)已FD = 6,而我从会话保存的网页套接字抓起一个已FD = -1.
套接字导向的人可以帮我解决这个问题吗?
在我对websockets的持续好奇心中,我注意到了一个趋势:
至少在目前,websocket宇宙的"hello world"似乎是"回声"功能.也就是说,演示的应用程序通常是"我送东西,我收到的东西."
虽然恰当地证明了协议是有用的,但这个例子实际上只展示了传统请求/响应周期所能实现的相同类型的通信.
例如,我可以找到twisted.web.websockets的唯一演示(在服务器端)如下:
import sys
from twisted.python import log
from twisted.internet import reactor
from twisted.web.static import File
from twisted.web.websocket import WebSocketHandler, WebSocketSite
class Echohandler(WebSocketHandler):
def frameReceived(self, frame):
log.msg("Received frame '%s'" % frame)
self.transport.write(frame + "\n")
def main():
log.startLogging(sys.stdout)
root = File(".")
site = WebSocketSite(root)
site.addHandler("/ws/echo", Echohandler)
reactor.listenTCP(8080, site)
reactor.run()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
我怎样才能在这里检查"推送"功能?也就是说,我如何让Web套接字保持打开状态,然后在某个时间由某些事件的发生决定,通过websocket发送消息,其内容也受此事件的影响?
(那些对这个问题感兴趣的人也可能会认为这个问题引起了我几天前提出的问题:使用websockets和python/django进行移动(/ twisted?))
注意:如果你想通过告诉我你不喜欢django.contrib.auth来回答这个问题,请继续.这没有用.我很清楚这个问题的意见范围和力度.
现在,问题是:
惯例是使用OneToOne to User创建一个模型UserProfile.
在我能想到的各种方式中,一种更有效和更有效的方法是将User子类化为一个打算用于系统中每个人的类 - 一个名为Person(User)的类.
我没有看到为什么前者是传统的而后者被视为黑客的连贯解释.不久之前,我改用了OneToOne方法,以便获得使用get_profile()的能力,从此我就后悔了.除非我能理解这种方法的优点,否则我正在考虑转回去.
django django-models django-contrib django-authentication django-users
我很惊讶这个问题显然还不存在.如果有,请帮我找到它.
我想使用annotate(Count)和order_by,但我不想计算相关对象的每个实例,只计算满足某个标准的那些实例.
也就是说,我可以根据他们携带的绿椰子的数量来列出燕子:
swallow.objects.annotate(num_coconuts=Count('coconuts_carried__husk__color = "green"').order_by('num_coconuts')
Run Code Online (Sandbox Code Playgroud) 给定一个名为package-list的文件,我想做类似的事情:
salt state.sls install-packages list_to_install=package-list
Run Code Online (Sandbox Code Playgroud)
......然后在sls中:
packages:
pkg.installed:
- names:
{% include list_to_install %}
Run Code Online (Sandbox Code Playgroud) django ×7
comet ×2
python ×2
websocket ×2
django-admin ×1
django-urls ×1
django-users ×1
django-views ×1
events ×1
firebug ×1
javascript ×1
jinja2 ×1
jquery ×1
onclick ×1
salt ×1
session ×1
sockets ×1
twisted ×1
twisted.web ×1