В базовом представлении класса django всякий раз, когда я вхожу в систему, мой пользователь успешно входит в систему, но получает эту страницу ошибки:Страница не найдена (404)

я попробовал использовать class base view в моем блоге на сайте authorlogin.каждый раз, когда я вхожу в систему, хотя мой автор регистрируется, но получает страницу ошибки.я только что преобразовал login в classbased view, но мой authorprofile является function based view сообщение об ошибке:

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

admin/ автор/ каталог/ пост/ [name='base']. Текущий путь, accounts/profile/, не соответствует ни одному из этих путей.

main urls.py

urlpatterns = [
   
    path('author/',include('author.urls')),
]

authorlogin url

urlpatterns = [
    path('author.login/',views.authorlogin.as_view(),name='login'),
     path('profile',views.authorprofile,name='profile')
        
]

views.py

class authorlogin(LoginView):
    template_name='login.html'


    def form_valid(self, form):
        messages.success(self.request,'Welcome mr.{name}')
        return super().form_valid(form)
    
    def form_invalid(self, form):
        messages.success(self.request,'Logged in information incorrect')
        return super().form_invalid(form)
    

    def get_context_data(self, **kwargs) :
        context=super().get_context_data(**kwargs)
        context['type']='login'
        return context

    
@login_required
def authorprofile(request):
    if request.user.is_authenticated:
       data=Post.objects.filter(author=request.user)
       return render (request,'profile.html',{'data':data})
    else:
        return redirect('login')

я попробовал, после того как я вошел в систему, я сразу попал на страницу профиля, а не на страницу ошибки

Похоже, что причиной проблемы является стандартный URL-адрес перенаправления для вашего представления на основе класса authorlogin. По умолчанию LoginView в Django перенаправляет на /accounts/profile/ после успешного входа, но этот URL не существует в ваших шаблонах URL.

Вы можете решить эту проблему, указав параметр next или задав success_url в представлении authorlogin для перенаправления на нужную страницу профиля. Вот как можно обновить представление на основе класса authorlogin, чтобы оно перенаправляло на страницу профиля автора после входа:

# views.py

from django.urls import reverse
from django.contrib.auth.views import LoginView
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render
from django.contrib import messages
from .models import Post

class authorlogin(LoginView):
    template_name = 'login.html'

    def form_valid(self, form):
        messages.success(self.request, f'Welcome {self.request.user.username}')
        return super().form_valid(form)
    
    def form_invalid(self, form):
        messages.error(self.request, 'Login information incorrect')
        return super().form_invalid(form)

    def get_success_url(self):
        return reverse('profile')

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['type'] = 'login'
        return context

@login_required
def authorprofile(request):
    if request.user.is_authenticated:
        data = Post.objects.filter(author=request.user)
        return render(request, 'profile.html', {'data': data})
    else:
        return redirect('login')

Убедитесь, что Urls.py правильно настроен.

Вернуться на верх