"""Middleware to handler the Star badge """ from django.conf import settings from django.db.models import F from badges_handler.models import Model3d, Badge, Creator3d from badges_handler.views import Model3dDetailView STAR_BADGE_DETAIL_VIEW_FUNC = Model3dDetailView.as_view() class StarBadgeMiddleWare: def process_view(self, request, view_func, *args, **kwargs): if view_func.__name__ == STAR_BADGE_DETAIL_VIEW_FUNC.__name__\ and request.method.lower() == 'get': m = Model3d.objects.filter(pk=int(args[1]['pk'])) if not m.first(): # do nothing particular, let Django raise 404 error return None m.update(number_of_views=F('number_of_views') + 1) # check the number of views for the star views_for_star_badges = settings.BADGES_SETTINGS.get('star', None) if views_for_star_badges\ and m.first().number_of_views == views_for_star_badges: badge_star = Badge(content_object=m.first(), name='Star Model', description='This model has more than {} views'\ .format(views_for_star_badges), creator3d=m.first().creator) badge_star.save()
from django.conf.urls import include, url from badges_handler.views import Model3dDetailView, Model3dCreateView,\ check_new_user, Creator3dDetailView, Creator3dTemplateView from django.contrib.auth import views as auth_views from django.contrib.auth.decorators import login_required urlpatterns = [ # namespace = badges url(r'^models/(?P<pk>[0-9]+)$', Model3dDetailView.as_view(), name="detail_model"), url(r'^users/(?P<pk>[0-9]+)$', Creator3dDetailView.as_view(), name="users_model"), url(r'^models/create$', login_required(Model3dCreateView.as_view()), name="model_create"), url(r'^users/create$', Creator3dTemplateView.as_view(), name="user_create"), url(r'^users/check$', check_new_user, name='check'), url(r'^login', auth_views.login, {'template_name': 'badges_handler/login.html'}, name='login'), url(r'^logout', auth_views.logout, {'next_page': '/'}, name='logout'), ]