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. 4
      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 -*- # -*- coding: utf-8 -*-
from guardian.forms import UserObjectPermissionsForm from guardian.forms import UserObjectPermissionsForm
from guardian.shortcuts import assign_perm, remove_perm from guardian.shortcuts import assign_perm, remove_perm
from django import forms
from .models import UserProfile
class MyUserObjectPermissionsForm(UserObjectPermissionsForm): class MyUserObjectPermissionsForm(UserObjectPermissionsForm):
@ -21,3 +23,9 @@ class MyUserObjectPermissionsForm(UserObjectPermissionsForm):
for perm in perms - init_perms: for perm in perms - init_perms:
assign_perm(perm, self.user, self.obj) 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" msgid "Responsibilities has been updated"
msgstr "Ответственность за группы обновлена" 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 -*- # -*- coding:utf-8 -*-
import os import os
from PIL import Image
from django.db import models from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin from django.contrib.auth.models import BaseUserManager, AbstractBaseUser, PermissionsMixin
from django.core.validators import RegexValidator from django.core.validators import RegexValidator
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.conf import settings from django.conf import settings
from photo_app.models import Photo
from group_app.models import Group from group_app.models import Group
DEFAULT_PICTURE = getattr(settings, 'DEFAULT_PICTURE', '/static/img/user_ava.gif') DEFAULT_PICTURE = getattr(settings, 'DEFAULT_PICTURE', '/static/img/user_ava.gif')
@ -94,32 +94,20 @@ class UserProfileManager(MyUserManager):
class UserProfile(BaseAccount): 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') email = models.EmailField(default='admin@example.ru')
responsibility_groups = models.ManyToManyField(Group, blank=True, verbose_name=_('Responsibility groups')) responsibility_groups = models.ManyToManyField(Group, blank=True, verbose_name=_('Responsibility groups'))
objects = UserProfileManager() objects = UserProfileManager()
def get_big_ava(self): 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: else:
return DEFAULT_PICTURE return DEFAULT_PICTURE
def get_min_ava(self): 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: class Meta:
permissions = ( permissions = (
@ -128,3 +116,13 @@ class UserProfile(BaseAccount):
verbose_name = _('Staff account profile') verbose_name = _('Staff account profile')
verbose_name_plural = _('Staff account profiles') verbose_name_plural = _('Staff account profiles')
ordering = ['fio'] 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()

4
accounts_app/templates/accounts/ext.htm

@ -13,13 +13,9 @@
<div class="row"> <div class="row">
<div class="col-sm-3"> <div class="col-sm-3">
<div class="thumbnail"> <div class="thumbnail">
{% if userprofile.avatar %}
<a href="{{ userprofile.get_big_ava }}" class="thumbnail" target="_blank"> <a href="{{ userprofile.get_big_ava }}" class="thumbnail" target="_blank">
<img alt="ava" src="{{ userprofile.get_min_ava }}"/> <img alt="ava" src="{{ userprofile.get_min_ava }}"/>
</a> </a>
{% else %}
<img alt="ava" src="/static/img/user_ava.gif"/>
{% endif %}
<div class="caption btn-group btn-group-sm"> <div class="caption btn-group btn-group-sm">
{% if userprofile == request.user %} {% if userprofile == request.user %}
<a href="{% url 'acc_app:setup_info' %}" class="btn btn-primary"> <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'^add$', views.create_profile, name='create_profile'),
url(r'^settings$', views.ch_info, name='setup_info'), 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+)$', views.profile_show, name='other_profile'),
url(r'^(?P<uid>\d+)/perms$', views.perms, name='setup_perms'), 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 group_app.models import Group
from photo_app.models import Photo
from .models import UserProfile from .models import UserProfile
from .forms import AvatarChangeForm
import mydefs import mydefs
from guardian.decorators import permission_required_or_403 as permission_required from guardian.decorators import permission_required_or_403 as permission_required
from guardian.shortcuts import get_objects_for_user, assign_perm, remove_perm 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 @login_required

Loading…
Cancel
Save