views.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import os
  2. from PIL import Image
  3. from django.shortcuts import redirect, render
  4. from django.template import loader
  5. from django.http import HttpResponse, FileResponse
  6. from django.urls import reverse_lazy
  7. from django.views.generic import UpdateView
  8. from django.views.decorators.cache import cache_control
  9. from django.contrib import auth
  10. from django.contrib.auth.decorators import permission_required
  11. from django.contrib.auth.mixins import PermissionRequiredMixin
  12. from .models import *
  13. from .forms import *
  14. from website.settings import BASE_DIR
  15. def index(request, group_id=None):
  16. if request.user.has_perm('stammbaum.view'):
  17. if group_id == None:
  18. persons = Person.objects
  19. else:
  20. persons = Person.objects.filter(group_id=group_id)
  21. partners = Person.partners.through.objects
  22. context = {
  23. 'persons': list(persons.values_list()),
  24. 'pairs': list(partners.values_list()),
  25. 'groups': list(Group.objects.values())
  26. }
  27. else:
  28. context = {}
  29. template = loader.get_template('stammbaum/index.html')
  30. return HttpResponse(template.render(context, request))
  31. class Login(auth.views.LoginView):
  32. template_name = 'stammbaum/login.html'
  33. def register(request):
  34. if request.method == 'POST':
  35. form = SignUpForm(request.POST)
  36. if form.is_valid():
  37. user = form.save()
  38. user.refresh_from_db()
  39. # load the profile instance created by the signal
  40. user.save()
  41. raw_password = form.cleaned_data.get('password1')
  42. # login user after signing up
  43. user = auth.authenticate(username=user.username, password=raw_password)
  44. auth.login(request, user)
  45. # redirect user to home page
  46. return redirect('/stammbaum/')
  47. else:
  48. form = SignUpForm()
  49. return render(request, 'stammbaum/register.html', context={"form": SignUpForm})
  50. def logout(request):
  51. auth.logout(request)
  52. template = loader.get_template('stammbaum/index.html')
  53. return HttpResponse(template.render(None, request))
  54. @permission_required("stammbaum.view")
  55. @cache_control(max_age=3600)
  56. def image_preview(request, person_id):
  57. person = Person.objects.filter(id=person_id).first()
  58. if person and person.image:
  59. img = Image.open(os.path.join(BASE_DIR, '../data', str(person.image)))
  60. else:
  61. img = Image.open(os.path.join(BASE_DIR, '../data', "default.jpeg"))
  62. img.thumbnail((256, 256))
  63. res = HttpResponse(content_type="image/jpeg")
  64. img.save(res, format='JPEG')
  65. return res
  66. @permission_required("stammbaum.view")
  67. @cache_control(max_age=3600)
  68. def image(request, person_id):
  69. person = Person.objects.filter(id=person_id).first()
  70. if person and person.image:
  71. img = open(os.path.join(BASE_DIR, '../data', str(person.image)), 'rb')
  72. else:
  73. img = open(os.path.join(BASE_DIR, '../data', "default.jpeg"), 'rb')
  74. return FileResponse(img)
  75. class UploadImageView(PermissionRequiredMixin, UpdateView):
  76. model = Person
  77. form_class = UploadImage
  78. permission_required = ("stammbaum.view", "stammbaum.upload_image")
  79. template_name = "stammbaum/upload.html"
  80. success_url = "/stammbaum/"