Resolve "An avatar for users"
This commit is contained in:
parent
b411df4f29
commit
af270f4abd
16 changed files with 374 additions and 17 deletions
|
|
@ -56,7 +56,10 @@ class UserAdmin(AuthUserAdmin):
|
|||
|
||||
fieldsets = (
|
||||
(None, {"fields": ("username", "password", "privacy_level")}),
|
||||
(_("Personal info"), {"fields": ("first_name", "last_name", "email")}),
|
||||
(
|
||||
_("Personal info"),
|
||||
{"fields": ("first_name", "last_name", "email", "avatar")},
|
||||
),
|
||||
(
|
||||
_("Permissions"),
|
||||
{
|
||||
|
|
|
|||
20
api/funkwhale_api/users/migrations/0010_user_avatar.py
Normal file
20
api/funkwhale_api/users/migrations/0010_user_avatar.py
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
# Generated by Django 2.0.6 on 2018-07-10 20:09
|
||||
|
||||
from django.db import migrations, models
|
||||
import funkwhale_api.common.utils
|
||||
import funkwhale_api.common.validators
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0009_auto_20180619_2024'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='user',
|
||||
name='avatar',
|
||||
field=models.ImageField(blank=True, max_length=150, null=True, upload_to=funkwhale_api.common.utils.ChunkedPath('users/avatars'), validators=[funkwhale_api.common.validators.ImageDimensionsValidator(max_height=400, max_width=400, min_height=50, min_width=50)]),
|
||||
),
|
||||
]
|
||||
|
|
@ -16,7 +16,11 @@ from django.utils import timezone
|
|||
from django.utils.encoding import python_2_unicode_compatible
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from versatileimagefield.fields import VersatileImageField
|
||||
|
||||
from funkwhale_api.common import fields, preferences
|
||||
from funkwhale_api.common import utils as common_utils
|
||||
from funkwhale_api.common import validators as common_validators
|
||||
|
||||
|
||||
def get_token():
|
||||
|
|
@ -39,6 +43,9 @@ PERMISSIONS_CONFIGURATION = {
|
|||
PERMISSIONS = sorted(PERMISSIONS_CONFIGURATION.keys())
|
||||
|
||||
|
||||
get_file_path = common_utils.ChunkedPath("users/avatars", preserve_file_name=False)
|
||||
|
||||
|
||||
@python_2_unicode_compatible
|
||||
class User(AbstractUser):
|
||||
|
||||
|
|
@ -88,6 +95,19 @@ class User(AbstractUser):
|
|||
blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
)
|
||||
avatar = VersatileImageField(
|
||||
upload_to=get_file_path,
|
||||
null=True,
|
||||
blank=True,
|
||||
max_length=150,
|
||||
validators=[
|
||||
common_validators.ImageDimensionsValidator(min_width=50, min_height=50),
|
||||
common_validators.FileValidator(
|
||||
allowed_extensions=["png", "jpg", "jpeg", "gif"],
|
||||
max_size=1024 * 1024 * 2,
|
||||
),
|
||||
],
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.username
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ from rest_auth.serializers import PasswordResetSerializer as PRS
|
|||
from rest_auth.registration.serializers import RegisterSerializer as RS
|
||||
from rest_framework import serializers
|
||||
|
||||
from versatileimagefield.serializers import VersatileImageFieldSerializer
|
||||
|
||||
from funkwhale_api.activity import serializers as activity_serializers
|
||||
|
||||
from . import models
|
||||
|
|
@ -49,15 +51,29 @@ class UserBasicSerializer(serializers.ModelSerializer):
|
|||
fields = ["id", "username", "name", "date_joined"]
|
||||
|
||||
|
||||
avatar_field = VersatileImageFieldSerializer(
|
||||
allow_null=True,
|
||||
sizes=[
|
||||
("original", "url"),
|
||||
("square_crop", "crop__400x400"),
|
||||
("medium_square_crop", "crop__200x200"),
|
||||
("small_square_crop", "crop__50x50"),
|
||||
],
|
||||
)
|
||||
|
||||
|
||||
class UserWriteSerializer(serializers.ModelSerializer):
|
||||
avatar = avatar_field
|
||||
|
||||
class Meta:
|
||||
model = models.User
|
||||
fields = ["name", "privacy_level"]
|
||||
fields = ["name", "privacy_level", "avatar"]
|
||||
|
||||
|
||||
class UserReadSerializer(serializers.ModelSerializer):
|
||||
|
||||
permissions = serializers.SerializerMethodField()
|
||||
avatar = avatar_field
|
||||
|
||||
class Meta:
|
||||
model = models.User
|
||||
|
|
@ -71,6 +87,7 @@ class UserReadSerializer(serializers.ModelSerializer):
|
|||
"permissions",
|
||||
"date_joined",
|
||||
"privacy_level",
|
||||
"avatar",
|
||||
]
|
||||
|
||||
def get_permissions(self, o):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue