Django的另一种收藏方法

django-classfaves的Python项目详细描述


django classfaves的概述
要将此功能添加到站点中,只需执行几个步骤。






安装一目了然创建一个对域对象具有"foreignkey"的收藏夹模型,该模型可以是您希望能够收藏或不喜欢的对象。在一个url配置中实例化"createFavorite"、"deleteFavorite"和"userFavorites",并将它们映射到urlpatterns中。集成到域对象的模板和视图中。



>安装示例:Arcade站点该网站是一个免费的在线街机网站,允许
用户将某些游戏标记为他们最喜欢的游戏。如果他们改变主意,他们可以不喜欢那些游戏。最后,他们可以
查看他们最喜欢的游戏列表。

步骤1:创建我们的模型
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我们已经有了一个看起来有点像这样的域对象:

。sourcecode::python


来自django.db import models


Class game(models.model):
name=models.charfield(max_length=64)
slug=models.slugfield(max_length=64)
description=models.textfield(blank=true)
这里还有很多字段

现在我们要做的是在同一个models.py文件中,创建我们的
最喜欢的模型,如下所示:

…sourcecode::python


from classfaves.models import favoritebase


class gamefavorite base(favoritebase):
game=models.foreignkey(game)

链接到我们的"游戏"域
对象。此模型相当于手动写入:

…sourcecode::python



from django.db import models
from django.contrib.auth.models import user


class gamefavorite(models.model):
game=models.foreignkey(game)
user=models.foreignkey(user)
dateeated=models.datetimefield(默认值为datetime.datetime.now)

我更喜欢子类化
``favoritebase``,因为它更容易。




第2步:在我们的'`url.py``文件中附加我们的视图
sourcecode::python

from django.conf.urls.defaults导入模式,url

url(r'^popular/$','popular','name='arcade\$popular'),
url(r'^new/$','new',name='arcade\$new'),
这里有更多的url



我们首先要做的是实例化由django classfaves应用程序提供的视图:

……sourcecode::python

from arcade.models导入game favorite,game
from classfaves.views导入createFavorite,deleteFavorite,userFavorites

create\favorite=createFavorite(gameFavorite,game)
delete\favorite=deleteFavorite(gameFavorite,game)
public_games=lambda qs:qs.filter(game_u enabled=true)
user_u favorites=userfavorites(gamefavorite,game,extra_u filter=public_u games)

您会注意到,我们将一个名为
``extra_filter``的参数传递给``userfavorites``以限制视图o仅显示"enabled"设置为"true"的
游戏。这可用于任意限制
``queryset``有点酷吧?

无论如何,下一步是修改我们的"url patterns",以便它映射到这些
视图:

sourcecode::python

urlpatterns=patterns('arcade.views',
url(r'^popular/$','popular',name='arcade\u popular'),
url(r'^new/$','new',name='arcade\new'),
…新网址在vvv
url(r'^favorites/create/(?p<;pk>;\d+/$',创建"收藏夹",name="街机收藏夹",
url(r'^favorites/delete/(?p<;pk>;\d+/$",删除"最爱",name="街机最爱",
url(r'^favorites/list/$",用户最爱,name="街机最爱",
url(r'^favorites/list/(?p<;user name>;[a-za-z0-9\-]+)/$'、user_favorites、name='arcade_user_favorites')、



请注意我们是如何为新视图提供正确的url名称的,以及我们是如何轻松地将它们放置在url结构中符合逻辑的位置--在
arcade应用程序的url空间下。还要注意,我们已经确保创建和删除视图有一个"pk"





步骤3:集成
~~~~~~~~~~~~~~~~~~~~~~

好吧,基本上,django classfaves根本帮不了你。原因在于设计:我们不知道你的应用程序是如何构建的,也不知道你想如何使用它,所以我们想完全由你来决定。

首先,在您实际玩游戏的页面上,
我们希望您能够决定您喜欢它并喜爱它。我们还想确保在您仍在玩
游戏时可以执行此操作,因此需要使用javascript进行异步操作。


我们的第一步是修改游戏页的view函数。

…sourcecode::python

游戏收藏夹

def play(请求,game_slug=none):
我们在这里的一些视图代码
false
if request.user.is_authenticated():
favorite=gamefavorite.objects.filter(user=request.user,
game=game.count()>;0
context={
这里的其他上下文
"favorite":favorite,
}
我们在这里查看的其余代码

只有几行代码,我们现在知道用户是否喜欢
那个特定的域对象(游戏)了。

ated%}
{%if favorite%}
<;{%endif%}
{%else%}
<;a href="{%url arcade_favorite_create game.id%}"class="fav"id="favorite{{{game.id}"class="favorite">;添加为收藏夹<;/a>;
{%endif%}


或者他们还没有喜欢这个游戏,我们在链接上设置了一些类和url以及
消息。


我们还有一些javascript,看起来像这样:

…sourcecode::javascript

$('a.favorite.fave').live('click',function(e){
var pk=$(this).attr('id').replace('favorite掼,');
var url=base掼create+pk+'/';
$.getjson(url,function(data,textstatus){
$('掼favorite掼+pk)。removeclass('fave').addClass('取消固定').text('re移动为收藏夹');
};
返回false;
};
$('a.favorite.unfave').live('click',function(e){
var pk=$(this).attr('id').replace('favorite','');
var url=base_delete+pk+'/';
$.getjson(url,函数(data,textstatus){
$('收藏夹'+pk).removeclass('unfave').addClass('fave').text('add as favorite');
};
返回false;
};
};


假设它接受create和delete页面的基本url,并将带有某些类的链接转换为ajax调用,进入create和delete视图。

最后,在页面底部,我们初始化这个javascript如下:

源代码::html

<;script type="text/javascript">;
$(function(){
添加"最喜爱的"处理程序('/games/favorites/create/','/games/favorites/delete/');
});
<;/script>;

还不错吧?您可以浏览"radiox"
并玩一个游戏来查看它的运行情况。在任何游戏的右上角查看"收藏/取消收藏"按钮。_` radiosox`:http://radiosox.com/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?