Django通用投票应用程序
项目描述
这是一个通用的投票应用程序,适用于Django项目,允许为任何模型实例注册投票。
安装
安装django-voting软件包
将voting添加到你的INSTALLED_APPS
INSTALLED_APPS = [ … 'voting', … ]
运行django-admin migrate
使用方法
投票
投票由位于voting.models模块中的Vote模型表示。
使用record_vote辅助函数来记录投票
>>> from django.contrib.auth.models import User >>> from shop.apps.products.models import Widget >>> from voting.models import Vote >>> user = User.objects.get(pk=1) >>> widget = Widget.objects.get(pk=1) >>> Vote.objects.record_vote(widget, user, +1)
可以使用get_score辅助函数检索对象的分数
>>> Vote.objects.get_score(widget) {'score': 1, 'num_votes': 1}
如果同一用户在相同对象上再次进行投票,其投票将根据需要修改或删除
>>> Vote.objects.record_vote(widget, user, -1) >>> Vote.objects.get_score(widget) {'score': -1, 'num_votes': 1} >>> Vote.objects.record_vote(widget, user, 0) >>> Vote.objects.get_score(widget) {'score': 0, 'num_votes': 0}
字段
Vote对象有以下字段
user – 进行投票的用户。用户由django.contrib.auth.models.User模型表示。
content_type – 投票对象的ContentType。
object_id – 投票对象的id。
object – 投票的对象。
vote – 投票的内容:+1或-1。
方法
Vote对象有以下自定义方法
is_upvote – 如果投票为+1,则返回True。
is_downvote – 如果投票为-1,则返回True。
管理函数
Vote模型有一个自定义管理器,它具有以下辅助函数
record_vote(obj, user, vote) – 记录用户对指定对象的投票。只允许给定用户在指定对象上投票一次,但投票可以更改。
vote必须是1(点赞)、-1(踩)或0(移除投票)之一。
get_score(obj) – 获取obj的总分数和收到的总投票数。
返回一个包含score和num_votes键的字典。
get_scores_in_bulk(objects) – 获取所有给定对象的分数和投票计数详情。分数详情由具有score和num_vote键的字典组成。
返回一个将对象id映射到分数详情的字典。
get_top(Model, limit=10, reversed=False) – 获取给定模型中分数最高的limit个对象。
如果reversed为True,则检索分数最低的limit个对象。
产生(object, score)元组。
get_bottom(Model, limit=10) – 这是一个便利方法,它使用reversed=True调用get_top。
获取给定模型分数最低的(即最负面的)limit个对象。
产生(object, score)元组。
get_for_user(obj, user) – 获取给定用户对指定对象的投票,如果不存在匹配的投票,则返回 None。
get_for_user_in_bulk(objects, user) – 获取给定用户对所有指定对象的投票。
返回一个将对象 ID 映射到投票的字典。
get_voted_users(object) – 获取对给定对象投票的所有用户。
返回包含用户 ID 的对象列表。
通用视图
voting.views 模块包含用于处理一些常见情况的视图:通过 GET 请求显示确认投票的页面,并通过 POST 请求进行投票,或者通过 XMLHttpRequest POST 投票。
以下示例 URLconf 展示了如何使用通用视图对模型进行投票,允许在同一 URL 上进行常规投票和 XMLHttpRequest 投票。
from django.urls import re_path from voting.views import vote_on_object from shop.apps.products.models import Widget widget_kwargs = { 'model': Widget, 'template_object_name': 'widget', 'allow_xmlhttprequest': True, } urlpatterns = [ re_path( r"^widgets/(?P<object_id>\d+)/(?P<direction>up|down|clear)vote/?$", vote_on_object, kwargs=widget_kwargs, ), ]
voting.views.vote_on_object
描述
一个显示确认页面并对对象进行投票的视图。如果请求方法是 POST,则将只对给定对象进行投票。如果通过 GET 获取此视图,它将显示一个包含表单的确认页面,该表单将 POST 到同一 URL。
必需参数
model:将被投票的对象的 Django 模型类。
必需提供 object_id 或 (slug 和 slug_field)。
如果您提供 object_id,它应该是被投票对象的主键字段的值。
否则,slug 应该是给定对象的 slug,而 slug_field 应该是 QuerySet 模型中 slug 字段的名称。
direction:要进行的投票类型,必须是 'up'、'down' 或 'clear' 之一。
必须提供定义 URL 的 post_vote_redirect 参数,或者在请求 POST 投票时提供包含 URL 的 next 参数,或者被投票的对象必须定义 get_absolute_url 方法或属性。
视图将按上述顺序检查这些。
可选参数
allow_xmlhttprequest:一个布尔值,表示此视图是否还应允许通过 XMLHttpRequest 进行投票。
如果这是 True,则将检查请求头中的 HTTP_X_REQUESTED_WITH 头,其值为 XMLHttpRequest。如果找到此头,则将当前请求的处理委托给 voting.views.xmlhttprequest_vote_on_object。
template_name:用于渲染页面的模板的完整名称。这允许您覆盖默认模板名称(见下文)。
template_loader:用于加载模板的模板加载器。默认情况下,它是 django.template.loader。
extra_context:要添加到模板上下文的值字典。默认情况下,这是一个空字典。如果字典中的值是可调用的,则通用视图将在渲染模板之前调用它。
context_processors:要应用到视图模板上的模板上下文处理器列表。
template_object_name:指定在模板上下文中使用的模板变量的名称。默认情况下,这是'object'。
模板名称
如果没有指定template_name,则此视图将默认使用模板<app_label>/<model_name>_confirm_vote.html。
模板上下文
除了extra_context之外,模板的上下文还将包含
object:即将进行投票的原始对象。该变量的名称取决于template_object_name参数,默认为'object'。如果template_object_name是'foo',则该变量的名称将是foo。
direction:传递给投票方向direction的参数(见上文)。
voting.views.xmlhttprequest_vote_on_object
描述
一个用于通过XMLHttpRequest进行对象投票的视图。如果请求方法是POST,则将对该对象进行投票。此视图将返回JSON文本,而不是渲染模板或重定向。
必需参数
model:将被投票的对象的 Django 模型类。
必需提供 object_id 或 (slug 和 slug_field)。
如果您提供 object_id,它应该是被投票对象的主键字段的值。
否则,slug 应该是给定对象的 slug,而 slug_field 应该是 QuerySet 模型中 slug 字段的名称。
direction:要进行的投票类型,必须是 'up'、'down' 或 'clear' 之一。
JSON文本上下文
返回的JSON文本提供的上下文将是
success:如果投票成功处理,则为true,否则为false。
score:一个包含score属性的对象,其中包含对象的更新分数,以及包含为对象投的票总数的num_votes属性。
error_message:如果投票未成功处理,则此属性将包含错误信息。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
django-voting-1.1.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c7d70c479aabe51f45ffe83dfd2509c71846e38ab433bdb9eb65f2ec0df7053e |
|
MD5 | 7654e30707801f52c197f1996f986254 |
|
BLAKE2b-256 | 11d0e49311b01f1069bed46613649a8914e09c29e469a2a851ae4255d02c8a9c |
django_voting-1.1.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | aed3523167a8b8fea69d5205fa40670e112022ec3aa7c04ef9b6a182e587da96 |
|
MD5 | 03d3985e7bfc491636b0e61243b69b69 |
|
BLAKE2b-256 | 6dc46a84de96cfde73afa676247e5748c21e332a8a1f9aba368691b51e82cf55 |