我正在尝试创建一个用户项目,用户可以在其中创建配置文件。注册后,将在后端创建用户,但返回错误:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/profile/
用户已登录,但我不知道原因以及如何解决此错误。 这是模型:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
def __str__(self):
return f'{self.user.username} Profile'
这是views.py:
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Your account has been created! You are now able to log in')
return redirect('login')
else:
form = UserRegisterForm()
return render(request, 'users/register.html', {'form': form})
@login_required
def profile(request):
if request.method == 'POST':
u_form = UserUpdateForm(request.POST, instance=request.user)
p_form = ProfileUpdateForm(request.POST,
request.FILES,
instance=request.user.profile)
if u_form.is_valid() and p_form.is_valid():
u_form.save()
p_form.save()
messages.success(request, f'Your account has been updated!')
return redirect('profile')
else:
u_form = UserUpdateForm(instance=request.user)
p_form = ProfileUpdateForm(instance=request.user.profile)
context = {
'u_form': u_form,
'p_form': p_form
}
return render(request, 'users/profile.html', context)
这是主项目中的urls.py:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('post.urls')),
path('register/', user_views.register, name='register'),
path('profile/', user_views.profile, name='profile'),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
path('password-reset............)
]
这是模板:
{% extends "post/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form action="profile" method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Join Today</legend>
{{ form|crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Sign Up</button>
</div>
</form>
<div class="border-top pt-3">
<small class="text-muted">
Already Have An Account? <a class="ml-2" href="{% url 'login' %}">Sign In</a>
</small>
</div>
</div>
{% endblock content %}
定向到Request URL: http://127.0.0.1:8000/accounts/profile/
的原因是什么?如何解决?
答案 0 :(得分:2)
在您的表单中,您的action
应该是:
<form action="/profile/" method="POST">
和不
<form action="profile/" method="POST">
还应该 不 被
<form action="profile" method="POST">
在操作的地址之前没有正斜杠/
的情况下,它不会重定向到正确的地址,因为当未提供/
时,它将使用当前页面作为基本URL。
答案 1 :(得分:1)
由于显示错误
Request URL: http://127.0.0.1:8000/accounts/profile/
然后它可能正在此位置寻找网址。
在您的url配置中,其写为:
path('profile/', user_views.profile, name='profile'),
所以我建议尝试添加帐户:
path('accounts/profile/', user_views.profile, name='profile'),