Browse Source

fix #710: moved users lists views to class based views

Rafał Pitoń 8 years ago
parent
commit
69c3c1e4a7
2 changed files with 75 additions and 79 deletions
  1. 3 3
      misago/users/urls/__init__.py
  2. 72 76
      misago/users/views/lists.py

+ 3 - 3
misago/users/urls/__init__.py

@@ -35,9 +35,9 @@ urlpatterns += [
 urlpatterns += [
     url(r'^users/', include([
         url(r'^$', lists.landing, name='users'),
-        url(r'^active-posters/$', lists.active_posters, name='users-active-posters'),
-        url(r'^(?P<slug>[-a-zA-Z0-9]+)/$', lists.rank_users, name='users-rank'),
-        url(r'^(?P<slug>[-a-zA-Z0-9]+)/(?P<page>\d+)/$', lists.rank_users, name='users-rank'),
+        url(r'^active-posters/$', lists.ActivePostersView.as_view(), name='users-active-posters'),
+        url(r'^(?P<slug>[-a-zA-Z0-9]+)/$', lists.RankUsersView.as_view(), name='users-rank'),
+        url(r'^(?P<slug>[-a-zA-Z0-9]+)/(?P<page>\d+)/$', lists.RankUsersView.as_view(), name='users-rank'),
     ]))
 ]
 

+ 72 - 76
misago/users/views/lists.py

@@ -1,102 +1,98 @@
-from django.contrib.auth import get_user_model
-from django.shortcuts import render as django_render
+from django.shortcuts import render
 from django.shortcuts import get_object_or_404, redirect
 from django.urls import reverse
 from django.utils import six
+from django.views import View
 
-from misago.conf import settings
-from misago.core.shortcuts import paginate, pagination_dict
 from misago.core.utils import format_plaintext_for_html
 from misago.users.models import Rank
 from misago.users.pages import users_list
 from misago.users.permissions import allow_browse_users_list
-from misago.users.serializers import UserCardSerializer
 from misago.users.viewmodels import ActivePosters, RankUsers
 
 
-def render(request, template, context):
-    request.frontend_context['USERS_LISTS'] = []
-
-    context['pages'] = users_list.get_sections(request)
-
-    for page in context['pages']:
-        page['reversed_link'] = reverse(page['link'])
-        request.frontend_context['USERS_LISTS'].append({
-            'name': six.text_type(page['name']),
-            'component': page['component'],
-        })
-
-    active_rank = context.get('rank')
-    for rank in Rank.objects.filter(is_tab=True).order_by('order'):
-        context['pages'].append({
-            'name': rank.name,
-            'reversed_link': reverse('misago:users-rank', kwargs={
-                'slug': rank.slug
-            }),
-            'is_active': active_rank.pk == rank.pk if active_rank else None
-        })
-
-        if rank.description:
-            description = {
-                'plain': rank.description,
-                'html': format_plaintext_for_html(rank.description)
-            }
-        else:
-            description = None
-
-        request.frontend_context['USERS_LISTS'].append({
-            'id': rank.pk,
-            'name': rank.name,
-            'slug': rank.slug,
-            'css_class': rank.css_class,
-            'description': description,
-            'component': 'rank',
-        })
-
-    for page in context['pages']:
-        if page['is_active']:
-            context['active_page'] = page
-            break
-
-    return django_render(request, template, context)
-
-
-def allow_see_list(f):
-    def decorator(request, *args, **kwargs):
+class ListView(View):
+    def get(self, request, *args, **kwargs):
         allow_browse_users_list(request.user)
-        return f(request, *args, **kwargs)
-    return decorator
+
+        context_data = self.get_context_data(request, *args, **kwargs)
+
+        context_data['pages'] = users_list.get_sections(request)
+
+        request.frontend_context['USERS_LISTS'] = []
+        for page in context_data['pages']:
+            page['reversed_link'] = reverse(page['link'])
+            request.frontend_context['USERS_LISTS'].append({
+                'name': six.text_type(page['name']),
+                'component': page['component'],
+            })
+
+        active_rank = context_data.get('rank')
+        for rank in Rank.objects.filter(is_tab=True).order_by('order'):
+            context_data['pages'].append({
+                'name': rank.name,
+                'reversed_link': reverse('misago:users-rank', kwargs={
+                    'slug': rank.slug
+                }),
+                'is_active': active_rank.pk == rank.pk if active_rank else None
+            })
+
+            if rank.description:
+                description = {
+                    'plain': rank.description,
+                    'html': format_plaintext_for_html(rank.description)
+                }
+            else:
+                description = None
+
+            request.frontend_context['USERS_LISTS'].append({
+                'id': rank.pk,
+                'name': rank.name,
+                'slug': rank.slug,
+                'css_class': rank.css_class,
+                'description': description,
+                'component': 'rank',
+            })
+
+        for page in context_data['pages']:
+            if page['is_active']:
+                context_data['active_page'] = page
+                break
+
+        return render(request, self.template_name, context_data)
+
+    def get_context_data(self, request, *args, **kwargs):
+        return {}
 
 
-@allow_see_list
 def landing(request):
-    default = users_list.get_default_link()
-    return redirect(default)
+    allow_browse_users_list(request.user)
+    return redirect(users_list.get_default_link())
 
 
-@allow_see_list
-def active_posters(request):
-    model = ActivePosters(request)
+class ActivePostersView(ListView):
+    template_name = 'misago/userslists/active_posters.html'
 
-    request.frontend_context['USERS'] = model.get_frontend_context()
+    def get_context_data(self, request, *args, **kwargs):
+        model = ActivePosters(request)
 
-    template = "misago/userslists/active_posters.html"
-    return render(request, template, model.get_template_context())
+        request.frontend_context['USERS'] = model.get_frontend_context()
 
+        return model.get_template_context()
 
-@allow_see_list
-def rank_users(request, slug, page=0):
-    rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=slug)
-    users = RankUsers(request, rank, page)
 
-    request.frontend_context['USERS'] = users.get_frontend_context()
+class RankUsersView(ListView):
+    template_name = 'misago/userslists/rank.html'
 
-    context = {
-        'rank': rank,
-    }
-    context.update(users.get_template_context())
+    def get_context_data(self, request, slug, page=0):
+        rank = get_object_or_404(Rank.objects.filter(is_tab=True), slug=slug)
+        users = RankUsers(request, rank, page)
 
-    return render(request, "misago/userslists/rank.html", context)
+        request.frontend_context['USERS'] = users.get_frontend_context()
 
+        context = {
+            'rank': rank,
+        }
+        context.update(users.get_template_context())
 
-ScoredUserSerializer = UserCardSerializer.extend_fields('meta')
+        return context