Вход \ Регистрация перенаправления - PullRequest
0 голосов
/ 27 мая 2019

Я создал логин \ регистрационную форму для пользователя. Моя проблема в том, что при входе я получаю сообщение об ошибке:

Страница не найдена (404) Метод запроса: GET Запрос URL: http://127.0.0.1:8000/accounts/profile/

Если вход в систему успешен, он должен перенаправить меня на "home.html". Если я вошел в систему, я обнаружил ошибку выше, и если я нажал кнопку «Назад» в браузере, я был перенаправлен на мой «Home.html», и я успешно вошел в систему. Другая проблема в том, что когда я выхожу из системы, я перенаправляюсь на страницу выхода из DJANGO по умолчанию вместо моей "logged_out.html".

Views.py

@login_required
def home(request):
    return render(request, 'home.html')


def signup(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('home')
    else:
        form = UserCreationForm()
    return render(request, 'signup.html', {'form': form})

Urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^$', views.home, name='home'),
    url(r'^login/$', auth_views.LoginView.as_view(), {'template_name': 'login.html'}, name='login'),
    url(r'^logout/$', auth_views.LogoutView.as_view(), {'next_page': 'login'}, name='logout'),
    url(r'^signup/$', views.signup, name='signup'),
]

login.html

{% extends 'base.html' %}

{% block content %}
  <h2>Log in to My Site</h2>
  {% if form.errors %}
    <p style="color: red">Your username and password didn't match. Please try again.</p>
  {% endif %}
  <form method="post">
    {% csrf_token %}
    <input type="hidden" name="next" value="{{ next }}" />
    {% for field in form %}
      <p>
        {{ field.label_tag }}<br>
        {{ field }}<br>
        {% for error in field.errors %}
          <p style="color: red">{{ error }}</p>
        {% endfor %}
        {% if field.help_text %}
          <p><small style="color: grey">{{ field.help_text }}</small></p>
        {% endif %}
      </p>
    {% endfor %}
    <button type="submit">Log in</button>
    <a href="{% url 'signup' %}">New to My Site? Sign up</a>
  </form>
{% endblock %}

logged_out.html

{% extends 'base.html' %}

{% block content %}
  <h2>Why are You leaving :(</h2>
{% endblock %}

base.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>{% block title %}Simple is Better Than Complex{% endblock %}</title>
  </head>
  <body>
    <header>
      <h1>My Site</h1>
      {% if user.is_authenticated %}
        <a href="{% url 'logout' %}">logout</a>
      {% else %}
        <a href="{% url 'login' %}">login</a> / <a href="{% url 'signup' %}">signup</a>
      {% endif %}
      <hr>
    </header>
    <main>
      {% block content %}
      {% endblock %}
    </main>
  </body>
</html>

home.html

{% extends 'base.html' %}

{% block content %}
  <h2>Welcome, {{ user.username }}!</h2> 
  {% if request.user.is_staff %}
    <a href="{% url 'admin:index' %}">link to admin panel</a>
    <!--<a href="{% url 'signup' %}">Admin</a>-->
  {% endif %}
{% endblock %}

1 Ответ

2 голосов
/ 27 мая 2019
LOGIN_REDIRECT_URL = '/'

вам нужно поместить это в файл settings.py, так как вы используете django's inbuilt login system, Django всегда ищет URL 'profile'

...