• Можно ли подключить redux просто как библиотеку?

    miraage
    @miraage
    Старый прогер
    https://npmcdn.com/redux@3.5.2/dist/redux.js

    Все эти функции будут доступны через window.Redux.

    var store = window.Redux.createStore(reducer, ...);


    А вообще, учитесь пользоваться бандлерами и es2015/es7 (object rest/spread, class properties).
    Ответ написан
    Комментировать
  • Как загрузить изображение с формы в django?

    Название класса class User_profile в pep8 написано следущее:
    Class names should normally use the CapWords convention.

    По поводу ошибки с urllib ответил Alexander .
    Вторая проблема заключается в магии которая происходит в коде.
    Форму SignupForm лучше не делать полностью ручками, а унаследовать от
    from django.contrib.auth.forms import UserCreationForm

    Так же эту форму лучше разбирь на две, соответственно первая относится к User, а вторая к UserProfile(или User_profile, но так не по pep8)
    Сохранение аватарки оставить на Джангу, для этого надо немного поправить модель
    import os
    from django.contrib.auth.models import User
    
    from django.db import models
    
    
    def avatar_upload_to(instance, filename):
        return os.path.join('uploads', instance.user.username + os.path.splitext(filename)[1])
    
    
    class UserProfile(models.Model):
        user = models.OneToOneField(User, unique=True)
        avatar = models.ImageField(upload_to=avatar_upload_to)
        info = models.TextField()

    Далее сделать привожу две формы, которые получились после разделения SignupForm
    from django import forms
    from django.contrib.auth.forms import UserCreationForm
    from django.contrib.auth.models import User
    from accounts.models import UserProfile
    
    
    class SignupForm(UserCreationForm):
    
        username = forms.CharField(
            widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'login', }),
            max_length=30, label=u'Логин'
        )
        email = forms.EmailField(
            widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Ваша почта', }),
            required=True, max_length=254, label=u'E-mail',
        )
        password1 = forms.CharField(
            widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '*****'}),
            min_length=6, label=u'Пароль'
        )
        password2 = forms.CharField(
            widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': '*****'}),
            min_length=6, label=u'Повторите пароль'
        )
    
        class Meta:
            model = User
            fields = ('username', 'email')
    
    
    class UserProfileSignupForm(forms.ModelForm):
    
        info = forms.CharField(
            widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': u'Молод и горяч',}),
            required=False, label=u'Пара слов о себе'
        )
        avatar = forms.FileField(
            widget=forms.ClearableFileInput(attrs={'class': 'ask-signup-avatar-input',}),
            required=False, label=u'Аватар'
        )
    
        def clean_avatar(self):
            avatar = self.cleaned_data.get('avatar')
            if avatar is None:
                raise forms.ValidationError(u'Добавьте картинку')
            if 'image' not in avatar.content_type:
                raise forms.ValidationError(u'Неверный формат картинки')
            return avatar
    
        class Meta:
            model = UserProfile
            fields = ('info', 'avatar')

    в settings.py надо добавить пути ко всем медиа файлам
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
    
    MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
    MEDIA_URL = '/media/'

    Мда, все сюда выкатывать не хочется.
    Сделал репозиторий, можно посмотреть тут
    Ответ написан
  • Как сделать что то подобно не существующему свойству float:top?

    @DP-Studio
    20 лет веб-разработки
    flexbox в помощь

    frontender.info/a-guide-to-flexbox

    блин, ну читайте внимательнее:

    <div class="fbox">
    	<div class="dboxitem">1</div>
    	<div class="dboxitem">2</div>
    	<div class="dboxitem">3</div>
    	<div class="dboxitem">4</div>
    	<div class="dboxitem">5</div>
    	<div class="dboxitem">6</div>
    	<div class="dboxitem">7</div>
    	<div class="dboxitem">8</div>
    	<div class="dboxitem">9</div>
    </div>


    .fbox {
    
    	height: 100px;
    	width: 500px;
    	display: flex;
    	flex-direction: column;
    	flex-wrap: wrap;
    	.dboxitem {
    		margin: auto; 
    		flex: 1;
    	}
    }
    Ответ написан
    2 комментария