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

    Xaip
    @Xaip
    https://github.com/django-ckeditor/django-ckeditor
    Вся информация в бд будет храниться вместе с html тегами.
    В шаблонах надо будит отлючать autoescape
    А в админке подтянуть стили и js
    Можно еще воспользоваться допотопным markdown, но мало людей кто на нем умеют писать, времена прошли)
    Ответ написан
    1 комментарий
  • Как переопределить модель User после миграций?

    Xaip
    @Xaip
    Никто вам не мешает унаследовать AbstractBaseUser со своим классом типо: CustomUser.
    https://docs.djangoproject.com/en/2.0/topics/auth/...
    А сделать авторизацию через email можно и так.
    def auth(request):
        email = request.POST['email']
        password = request.POST['password']
        get_user = get_object_or_404(User, email=email)
        user = authenticate(username=get_user.username, password=password)
        if user is not None and user.is_active:
            login(request, user)
            return HttpResponseRedirect(reverse('shop:index'))
    Ответ написан
    Комментировать
  • В чём главный минус Django?

    Xaip
    @Xaip
    Обожаю холивары. Django/python очень красивый синтаксис, взамен хорошей производительности. GIL - Global Interpreter Lock который не позваляет(полноценно) реализовать многопоточность и асинхронность. Трудно найти работу на фрилансе, клиенты не хотят заморачиваться с WSGI/ASGI серверами, настраивать VPS.
    Ответ написан
  • Как добавить свой рендеринг страницы в админке?

    Xaip
    @Xaip
    Из settings.py надо убрать 'django.contrib.admin'
    Из urls убрать url(r'^admin/', admin.site.urls) и добавить своё приложения
    А в самом приложении можно проверять суперпользователя методом user.is_superuser если у вас стандартная модель user
    Ответ написан
  • Не видит вьюуху из другого аппа?

    Xaip
    @Xaip
    в urls укажите переменную:
    app_name = #name
    Ответ написан
    Комментировать
  • Как добавить каждой из групп пользователей свои поля?

    Xaip
    @Xaip
    Лучше всего переписать модель user унаследовав AbstractUser.
    Внутри модели можно прописать права с помощью булевых значений, например:
    is_rule1 = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)

    Еще придется переписать Usermanager, и при создании пользователей через create_user или create_superuser и.т.д. включать или выключать права
    Ответ написан
    Комментировать
  • Как обрабатывать не заполненные поля в формах?

    Xaip
    @Xaip Автор вопроса
    Без понятия кому может пригодится, но вот.
    if request.method == 'POST':
            form = AddDesc(request.POST)
            form.is_valid()
            email = form.cleaned_data['email']
            username = form.cleaned_data['username']
            last = form.cleaned_data['last_name']
            if not email == '':
                user.email = email
            if not username == '':
                user.username = username
            if not last == '':
                user.last_name = last
            user.save()

    Может можно сократить код, но как я понял в Django формах нет методов проверяющих заполнено поле или нет
    Ответ написан
    Комментировать
  • Как передать имя шаблона в url template что бы он не игнорировался?

    Xaip
    @Xaip
    Дайте больше информации. Возможно проблема в шаблоне, а именно в extends. Или проблема в указаниях путей к статике и медиа.
    А зачем вообще использовать стандартную вьюху? По мне лучше использовать отдельное представление в views:
    from django.contrib.auth.models import User
    
    
    def password_reset(request):
        u = User.objects.get(username='john')
        u.set_password('new password')
        u.save()
        #return формируете интересующую форму

    А в urls указать:
    app_name = 'project_name'
    urlpatterns = [
        url(r'^password_reset/$', views.password_reset, name='password_reset'),
    ]
    Ответ написан
  • Не авторизируется через форму, в чем проблема?

    Xaip
    @Xaip
    Всё прекрасно работает, читайте документацию!
    Ссылка на диск с рабочим шаблоном - https://cloud.mail.ru/public/Gw4s/oG2NffThN
    Оригинальная документация - https://docs.djangoproject.com/en/1.11/topics/auth...
    Документация на русском - https://djbook.ru/rel1.9/topics/auth/default.html
    В urls:
    from django.conf.urls import url, include
    from django.contrib.auth import views as auth_views
    
    urlpatterns = [
    url(r'^accounts/login/$', auth_views.login, {'template_name': 'myapp/login.html'}),
    ]

    В settings.py ОБЯЗАТЕЛЬНО добавьте пути к статике и медиа, на продакшене придется изменить:
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_URL = '/static/'
    MEDIA_URL = '/templates/'

    В шаблоне убрал строку ведущую на url с восстановлением пароля:
    {#ЭТОТ ШАБЛОН предполагает, что у вас есть шаблон base.html, который определяет блок content#}
    {% extends "myapp/base.html" %}
    
    {% block content %}
    
    {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    
    {% if next %}
        {% if user.is_authenticated %}
        <p>Your account doesn't have access to this page. To proceed,
        please login with an account that has access.</p>
        {% else %}
        <p>Please login to see this page.</p>
        {% endif %}
    {% endif %}
    
    <form method="post" action="{% url 'django.contrib.auth.views.login' %}">
    {% csrf_token %}
    <table>
    <tr>
        <td>{{ form.username.label_tag }}</td>
        <td>{{ form.username }}</td>
    </tr>
    <tr>
        <td>{{ form.password.label_tag }}</td>
        <td>{{ form.password }}</td>
    </tr>
    </table>
    
    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next }}" />
    </form>
    
    {# Assumes you setup the password_reset view in your URLconf #}
    
    {% endblock %}

    Вот так это выглядит:
    59f178ca19b6a412405277.png
    Ответ написан
    Комментировать
  • Как сделать авторизацию и регистрацию для интернет-магазина?

    Xaip
    @Xaip
    Вот так вопрос! Довольно обширная тема.
    Я делал все по документации -https://djbook.ru/rel1.9/topics/auth/default.html
    В Представлении:
    from django.contrib.auth.models import Permission, User
    from django.contrib import auth
    def index(request):
        product_all = Product.objects.all()[:12]
        # сессия пользователя
        user = request.user
        set = {
            'product_all' : product_all,
            'user' : user
    
        }
        try:
            return render(request, 'shop/index.html', set)
        except(KeyError, Product.DoesNotExist):
            return render(request, 'shop/404.html')

    В шаблоне:
    {% block auth %}
    <div class="log_in">
    
    {% if user.is_anonymous %}
    <form action="{% url 'shop:auth' %}" method="post">
        {% csrf_token %}
        <input type="text" name="login" placeholder="e-mail" />
        <input type="password" name="password" placeholder="password" />
        <input type="submit" value="Submit" />
    </form>
    {% else %}
        <a href="{% url 'auth:profile' %}">Profile</a>
    {% endif %}
    </div>
    {% endblock %}

    В urls:
    url(r'auth/$', views.auth, name='auth'),
    А Профиль это вообще отдельное приложение
    Ответ написан
    3 комментария