并改变投票()看起来像这样:

def投票要求):结果={'成功'错误的}如果要求方法==.U'GES'数据=要求得到el要求方法==.U'Post'数据=要求邮政如果数据has_key.U'PK'数据has_key.u'vote'):PK.=数据[U'PK'])投票=数据[u'vote']轮询=轮询对象得到PK.=PK.如果投票==.你“up”轮询向上()el投票==.你“下来”轮询()结果={'成功'真的}杰森=简单json.倾倒结果返回httpresponse.杰森mimetype.='application / json'

此代码有点尴尬,您可能更愿意将其重写为:

def投票要求):结果={'成功'错误的}如果要求要求has_key.U'PK'要求要求has_key.u'vote'):PK.=要求要求[U'PK'])投票=要求要求[u'vote']轮询=轮询对象得到PK.=PK.如果投票==.你“up”轮询向上()el投票==.你“下来”轮询()结果={'成功'真的}杰森=简单json.倾倒结果返回httpresponse.杰森mimetype.='application / json'

要求属性要求首先看起来邮政属性,然后看起来得到属性。因此,这正是我们想要的情况。但是,使用要求有点令人沮丧(它不太明确)。在某些地方,两者之间的选择成为一个哲学问题,即每个人都必须为自己回答。

无论哪种方式,让我们保存观点并继续。

Facebook javascript.

首先,你可能想瞥一眼

var.成功的=“真的”;var.D.=新的对话对话dialog_pop.);D.showmessage.“ajax”“该操作是”+成功的);

除了对话对象,我们也将使用另一个FBJS对象,ajax.目的。这

var.一种=新的ajax.();//也可以是ajax.raw或ajax.fbml一种responseType.=ajax.杰森;//如果您想要登录一种Quancelogin.=真的;var.P.={“一”10.“名称”“杰克”};一种邮政'http://www.abc.com/d/'P.);

与我们希望的一样简单。现在让FBS投入行动。

编辑细节.FBML模板

我们将要编辑轮询/模板/ fb / detail.fbml模板。所以让我们快速打开:

Emacs轮询/模板/ fb / detail.fbml

开始,这就是它看起来(在我们添加任何Ajax功能之前):

{%加载Facebook%}-按钮href ={%Furll.'/创造/'%}>创建一个新的民意调查</ fb:create-button>-物品href ={%Furll.'/'%}标题='所有民意调查'/>类=“轮询”>

分数“{{poll.question}}“ 是{{poll.score.}}!!

ID =“向上”>同意或者ID =“下”>不同意

现在,首先让JavaScript函数取决于或向下取决于传递给IT的参数:

功能投票PK.替补{如果替补==.真的典型=“向上”;别的典型=“下”;var.ajax.=新的ajax.();ajax.responseType.=ajax.杰森;ajax.Quancelogin.=真的;var.参数={“PK”PK.“投票”典型};ajax.邮政'http://krit.willarson.com/vote/'参数);}

好的,现在我们只需要修改我们的模板来利用投票()我们刚写的功能。在我们的细节.FBML模板我们将重写HTML DIV与ID轮询。我们修改后它看起来像:

类=“轮询”>

分数“{{poll.question}}“ 是{{poll.score.}}!!

href =“#”onclick =.“投票({{poll.pk.}}, 真的)”>同意或者href =“#”onclick =.“投票({{poll.pk.}}, 错误的)”>不同意

请注意,我们仍然可以使用我们的方便“使用Django模板自定义JavaScript”技巧。

好的。我们有什么作品,但我们有一个小问题:检查它是否有效的痛苦(您必须重新加载您手动上的页面)。所以,随着略微改进,让我们使用对话如果投票成功,则对象通知我们。

让我们修改投票()函数一点。现在它看起来像:

功能投票PK.替补{如果替补==.真的典型=“向上”;别的典型=“下”;var.ajax.=新的ajax.();ajax.ondone.=功能数据{var.D.=新的对话对话dialog_pop.);如果数据成功==.真的味精=“你的投票是成功的!”;别的味精=“你的投票失败了。:(”;D.showmessage.“投票结果”味精);}ajax.responseType.=ajax.杰森;var.参数={“PK”PK.“投票”典型};ajax.邮政'http://krit.willarson.com/vote/'参数);}

我们正在为此分配匿名功能ondone.现场ajax.。分配给该字段的任何方法都是一个参数调用:ajax请求返回的内容。该内容以您创建的格式指定的格式ajax.对象(原始,JSON或FBML)。

并且,随着这些变化,我们的AJAX功能FB.应用程序也完成了。

下一步是什么?

在这七个教程段之后,您已经了解了很多碎片:Django测试框架,Pyfacebook,FBJ和其他。这是一个好时机返回并开始修改我们一直在玩的碎片,并通过将其带到更新(更有趣)的地方来看看您是否可以将自己的意志强加到代码上。如果出现任何问题,您可以随时下载[刚刚完成的代码快照] [POLLING7]。

此时这个系列完成了,但是这里拿起的第二系列并继续在作品中。该系列将有点不同,因为它将介绍改善我们构建的质量,而不是简单地添加粗略的功能。