跳转到主要内容

一个可重用的应用程序,用于使用Django创建自己的徽章引擎

项目描述

这个Django应用程序将帮助您在网站上创建自己的徽章系统。

它已在Ulule上使用,以创建我们自己的徽章机制

Build Status

安装

$ pip install django-badgify

使用方法

badgify 添加到 settings.py 中的 INSTALLED_APPS

INSTALLED_APPS = (
    # ...
    'badgify',
)

同步数据库

$ python manage.py migrate badgify

在您的Django应用程序中创建一个 badgify_recipes.py 文件

$ cd path/to/your/django/app
$ touch badgify_recipes.py

打开此文件,导入 badgify.recipe.BaseRecipe 类和 badgify 模块

from badgify.recipe import BaseRecipe
import badgify

创建并注册您的配方类

class PythonLoverRecipe(BaseRecipe):
    pass


class JSLoverRecipe(BaseRecipe):
    pass


# Per class
badgify.register(PythonLoverRecipe)
badgify.register(JSLoverRecipe)

# All at once in a list
badgify.register([PythonLoverRecipe, JSLoverRecipe])

配方类必须实现

  • name 类属性

    徽章名称(人性化)。

  • image 属性

    徽章图像/标志作为文件对象。

配方类可以实现

  • slug 类属性

    徽章slug(内部和URL中使用)。如果未提供,它将根据徽章名称自动生成。

  • 描述 类属性

    徽章描述(简短)。如果未提供,值将为空。

  • user_ids 属性

    QuerySet 返回可能被授予的用户ID。您必须返回一个 QuerySet,而不仅仅是Python列表或元组。您可以使用 values_list('id', flat=True).

  • db_read 类属性

    用于执行读取查询的数据库别名。默认为 django.db.DEFAULT_DB_ALIAS

  • batch_size 类属性

    一次性创建多少个 Award 对象。默认为 BADGIFY_BATCH_SIZE500)。

示例

from django.contrib.staticfiles.storage import staticfiles_storage

from badgify.recipe import BaseRecipe
import badgify

from .models import MyCustomUser


class PythonLoverRecipe(BaseRecipe):
    """
    People loving Python.
    """
    name = 'Python Lover'
    slug = 'python-lover'
    description = 'People loving Python programming language'

    @property
    def image(self):
        return staticfiles_storage.open('python-lover.png')

    @property
    def user_ids(self):
        return (MyCustomUser.objects.filter(love_python=True)
                                    .values_list('id', flat=True))


class JSLoverRecipe(BaseRecipe):
    """
    People loving JS.
    """
    name = 'JS Lover'
    slug = 'js-lover'
    description = 'People loving JS programming language'

    @property
    def image(self):
        return staticfiles_storage.open('js-lover.png')

    @property
    def user_ids(self):
        return (MyCustomUser.objects.filter(love_js=True)
                                    .values_list('id', flat=True))


class JavaLoverRecipe(BaseRecipe):
    """
    People loving Java.
    """
    name = 'Java Lover'
    slug = 'java-lover'
    description = 'People loving Java programming language'

    @property
    def image(self):
        return staticfiles_storage.open('java-lover.png')


badgify.register([
    PythonLoverRecipe,
    JSLoverRecipe,
    JavaLoverRecipe,
])

一旦您实现并注册了您的配方类,您就可以调用下面的可用命令

# Create badges from recipes
$ python manage.py badgify_sync badges

# Update badges from recipes
$ python manage.py badgify_sync badges --update

# Create awards
$ python manage.py badgify_sync awards

# Create awards bypassing signals (improve performances)
$ python manage.py badgify_sync awards --disable-signals

# Only create awards for "python" badge
$ python manage.py badgify_sync awards --badges python

# Only create awards for "python" and "go" badges
$ python manage.py badgify_sync awards --badges "python go"

# Create awards for all badges, except "php"
$ python manage.py badgify_sync awards --exclude-badges php

# Create awards for all badges, except "php" and "java"
$ python manage.py badgify_sync awards --exclude-badges "php java"

# Denormalize Badge.users.count() into Badge.users_count field
$ python manage.py badgify_sync counts

# Only denormalize counts for "python" badge
$ python manage.py badgify_sync counts --badges python

# Denormalize counts for all badges, except "php"
$ python manage.py badgify_sync counts --exclude-badges php

# Denormalize counts for all badges, except "php" and "java"
$ python manage.py badgify_sync counts --exclude-badges "php java"

# Typical workflow for best performances
$ python manage.py badgify_sync badges
$ python manage.py badgify_sync awards --disable-signals
$ python manage.py badgify_sync counts

# WARNING: if you delete awards to start again with a fresh table
# don't forget to update Badge.users_count field. Or use this command:
$ python manage.py badgify_reset

# Typical workflow for best performances if you want to recompute awards
$ python manage.py badgify_reset
$ python manage.py badgify_sync awards --disable-signals
$ python manage.py badgify_sync counts

模板标签

badgify_badges

接受两个可选参数

  • user:一个 User 对象

  • username:一个 User 用户名

没有参数时,显示所有徽章。否则,显示指定用户授予的徽章。

{% load badgify_tags %}

{% badgify_badges as badges %}
{% badgify_badges username="johndoe" as badges %}
{% badgify_badges user=user as badges %}

{% for badge in badges %}
    {{ badge.name }}
{% endfor %}

视图

django-badgify 提供了两个视图

  • badgify.views.BadgifyListView:以分页列表显示所有徽章

  • badgify.views.BadgifyDetailView:显示特定徽章的分页列表中授予的用户

此应用程序不包含模板。它允许您按喜好实现模板(请参阅示例项目)。

要包含这两个视图,请包含提供的 badgify.urls

# -*- coding: utf-8 -*-
from django.conf.urls import include, url

urlpatterns = [
    # Your other includes
    url(r'^badges/', include('badgify.urls')),
]

请参阅示例项目以获取更多详细信息。

自定义模型

django-badgify 允许您为 BadgeAward 模型定义自己的模型类。这可以非常适用于i18n功能(例如:支持 django-transmetta),添加自定义字段、方法或属性。

您的模型必须继承自 badgify.models.base 模型类

# yourapp.models

from badgify.models import base


class Badge(base.Badge):
    # you own fields / logic here
    class Meta(base.Badge.Meta):
        abstract = False


class Award(base.Award):
    # you own fields / logic here
    class Meta(base.Award.Meta):
        abstract = False

然后在您的 settings.py 模块中告诉应用程序使用它们来代替默认的模型

# yourapp.settings

BADGIFY_BADGE_MODEL = 'yourapp.models.Badge'
BADGIFY_AWARD_MODEL = 'yourapp.models.Award'

设置

您可以通过在您的 settings.py 模块中定义设置来更改应用程序的行为。

所有应用程序设置都以前缀 BADGIFY_ 开头。

BADGIFY_BADGE_IMAGE_UPLOAD_ROOT

Badge 模型 ImageField 的根路径。

BADGIFY_BADGE_IMAGE_UPLOAD_URL

Badge 模型 ImageField 的URL。

BADGIFY_BADGE_IMAGE_UPLOAD_STORAGE

您的自定义 django.core.files.storage 存储实例。

BADGIFY_BADGE_LIST_VIEW_PAGINATE_BY

徽章列表页面上显示的徽章数量。

BADGIFY_BADGE_DETAIL_VIEW_PAGINATE_BY

徽章详情页面上显示的授予用户的数量。

BADGIFY_BADGE_MODEL

您自己的具体 Badge 模型类作为模块路径。

例如: yourapp.models.Badge

BADGIFY_AWARD_MODEL

您自己的具体 Award 模型类作为模块路径。

例如: yourapp.models.Award

BADGIFY_BATCH_SIZE

一次性创建的最大 Award 对象数。

默认为 500

贡献

# Don't have pip?
$ sudo easy_install pip

# Don't already have virtualenv?
$ sudo pip install virtualenv

# Clone and install dependencies
$ git clone https://github.com/ulule/django-badgify.git
$ cd django-badgify
$ make install

# Launch tests
$ make test

# Launch example project
$ make create_fixtures
$ make serve

兼容性

  • python 2.7:Django 1.9,1.10

  • Python 3.4:Django 1.9,1.10

  • Python 3.5:Django 1.9,1.10

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

django-badgify-lab-0.2.0.tar.gz (25.6 kB 查看哈希值)

上传时间

构建分发

django_badgify_lab-0.2.0-py3-none-any.whl (38.4 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面