В базовом представлении класса 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 правильно настроен.