一个可重用的应用程序,用于使用Django创建自己的徽章引擎
项目描述
此Django应用程序可以帮助您在网站上创建自己的徽章系统。
安装
$ pip install django-badgify
用法
将 badgify 添加到您的 INSTALLED_APPS 中的 settings.py
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)。如果没有提供,将根据徽章名称自动生成。
- description 类属性
徽章描述(简短)。如果没有提供,值为空。
- 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 模型定义自己的模型类。这对于国际化内容(例如:支持 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
项目详情
django-badgify-0.6.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 16345779751e94565d2e441ac8a19768449a45368f0323f87f890f15cea90659 |
|
MD5 | ea00acbc1602db9f13587d8b5a3ffc09 |
|
BLAKE2b-256 | 1cb3d50cf2633dbd726af82ccff814b2e23a21652f55bd4d5910ac1902e8c63a |