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/
要将此功能添加到站点中,只需执行几个步骤。
安装一目了然创建一个对域对象具有"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'^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/