Django 注册不起作用
Django registration is not working
我正在尝试添加用户注册页面,但它显示
NoReverseMatch at /register/
这是我的项目urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('pages.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('admin/', admin.site.urls),
]
页数urls.py
from django.urls import path
from .views import *
from django.contrib.auth import views
app_name = 'pages'
urlpatterns = [
path('', home_view, name='home'),
path('register/', register_user, name='register'),
]
页数views.py
def home_view(request, *args, **kwargs):
return render(request, 'home.html', {})
def register_user(request, *args, **kwargs):
if request.method=='POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
login(request, user)
return redirect('home')
else:
form = UserCreationForm()
context = {'form': form}
return render(request, 'register.html', context)
register.html
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<h2>Register here</h2>
<body>
<form method="post" action="{% url 'register' %}">
{% csrf_token %}
{% if form.errors %}
<p>Invalid details</p>
{% endif %}
{{ form }}
<input type="submit" value="Register">
</form>
</body>
</html>
一切正常,但仍然显示错误
NoReverseMatch at /register/
Reverse for 'register' not found. 'register' is not a valid view function or pattern name.
在 urls.py
文件中,您指定了一个命名空间:
from django.urls import path
from .views import *
from django.contrib.auth import views
<b>app_name = 'pages'</b>
urlpatterns = [
path('', home_view, name='home'),
path('register/', register_user, name='register'),
]
这意味着为了引用这样的命名视图,您需要在它前面加上命名空间。所以这意味着在模板中你需要这样写:
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<h2>Register here</h2>
<body>
<form method="post" action="{% url '<b>pages:</b>register' %}">
{% csrf_token %}
{% if form.errors %}
<p>Invalid details</p>
{% endif %}
{{ form }}
<input type="submit" value="Register">
</form>
</body>
</html>
此外 redirect(..)
应该以同样的方式重写:
def register_user(request, *args, **kwargs):
if request.method=='POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
login(request, user)
return redirect('<b>pages:</b>home')
else:
form = UserCreationForm()
context = {'form': form}
return render(request, 'register.html', context)
我正在尝试添加用户注册页面,但它显示
NoReverseMatch at /register/
这是我的项目urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('pages.urls')),
path('accounts/', include('django.contrib.auth.urls')),
path('admin/', admin.site.urls),
]
页数urls.py
from django.urls import path
from .views import *
from django.contrib.auth import views
app_name = 'pages'
urlpatterns = [
path('', home_view, name='home'),
path('register/', register_user, name='register'),
]
页数views.py
def home_view(request, *args, **kwargs):
return render(request, 'home.html', {})
def register_user(request, *args, **kwargs):
if request.method=='POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
login(request, user)
return redirect('home')
else:
form = UserCreationForm()
context = {'form': form}
return render(request, 'register.html', context)
register.html
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<h2>Register here</h2>
<body>
<form method="post" action="{% url 'register' %}">
{% csrf_token %}
{% if form.errors %}
<p>Invalid details</p>
{% endif %}
{{ form }}
<input type="submit" value="Register">
</form>
</body>
</html>
一切正常,但仍然显示错误
NoReverseMatch at /register/
Reverse for 'register' not found. 'register' is not a valid view function or pattern name.
在 urls.py
文件中,您指定了一个命名空间:
from django.urls import path
from .views import *
from django.contrib.auth import views
<b>app_name = 'pages'</b>
urlpatterns = [
path('', home_view, name='home'),
path('register/', register_user, name='register'),
]
这意味着为了引用这样的命名视图,您需要在它前面加上命名空间。所以这意味着在模板中你需要这样写:
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<h2>Register here</h2>
<body>
<form method="post" action="{% url '<b>pages:</b>register' %}">
{% csrf_token %}
{% if form.errors %}
<p>Invalid details</p>
{% endif %}
{{ form }}
<input type="submit" value="Register">
</form>
</body>
</html>
此外 redirect(..)
应该以同样的方式重写:
def register_user(request, *args, **kwargs):
if request.method=='POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data['username']
password = form.cleaned_data['password1']
user = authenticate(username=username, password=password)
login(request, user)
return redirect('<b>pages:</b>home')
else:
form = UserCreationForm()
context = {'form': form}
return render(request, 'register.html', context)