|
|
|
|
@ -1,3 +1,6 @@ |
|
|
|
|
from io import BytesIO |
|
|
|
|
from PIL import Image |
|
|
|
|
from os.path import splitext |
|
|
|
|
from django.contrib.auth import login |
|
|
|
|
from django.shortcuts import render, reverse |
|
|
|
|
from django.views.generic import DetailView, UpdateView |
|
|
|
|
@ -42,6 +45,30 @@ class UserEditView(UpdateView): |
|
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs): |
|
|
|
|
# it's magic *-*-*-*-* |
|
|
|
|
if 'photo' in request.FILES: |
|
|
|
|
photo_fp = request.FILES.pop('photo')[0] |
|
|
|
|
fname = photo_fp.name |
|
|
|
|
photo = Image.open(photo_fp) |
|
|
|
|
lowest_side = min(photo.size) |
|
|
|
|
horizontal_padding = (lowest_side - photo.size[0]) / 2 |
|
|
|
|
vertical_padding = (lowest_side - photo.size[1]) / 2 |
|
|
|
|
photo = photo.crop( |
|
|
|
|
( |
|
|
|
|
-horizontal_padding, |
|
|
|
|
-vertical_padding, |
|
|
|
|
photo.size[0] + horizontal_padding, |
|
|
|
|
photo.size[1] + vertical_padding |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
if photo.size[0] > 512: |
|
|
|
|
photo = photo.resize((512, 512,)) |
|
|
|
|
buffer = BytesIO() |
|
|
|
|
ext = splitext(fname)[1][1:].upper() |
|
|
|
|
if ext == 'JPG': |
|
|
|
|
ext = 'JPEG' |
|
|
|
|
photo.save(buffer, ext) |
|
|
|
|
self.object.photo.save(fname, buffer) |
|
|
|
|
buffer.close() |
|
|
|
|
if not request.POST._mutable: |
|
|
|
|
request.POST._mutable = True |
|
|
|
|
old_password = request.POST.pop('old_password')[0] |
|
|
|
|
|