Привет. У меня проблема с изменением страниц в моем проекте django, так как он показывает страницу, не найденную (404) - PullRequest
0 голосов
/ 08 ноября 2019

Я строил свой первый проект Django, и я делал «страницу входа», и она работает, но когда тогда я поставил условие, что, если вход в систему неправильный, он возвращается кСтраница входа и показывает сообщение об ошибке, и если это правильно, он должен перейти на страницу, где написано «logadissimo», но когда я пытаюсь это последнее, я получаю проблему ниже:

Страница не найдена (404) Метод запроса: GET URL запроса: http://localhost:8000/ Используя URLconf, определенный в sitetcc.urls, Django попробовал эти шаблоны URL в следующем порядке:

admin / login / login /отправить логин / логадо Пустой путь не соответствовал ни одному из них.

Вы видите эту ошибку, потому что у вас есть DEBUG = True в вашем файле настроек Django. Измените это на 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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Это потому, что вы передаете жестко закодированный URL (/logado/) на redirect, которого нет в url.py вашего проекта, поэтому Django не может соответствовать этому маршруту.

Естьпарой способов передать аргумент redirect, вы можете увидеть несколько примеров здесь . Я настоятельно рекомендую вам использовать name представления вашего URL-адреса, чтобы в будущем вы могли без проблем изменить маршрут вашего пути.

Кроме того, вы можете объявить свои URL-адреса как this , таким образом, вы будете держать вещи в чистоте и не раздувать ваш проект 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')

0 голосов
/ 08 ноября 2019

try return redirect('logado') и return redirect('login') синтаксис return redirect('your_view_name')

...