Browse Source

Prepare to remove photo_app

devel
bashmak 8 years ago
parent
commit
f23cec7b82
  1. 8
      accounts_app/forms.py
  2. 3
      accounts_app/locale/ru/LC_MESSAGES/django.po
  3. 26
      accounts_app/migrations/0002_auto_20180413_1839.py
  4. 32
      accounts_app/models.py
  5. 10
      accounts_app/templates/accounts/ext.htm
  6. 2
      accounts_app/urls.py
  7. 32
      accounts_app/views.py

8
accounts_app/forms.py

@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from guardian.forms import UserObjectPermissionsForm
from guardian.shortcuts import assign_perm, remove_perm
from django import forms
from .models import UserProfile
class MyUserObjectPermissionsForm(UserObjectPermissionsForm):
@ -21,3 +23,9 @@ class MyUserObjectPermissionsForm(UserObjectPermissionsForm):
for perm in perms - init_perms:
assign_perm(perm, self.user, self.obj)
class AvatarChangeForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['avatar']

3
accounts_app/locale/ru/LC_MESSAGES/django.po

@ -301,3 +301,6 @@ msgstr "Группы администратора"
msgid "Responsibilities has been updated"
msgstr "Ответственность за группы обновлена"
msgid "Avatar"
msgstr "Аватар"

26
accounts_app/migrations/0002_auto_20180413_1839.py

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-04-13 18:39
from __future__ import unicode_literals
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts_app', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='baseaccount',
name='username',
field=models.CharField(max_length=127, unique=True, validators=[django.core.validators.RegexValidator('^\\w{1,127}$')], verbose_name='profile username'),
),
migrations.AlterField(
model_name='userprofile',
name='avatar',
field=models.ImageField(default=None, null=True, upload_to='user/avatar', verbose_name='Avatar'),
),
]

32
accounts_app/models.py

@ -1,11 +1,11 @@
# -*- coding:utf-8 -*-
import os
from PIL import Image
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin
from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _
from django.conf import settings
from photo_app.models import Photo
from group_app.models import Group
DEFAULT_PICTURE = getattr(settings, 'DEFAULT_PICTURE', '/static/img/user_ava.gif')
@ -94,32 +94,20 @@ class UserProfileManager(MyUserManager):
class UserProfile(BaseAccount):
avatar = models.ForeignKey(Photo, null=True, blank=True, on_delete=models.SET_NULL)
avatar = models.ImageField(_('Avatar'), upload_to=os.path.join('user', 'avatar'), null=True, default=None)
email = models.EmailField(default='admin@example.ru')
responsibility_groups = models.ManyToManyField(Group, blank=True, verbose_name=_('Responsibility groups'))
objects = UserProfileManager()
def get_big_ava(self):
if self.avatar:
path = self.avatar.big()
if os.path.exists(path):
return path
else:
return DEFAULT_PICTURE
if self.avatar and os.path.isfile(self.avatar.path):
return self.avatar.url
else:
return DEFAULT_PICTURE
def get_min_ava(self):
if self.avatar:
url_path = self.avatar.min()
real_path = url_path[1:]
if os.path.exists(real_path):
return url_path
else:
return DEFAULT_PICTURE
else:
return DEFAULT_PICTURE
return self.get_big_ava()
class Meta:
permissions = (
@ -128,3 +116,13 @@ class UserProfile(BaseAccount):
verbose_name = _('Staff account profile')
verbose_name_plural = _('Staff account profiles')
ordering = ['fio']
def _thumbnail_avatar(self):
if os.path.isfile(self.avatar.path):
im = Image.open(self.avatar)
im.thumbnail((200, 121), Image.ANTIALIAS)
im.save(self.avatar.path)
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
self._thumbnail_avatar()

10
accounts_app/templates/accounts/ext.htm

@ -13,13 +13,9 @@
<div class="row">
<div class="col-sm-3">
<div class="thumbnail">
{% if userprofile.avatar %}
<a href="{{ userprofile.get_big_ava }}" class="thumbnail" target="_blank">
<img alt="ava" src="{{ userprofile.get_min_ava }}"/>
</a>
{% else %}
<img alt="ava" src="/static/img/user_ava.gif"/>
{% endif %}
<a href="{{ userprofile.get_big_ava }}" class="thumbnail" target="_blank">
<img alt="ava" src="{{ userprofile.get_min_ava }}"/>
</a>
<div class="caption btn-group btn-group-sm">
{% if userprofile == request.user %}
<a href="{% url 'acc_app:setup_info' %}" class="btn btn-primary">

2
accounts_app/urls.py

@ -16,7 +16,7 @@ urlpatterns = [
url(r'^add$', views.create_profile, name='create_profile'),
url(r'^settings$', views.ch_info, name='setup_info'),
url(r'^settings/change_ava$', views.ch_ava, name='setup_avatar'),
url(r'^settings/change_ava$', views.AvatarUpdateView.as_view(), name='setup_avatar'),
url(r'^(?P<uid>\d+)$', views.profile_show, name='other_profile'),
url(r'^(?P<uid>\d+)/perms$', views.perms, name='setup_perms'),

32
accounts_app/views.py

@ -13,8 +13,8 @@ from django.conf import settings
from group_app.models import Group
from photo_app.models import Photo
from .models import UserProfile
from .forms import AvatarChangeForm
import mydefs
from guardian.decorators import permission_required_or_403 as permission_required
from guardian.shortcuts import get_objects_for_user, assign_perm, remove_perm
@ -87,28 +87,16 @@ def profile_show(request, uid=0):
})
@login_required
@mydefs.only_admins
def ch_ava(request):
if request.method == 'POST':
phname = request.FILES.get('avatar')
if phname is None:
messages.error(request, _('Please select an image'))
else:
user = request.user
if user.avatar:
user.avatar.delete()
photo = Photo()
photo.image = phname
photo.save()
user.avatar = photo
user.save(update_fields=['avatar'])
request.user = user
messages.success(request, _('Avatar successfully changed'))
@method_decorator([login_required, mydefs.only_admins], name='dispatch')
class AvatarUpdateView(UpdateView):
form_class = AvatarChangeForm
template_name = 'accounts/settings/ch_info.html'
return render(request, 'accounts/settings/ch_info.html', {
'user': request.user
})
def get_object(self, queryset=None):
return self.request.user
def get_success_url(self):
return resolve_url('acc_app:other_profile', uid=self.request.user.id)
@login_required

Loading…
Cancel
Save