一个可重用的应用程序,用于使用Django创建自己的徽章引擎
项目描述
这个Django应用程序将帮助您在网站上创建自己的徽章系统。
安装
$ 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_SIZE(500)。
示例
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
视图
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 允许您为 Badge 和 Award 模型定义自己的模型类。这可以非常适用于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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fdbd75862dd85621928ee4a78accc2333213d613a0cf154a4e08f455f2378836 |
|
MD5 | abb44d4f741856dce4e70afd4741a697 |
|
BLAKE2b-256 | f9b4807955e321e5ac2ec7346caaaec98c2478f39b1248219c2a10441bd2d3f3 |
django_badgify_lab-0.2.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 830514cc96cb48bbabcd74e7553d270124ccbef89b0c0858a6b51ca5e3c2a110 |
|
MD5 | 92f52f7ce23d6ff42c7c3deaeeb456db |
|
BLAKE2b-256 | faa2da63bfb7e66eb9a90e4e9c71239d98ea82db3b893a364ca865b0d8f56560 |