使用django创建自己的徽章引擎的可重用应用程序

django-badgify-lab的Python项目详细描述


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

它已经在Ulule上用于创建我们自己的badge mechanism

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模块:

frombadgify.recipeimportBaseRecipeimportbadgify

创建并注册配方类:

classPythonLoverRecipe(BaseRecipe):passclassJSLoverRecipe(BaseRecipe):pass# Per classbadgify.register(PythonLoverRecipe)badgify.register(JSLoverRecipe)# All at once in a listbadgify.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_SIZE500)。

示例:

fromdjango.contrib.staticfiles.storageimportstaticfiles_storagefrombadgify.recipeimportBaseRecipeimportbadgifyfrom.modelsimportMyCustomUserclassPythonLoverRecipe(BaseRecipe):"""
    People loving Python.
    """name='Python Lover'slug='python-lover'description='People loving Python programming language'@propertydefimage(self):returnstaticfiles_storage.open('python-lover.png')@propertydefuser_ids(self):return(MyCustomUser.objects.filter(love_python=True).values_list('id',flat=True))classJSLoverRecipe(BaseRecipe):"""
    People loving JS.
    """name='JS Lover'slug='js-lover'description='People loving JS programming language'@propertydefimage(self):returnstaticfiles_storage.open('js-lover.png')@propertydefuser_ids(self):return(MyCustomUser.objects.filter(love_js=True).values_list('id',flat=True))classJavaLoverRecipe(BaseRecipe):"""
    People loving Java.
    """name='Java Lover'slug='java-lover'description='People loving Java programming language'@propertydefimage(self):returnstaticfiles_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

模板标记

badgifu徽章

接受两个可选参数:

  • user:一个User对象
  • username:aUser用户名

没有任何争论,显示所有徽章。否则,由指定用户颁发的徽章。

{%loadbadgify_tags%}{%badgify_badgesasbadges%}{%badgify_badgesusername="johndoe"asbadges%}{%badgify_badgesuser=userasbadges%}{%forbadgeinbadges%}{{badge.name}}{%endfor%}

视图

django badgify提供两个视图:

  • badgify.views.BadgifyListView:将所有徽章显示为分页列表
  • badgify.views.BadgifyDetailView:将授予的用户显示为给定徽章的分页列表

此应用程序不包括模板。它允许您实现 您喜欢的模板(请参见示例项目)。

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

# -*- coding: utf-8 -*-fromdjango.conf.urlsimportinclude,urlurlpatterns=[# Your other includesurl(r'^badges/',include('badgify.urls')),]

有关更多详细信息,请参见示例项目。

定制型号

django badgify允许您为Badge和^{tt16}定义自己的模型类$ 模型。这对i18n很有用 (例如:django-transmetta支持) 添加自定义字段、方法或属性。

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

# yourapp.modelsfrombadgify.modelsimportbaseclassBadge(base.Badge):# you own fields / logic hereclassMeta(base.Badge.Meta):abstract=FalseclassAward(base.Award):# you own fields / logic hereclassMeta(base.Award.Meta):abstract=False

然后告诉应用程序用它们代替settings.py模块中的默认值:

# yourapp.settingsBADGIFY_BADGE_MODEL='yourapp.models.Badge'BADGIFY_AWARD_MODEL='yourapp.models.Award'

设置

可以通过在^{tt3}中定义设置来更改应用程序行为$ 模块。

所有应用程序设置的前缀都是BADGIFY_

BADGIFY_BADGE_IMAGE_UPLOAD_ROOT

Badge模型ImageField的根路径。

BADGIFY_BADGE_IMAGE_UPLOAD_URL

url Badge模型ImageField

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
  • Python3.4:django 1.9,1.10
  • Python3.5:django 1.9,1.10

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用Java中的扫描仪读取文本文件中的特定字符?   java如果我们在hibernate中开始事务但不提交它,会发生什么?   Azure CosmosDB Java Springboot中的无服务器帐户不支持spring boot设置提供吞吐量或容器自动导航   附加到新对象的Java注释?   java如何将自定义文本视图添加到。在Kotlin中添加通知操作   java Shibboleth添加_OpenSAMLcookies,导致HTTP头大小>8k   分布式传感器数据(~40Hz)的高效Java观测器设计   java如何在while循环外声明数组,但在while循环中初始化它?   用@XmlElementRef注释的java元素没有显示在JAXB编组字符串中?   java替换二维数组的值   java如何在任务栏上创建Windows7加载栏   java如何在组件注释bean中使用会话或RequestScope bean?   java netbeans freermarker插件错误:在实现版本中请求netbeans桥的插件Lexer   java谷歌地图方向。加载失败,返回服务器错误   java当我试图递归地计算两个值之间的整数之和时,为什么结果返回一个奇怪的值?   java如何通过html文件的用户获取运行时输入,以使用Jsoup进行解析?