我试图找出Django默认的auth,当我使用正确的凭据登录时,它会给我这个错误
NoReverseMatch at /account/login/
Reverse for 'dashboard' not found. 'dashboard' is not a valid view function or pattern name.
Request Method: POST
Request URL: http://127.0.0.1:8000/account/login/
Django Version: 2.2
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'dashboard' not found. 'dashboard' is not a valid view function or pattern name.
Exception Location: C:\Users\nouma\Desktop\social_website\myenv\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 660我见过一些类似的问题,但不明白我的问题到底是什么。我混淆了reverse 的概念。这是我的views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
from .forms import LoginForm
from django.contrib.auth.decorators import login_required
# Create your views here.
def user_login(request):
if request.method == 'POST':
form = LoginForm(data=request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(request, username=cd['username'], password=cd['password'])
if user is not None:
if user.is_active:
login(request, user)
return HttpResponse('Authenticated successfully')
else:
return HttpResponse('Disabled account')
else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request, 'account/login.html', {'form': form})
@login_required
def dashboard(request):
return render(request, 'account/dashboard.html', {'section': 'dashboard'})这是我的主要项目urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('account/', include('django.contrib.auth.urls')),
path('account/', include('account.urls', namespace='account')),
]应用程序的urls.py,名为account
from django.urls import path
from . import views
from django.contrib.auth import views as auth_views
app_name = 'account'
urlpatterns = [
# login view
# path('login/', views.user_login, name='user_login'),
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('', views.dashboard, name='dashboard'),
]我的dasboard.html
{% extends 'base.html' %}
{% block title %}Dashboard{% endblock %}
{% block content %}
<h1>Dashboard</h1>
<p>Welcome to your dashboard</p>
{% endblock %}login.html
{% extends "base.html" %}
{% block title %}Log-in{% endblock %}
{% block content %}
<h1>Log-in</h1>
{% if form.errors %}
<p>Your username or password didn't match. Please try again</p>
{% else %}
<p>Please, use the following form to log-in:</p>
{% endif %}
<div class="login-form">
<form action="{% url 'login' %}" method="POST">
{{ form.as_p }}
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
<p><input type="submit" value="Log-in"></p>
</form>
</div>
{% endblock %}我认为这个问题很小,但我无法配置。
发布于 2020-01-23 05:08:21
您已经创建了一个自定义应用程序account,您没有在app/urls.py文件中为其定义url。
您可以添加帐户url,如
urlpatterns = [
path('account/', include('django.contrib.auth.urls')),
path('account/', include('account.urls', namespace='account'))
]现在,您可以为account应用程序中定义的urls创建反向urls。
编辑2
另外,由于您已经在django.contrib.auth文件中定义了account/urls.py视图,所以不需要在app/urls.py文件中添加django.contrib.auth.urls的url。
LOGIN_REDIRECT_URL
根据文档,它接受path或named url模式。
建议的方法是使用path。对于named用法,您可以尝试使用以下方法
LOGIN_REDIRECT_URL = 'account:login'
LOGIN_REDIRECT_URL = reverse('account:login')我不确定上述哪一种会有效,让我知道哪一种适合你。
https://stackoverflow.com/questions/59864943
复制相似问题