Python 为什么Django会将url重定向到不需要的页面
我尝试在Django(版本2.2)中进行用户注册。我可以运行本地服务器并填写注册表,但当我点击提交按钮时,会出现不同的重定向,并且不会创建新用户。不是重定向到主页(“/”),而是重定向到“accounts/register/register”,我不知道为什么。有人能帮我找到问题吗 在前面的views.py中,我使用了来自django.contrib.auth.models的导入用户,并更改了register.html中的代码,但问题是相同的。也许我的设置有问题。py? 在settings.py中,我添加到已安装的应用程序=['users.APPS.UsersConfig',],并在登录结束时\u REDIRECT\u URL='/'Python 为什么Django会将url重定向到不需要的页面,python,django,url,redirect,Python,Django,Url,Redirect,我尝试在Django(版本2.2)中进行用户注册。我可以运行本地服务器并填写注册表,但当我点击提交按钮时,会出现不同的重定向,并且不会创建新用户。不是重定向到主页(“/”),而是重定向到“accounts/register/register”,我不知道为什么。有人能帮我找到问题吗 在前面的views.py中,我使用了来自django.contrib.auth.models的导入用户,并更改了register.html中的代码,但问题是相同的。也许我的设置有问题。py? 在settings.py中
# views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm
def register(request):
if request.method == "POST":
form_register = UserCreationForm(request.POST)
if form_register.is_valid():
username = form_register.cleaned_data.get('username')
messages.success(request, f'Account created for {username}!')
return redirect('register/')
else:
form_register = UserCreationForm()
return render(request, "registration/register.html", {'form_register': form_register})
# urls.py
from django.contrib import admin
from django.urls import path, include
from users.views import register
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('accounts/register/', register),]
# apps.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
# register.html
<!doctype html>
<html>
<head>
<title>Register</title>
</head>
<body>
<form action="register" method="POST">
{% csrf_token %}
{{form_register.as_p}}
<button type="submit">Register</button>
</form>
<div>
{% for message in messages %}
<h3> {{ message }} </h3>
{% endfor %}
</div>
</body>
</html>
#views.py
从django.shortcuts导入渲染,重定向
从django.contrib导入消息
从django.contrib.auth.forms导入UserCreationForm
def寄存器(请求):
如果request.method==“POST”:
form\u register=UserCreationForm(request.POST)
如果表单注册有效():
username=form\u register.cleaned\u data.get('username'))
messages.success(请求,f'为{username}创建的帐户!')
返回重定向('寄存器/')
其他:
form_register=UserCreationForm()
返回呈现(请求“registration/register.html”,{'form_register':form_register})
#url.py
从django.contrib导入管理
从django.url导入路径,包括
从users.views导入注册表
URL模式=[
路径('admin/',admin.site.url),
路径('accounts/',包括('django.contrib.auth.url'),
路径('accounts/register/',register),]
#apps.py
从django.apps导入AppConfig
类UsersConfig(AppConfig):
名称='用户'
#register.html
登记
{%csrf_令牌%}
{{form_register.as_p}}
登记
{消息%中的消息为%s}
{{message}}
{%endfor%}
Django没有在任何地方重定向。您的实际注册视图甚至没有被调用
您已将表单操作设置为“注册”。这是一条相对的路径;因为您是从“/accounts/register/”开始的,所以它将被附加到其中,这就是表单将提交到的位置
您应该执行以下操作之一:
- 将完整路径放在以下格式中:
action=“/accounts/register/”
- 更好的方法是,在URL.py中为URL模式命名:
并使用url标记引用它:path('accounts/register/',register,name='register')
action=“{%url'寄存器'%}”
- 或者,只需将操作留空,在这种情况下,它将提交到相同的页面,这正是您想要的:
action=“”
- 谢谢您的帮助。我采纳了你所有的建议,但我还是有同样的问题。尝试注册新用户后,我在终端中得到以下回复:
Not Found: /accounts/register/register
[31/Oct/2019 20:18:40] "POST /accounts/register/register HTTP/1.1" 404 3847
Not Found: /favicon.ico
[31/Oct/2019 20:18:40] "GET /favicon.ico HTTP/1.1" 404 2335
为了解决favicon的问题,我加入了url.py
from django.views.generic import RedirectView
url_patterns=[
path(r'^favicon\.ico$',RedirectView.as_view(url='/static/images/favicon.ico')),]
但它不起作用。最糟糕的问题是没有创建新用户