我已经构建了我的第一个Django项目,并且正在执行“登录页”,并且它正在工作,但是当我当时已经设定了一个条件,如果登录错误,它会返回到登录页面并显示错误消息,如果是正确的,它应该转到一个写有"logadissimo“的页面,但是当我尝试最后一个页面时,我会发现下面的问题:
页面未找到(404)请求方法: GET请求URL:http://localhost:8000/使用在sitetcc.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式: 管理员/登录/登录/提交登录/logado空路径与任何这些都不匹配。 看到这个错误是因为Django设置文件中有DEBUG = True。将其更改为False,Django将显示一个标准404页。
这是我的项目的url.py:
"""
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls.conf import include
from django.urls import path
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', views.login_user),
path('login/submit', views.submit_login),
path('login/logado', views.logado)
]来自应用程序的urls.py:
from . import views
from django.urls import path
app_name = 'core'
urlpatterns = [
path('', views.login_user, name='login'),
path('', views.submit_login, name='submit'),
path('', views.logado, name='logado')
]views.py:
from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_protect
from django.contrib.auth import authenticate, login
from django.contrib import messages
# Create your views here.
def logado(request):
return render(request, 'logado.html')
def login_user(request):
return render(request,'login.html')
@csrf_protect
def submit_login(request):
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
print(username)
print(password)
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('/logado/')
else:
messages.error(request,'Usuário e senha inválido. Favor tentar novamente:')
return redirect('/login/')和一个带有文件夹结构和页面“logado”的打印屏幕:https://imgur.com/a/xAsBRHO
谢谢!
发布于 2019-11-08 17:26:24
这是因为您将一个硬编码的URL (/logado/)传递给redirect,而这个URL并不存在于项目的url.py中,因此Django无法匹配该路由。
有几种方法可以将参数传递给redirect,您可以看到一些示例这里。我强烈建议您使用url视图的name,这样以后您就可以在没有任何问题的情况下更改路径的路径。
此外,您也可以像这一样声明您的URL,这样您就可以保持项目的整洁,而不是在项目的urls.py上膨胀。
这样做,您的项目的urls.py就会这样:
from django.contrib import admin
from django.urls.conf import include
from django.urls import path
from core import views
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', include('core.urls'),
]您的应用程序的urls.py如下所示:
from . import views
from django.urls import path
app_name = 'core'
urlpatterns = [
path('', views.login_user, name='login'),
path('login/submit/', views.submit_login, name='submit'),
path('login/logado/', views.logado, name='logado')
](别忘了每条路线末尾的尾随/ )
现在您可以像这样调用您的视图( return redirect('core:logado') )
https://stackoverflow.com/questions/58770760
复制相似问题