Ответы пользователя по тегу Django
  • Как развернуть приложение на Django на сервере в локальной сети без доступа в интернет?

    RyanovskY
    @RyanovskY
    запустите сервер в режиме разработки с отключенным флагом 'debag'.

    он подефолту работает в localhost
    Ответ написан
  • Почему не открывается страница редактирования, django?

    RyanovskY
    @RyanovskY
    лично уменя была проблема с бесконечной переадресацией когда я попытался добавить форму для аутентификации, но без формы всё работало отлично.

    я уэто уже описал тут: Почему не работает обработчик во views?

    может декоратор так ужасно построен в джанго, надо попробовать осуществить переадресацию без декоратора.
    принцип работы будет тот же но может стабильнее. сделать это можно через if

    например так:

    def my_view(request):
        if not request.user.is_authenticated:
            # Сохраняем путь страницы на которую хотели войти
            request.session['next'] = request.path
            return redirect(reverse('login'))  # 'login' - имя нашей страницы входа


    def login_view(request):
    # обычный код входа
        if login_success:
            next_url = request.session.get('next')  # Получаем сохраненный путь
            if next_url:
                del request.session['next']  # Удаляем сохраненный путь
                return redirect(next_url)  # Перенаправляем пользователя обратно
            else:
                return redirect(reverse('home'))


    так мы избавляемся от декоратора
    Ответ написан
    Комментировать
  • Почему не работает обработчик во views?

    RyanovskY
    @RyanovskY
    у меня такая же ситуация, проблема в том что ты создал форму, без формы всё работет но не показывает ошибки.

    если откатиться назад, на версию до создания формы, то всё будет воркать с такой вьюхой:

    def login_view(request):
        if request.method == 'POST':
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(request, username=username, password=password)
            if user is not None:
                login(request, user)
                return redirect('some_redirect_url')
        return render(request, 'login.html')


    я хотел добавить обработку ошибок, для регистрации и для входа.

    для регистрации всё получилось за секунду, буд-то 10 раз так делал(первый раз на самом деле)
    def special_characters_validator(username):
        validator = RegexValidator(
            regex=r'^(?!_)[A-Za-z0-9_]+(?<!_)$'
        )
        try:
            validator(username)
        except ValidationError:
            if username.startswith('_'):
                return "Имя пользователя не может начинаться с подчеркивания."
            elif username.endswith('_'):
                return "Имя пользователя не может заканчиваться подчеркиванием."
            else:
                return ("Имя пользователя не может содержать пробелы или специальные символы.\n"
                        r"""^[-!#$%&'*+-/=?^`{}|~"[]()\.]$""")
        return None
    
    
    common_passwords = [
        'password', 'qwerty', 'abc123',
        'password1', 'iloveyou', '1q2w3e4r',
        'qwerty123', 'zaq12wsx', 'dragon',
        'sunshine', 'princess', 'letmein',
        'monkey', '1qaz2wsx', 'qwertyuiop',
        'superman', 'asdfghjkl',
    ]
    
    
    class UserRegistrationForm(UserCreationForm):
        email = forms.EmailField(label='Email', max_length=254)
    
        class Meta:
            model = User
            fields = ['username', 'email', 'password1', 'password2']
    
        def clean_username(self):
            username = self.cleaned_data['username']
    
            # Проверка, что имя пользователя не содержит специальные символы
            validator_error = special_characters_validator(username)
            if validator_error:
                raise ValidationError(f"{validator_error}")
    
            # Проверка, что имя пользователя состоит только из английских букв
            if not all(char.isascii() and char.isalnum() or char == '_' for char in username):
                raise ValidationError("Имя пользователя может содержать только английские символы и подчёркивание.")
    
            # Проверка на длину юзернейма
            if len(username) < 6:
                raise ValidationError("Имя пользователя должно содержать не менее 6 символов.")
    
            # Проверка на уникальность имени пользователя
            if User.objects.filter(username__iexact=username).exists():
                raise ValidationError("Это имя пользователя уже занято.")
            elif ForbiddenUsername.objects.filter(username__iexact=username).exists():
                raise ValidationError("Это имя пользователя уже занято.")
    
            return username
    
        def clean_email(self):
            email = self.cleaned_data['email']
            if User.objects.filter(email__iexact=email).exists():
                raise ValidationError("Этот адрес электронной почты уже используется.")
            return email
    
        def clean_password1(self):
            password1 = self.cleaned_data.get('password1')
    
            # Проверка, что пароль состоит только из английских символов
            if not all(char.isascii() and (char.isalnum() or char in r'''^[-!#$%&'*+-/=?^`{}|~"[]()\.]$''') for char in
                       password1):
                raise ValidationError(
                    r'''Пароль может содержать только английские буквы,
                     цифры и специальные символы: ^[-!#$%&'*+-/=?^`{}|~"[]()\.]$''')
    
            # Проверка на длину пароля
            if len(password1) < 8:
                raise ValidationError("Пароль должен содержать не менее 8 символов.")
    
            # Проверка, что пароль не состоит только из цифр
            if password1.isdigit():
                raise ValidationError("Пароль не может состоять только из цифр.")
    
            # Проверка, что пароля нет в списке простых
            if password1.lower() in common_passwords:
                raise ValidationError("Пароль слишком простой.")
    
            return password1


    а вот с логином пи**ец, не работает перенапрвление или при переходе на /login бесконечный цикл перенаправления на страницу логина получался.

    я тоже ЖЕЛЯЮЩИЙ разобраться в этой проблеме.
    Ответ написан
    Комментировать
  • Django отображает исходный код вместо веб-страницы?

    RyanovskY
    @RyanovskY
    просто добавь ключ 'form': form в словарь list и передавай в рендер только list

    list={
            'torts_1':torts_1,
            'form': form,
        }
        return render(request,'1_tort.html', list)
    Ответ написан
    Комментировать