Запрос метода POST, но работает только GET

Форма в register.html запрашивает метод POST, но метод GET работает. Submit вызывает метод register в views.py, используя метод GET, но этого не должно происходить.

Ошибка :

Метод запроса: POST
URL запроса: http://127.0.0.1:8000/Profile/register/register/

views.py

from django.http import HttpResponse
from django.shortcuts import redirect, render
from django.contrib.auth.models import User
from django.contrib import messages

def register(request):
    if request.method == 'POST':
        return redirect('/')
    else:
        return render(request, 'register.html')

register.html

<form action="register" method="post">
    {% csrf_token %}
    <input type="Submit">
</form>

urls.py проекта

from re import template
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
    path('Profile/', include('Profile.urls')),

    path('accounts/', include('django.contrib.auth.urls')),

    path('login/', auth_views.LoginView.as_view(template_name="login.html"),
    name='login'),
    path('logout/', auth_views.LogoutView.as_view(),
    name='logout'),
    path('reset_password/', auth_views.PasswordResetView.as_view(), 
    name = 'reset_password'),
    path('reset_password_sent/', auth_views.PasswordResetDoneView.as_view(),
    name='password_reset_done'),
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(),
    name='password_reset_confirm'),
    path('reset_password_complete/', auth_views.PasswordResetCompleteView.as_view(),
    name='password_reset_complete')
]

urls.py приложения Profile app

from django.urls import path
from Profile import views

urlpatterns = [
    path('profile/', views.profile, name='profile'),
    path('register/', views.register, name='register'),
]

URL имеет вид register/. Поскольку вы не используете косую черту, Django сделает перенаправление с косой чертой, но это приведет к GET-запросу, а не POST-запросу

Таким образом, вы должны работать с:

<form action="/profile/register/" method="post">
    {% csrf_token %}
    <input type="Submit">
</form>

или лучше работать с тегом шаблона {% url … %} [Django-doc]:

<form action="{% url 'register' %}" method="post">
    {% csrf_token %}
    <input type="Submit">
</form>
Вернуться на верх