Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

admin.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.contrib import admin
  4. from django.core.exceptions import PermissionDenied
  5. from django.utils.translation import ugettext_lazy as _
  6. from .models import Hit, HitCount, BlacklistIP, BlacklistUserAgent
  7. class HitAdmin(admin.ModelAdmin):
  8. list_display = ('created', 'user', 'ip', 'user_agent', 'hitcount')
  9. search_fields = ('ip', 'user_agent')
  10. date_hierarchy = 'created'
  11. actions = ['blacklist_ips',
  12. 'blacklist_user_agents',
  13. 'blacklist_delete_ips',
  14. 'blacklist_delete_user_agents',
  15. 'delete_queryset',
  16. ]
  17. def __init__(self, *args, **kwargs):
  18. super(HitAdmin, self).__init__(*args, **kwargs)
  19. self.list_display_links = None
  20. def has_add_permission(self, request):
  21. return False
  22. def get_actions(self, request):
  23. actions = super(HitAdmin, self).get_actions(request)
  24. if 'delete_selected' in actions:
  25. del actions['delete_selected']
  26. return actions
  27. def blacklist_ips(self, request, queryset):
  28. for obj in queryset:
  29. ip, created = BlacklistIP.objects.get_or_create(ip=obj.ip)
  30. if created:
  31. ip.save()
  32. msg = _("Successfully blacklisted %d IPs") % queryset.count()
  33. self.message_user(request, msg)
  34. blacklist_ips.short_description = _("Blacklist selected IP addresses")
  35. def blacklist_user_agents(self, request, queryset):
  36. for obj in queryset:
  37. ua, created = BlacklistUserAgent.objects.get_or_create(
  38. user_agent=obj.user_agent)
  39. if created:
  40. ua.save()
  41. msg = _("Successfully blacklisted %d User Agents") % queryset.count()
  42. self.message_user(request, msg)
  43. blacklist_user_agents.short_description = _("Blacklist selected User Agents")
  44. def blacklist_delete_ips(self, request, queryset):
  45. self.blacklist_ips(request, queryset)
  46. self.delete_queryset(request, queryset)
  47. blacklist_delete_ips.short_description = _(
  48. "Delete selected hits and blacklist related IP addresses")
  49. def blacklist_delete_user_agents(self, request, queryset):
  50. self.blacklist_user_agents(request, queryset)
  51. self.delete_queryset(request, queryset)
  52. blacklist_delete_user_agents.short_description = _(
  53. "Delete selected hits and blacklist related User Agents")
  54. def delete_queryset(self, request, queryset):
  55. if not self.has_delete_permission(request):
  56. raise PermissionDenied
  57. else:
  58. if queryset.count() == 1:
  59. msg = "1 hit was"
  60. else:
  61. msg = "%s hits were" % queryset.count()
  62. for obj in queryset.iterator():
  63. obj.delete() # calling it this way to get custom delete() method
  64. self.message_user(request, "%s successfully deleted." % msg)
  65. delete_queryset.short_description = _("Delete selected hits")
  66. admin.site.register(Hit, HitAdmin)
  67. class HitCountAdmin(admin.ModelAdmin):
  68. list_display = ('content_object', 'hits', 'modified')
  69. fields = ('hits',)
  70. def has_add_permission(self, request):
  71. return False
  72. admin.site.register(HitCount, HitCountAdmin)
  73. class BlacklistIPAdmin(admin.ModelAdmin):
  74. pass
  75. admin.site.register(BlacklistIP, BlacklistIPAdmin)
  76. class BlacklistUserAgentAdmin(admin.ModelAdmin):
  77. pass
  78. admin.site.register(BlacklistUserAgent, BlacklistUserAgentAdmin)