登录\注册重定向

时间:2019-05-27 07:46:43

标签: django django-models django-forms django-templates django-views

我为用户创建了登录\注册表单。我的问题是,当我登录时出现错误:

  

找不到页面(404)请求方法:GET请求   网址: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 个答案:

答案 0 :(得分:2)

LOGIN_REDIRECT_URL = '/'

您需要在使用settings.py系统时将其放入django's inbuilt login文件中,Django始终会寻找网址'profile'

相关问题