Python 为什么可以';在尝试向Django注册用户时,我是否可以访问我的模板视图?
我试图实现一个小Django项目的登录功能,但是当我使用signup/signin表单进入页面时,我得到了404错误。我使用的是Django默认用户模型和auth表单 意见如下:Python 为什么可以';在尝试向Django注册用户时,我是否可以访问我的模板视图?,python,django,django-login,Python,Django,Django Login,我试图实现一个小Django项目的登录功能,但是当我使用signup/signin表单进入页面时,我得到了404错误。我使用的是Django默认用户模型和auth表单 意见如下: def signup(request): if request.user.is_authenticated: return redirect('/') if request.method == 'POST': form = UserCreationForm(request
def signup(request):
if request.user.is_authenticated:
return redirect('/')
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('/')
else:
return render(request, 'signup.html', {'form': form})
else:
form = UserCreationForm()
return render(request, 'signup.html', {'form': form})
def signin(request):
if request.user.is_authenticated:
return render(request, 'homepage.html')
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('/')
else:
form = AuthenticationForm(request.POST)
return render(request, 'signin.html', {'form': form})
else:
form = AuthenticationForm()
return render(request, 'signin.html', {'form': form})
def log_out(request):
logout(request)
return redirect('/')
以下是我的视图的URL:
urlpatterns = [
path('', views.PostList.as_view(), name='home'),
path('<slug:slug>/', views.post_detail, name='post_detail'),
path('signup/', views.signup, name='register'),
path('signin/', views.signin, name='signup'),
path('log_out/', views.log_out, name='log_out'),
]
完整错误消息:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/signin/
Raised by: blog_backend.views.post_detail
No Post matches the given query.
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
或者切换URL模式的顺序,以便验证URL首先匹配:
path('signup/', views.signup, name='register'),
path('signin/', views.signin, name='signup'),
path('log_out/', views.log_out, name='log_out'),
path('<slug:slug>/', views.post_detail, name='post_detail'),
path('signup/',views.signup,name='register'),
路径('signin/',views.signin,name='signup'),
路径('log_out/',views.log_out,name='log_out'),
路径(“/”,views.post_detail,name='post_detail'),
猜测一下,将urlpattern改为“/”而不是空字符串有时会导致404。哪个URL为404?请包含完整的错误消息-它应该显示Django尝试的URL模式。@erfanehtesham主URL工作正常,我遇到问题的是验证URL。@Alasdair发布了完整的错误消息,没有显示Django尝试的模式,只有404,我在某个地方读到,默认django日志的模板应该位于不同的目录中,也许这就是问题所在?视图。post_detail
是错误消息中的视图,因此在URL中显示它的使用位置非常重要!
path('<slug:slug>/', views.post_detail, name='post_detail'),
path('signup/', views.signup, name='register'),
path('blog/<slug:slug>/', views.post_detail, name='post_detail'),
path('signup/', views.signup, name='register'),
path('signup/', views.signup, name='register'),
path('signin/', views.signin, name='signup'),
path('log_out/', views.log_out, name='log_out'),
path('<slug:slug>/', views.post_detail, name='post_detail'),