Страница не найдена (404) Метод запроса: URL-адрес запроса POST: http://127.0.0.1:8000/accounts/signup/signup

#python #django #postgresql #url #django-views

#python #django #postgresql #url #django-представления

Вопрос:

Я получаю ошибку page not found 404 в Django. Несмотря на то, что я правильно сопоставил URL-адрес как в основном приложении, так и в этом приложении.

 urlpatterns = [
    path('',views.mainpage,name='main'),
    path("signup/",views.signup,name='signup'),
    path("login/",views.login,name='login'),
    path("logout/",views.logout,name='logout')
]
 

Теперь приведенный ниже URL-адрес относится к основному приложению, в которое я включил urls.py дочернего приложения, которое является учетными записями.

 urlpatterns = [
    path('',include('trial.urls')),
    path('accounts/',include('accounts.urls')),
    path('admin/', admin.site.urls),   
]
 

Это сопоставление URL-адресов учетных записей app name, используемых для обработки данных учетной записи и регистрации.

Ошибка находится на этом пути

 http://127.0.0.1:8000/accounts/signup/signup
 

Где, поскольку он работает точно до указанного ниже пути.

 http://127.0.0.1:8000/accounts/signup
 

Может кто-нибудь подсказать мне или помочь мне выяснить, где что-то пошло не так.
Что должно произойти, так это,

 http://127.0.0.1:8000/accounts/signup
 

после этого пути, когда мы нажимаем отправить, он должен создать пользователя в базе данных и вернуть или перенаправить страницу на страницу входа в систему с созданным пользователем сообщения.

Ниже приведен код views.py приложения «Учетные записи».

 
def signup(request):
    if request.method == 'POST':
        first_name = request.POST['first_name']
        last_name = request.POST['last_name']
        username = request.POST['username']
        email = request.POST['email']
        password1 = request.POST['password1']
        user = User.objects.create_user(
            firstname=first_name, lastname=last_name, username=username, email=email, password=password1)
        user.save()
        print("USER CREATED SUCCESSFULLY")
        return redirect('/login.html')

 

Кто-нибудь, помогите мне, что происходит не так.
Спасибо.

Комментарии:

1. http://127.0.0.1:8000/accounts/signup/signup почему два завершающих /signup . Вы создали ссылку только на один.

2. @asdasd вот чего я не понимаю, я только один раз связал страницу регистрации, согласно моим ожиданиям, она должна перейти на login.html как только пользователь будет создан. Что пошло не так?

3. вы можете перенаправить пользователя на страницу входа в систему следующим образом: return redirect('login') . Также можете ли вы поделиться шаблоном, в котором вы создали регистрационную форму? потому что я думаю, что вы установили неправильное действие формы в своем шаблоне.

4. @AjayLingayat Я не могу добавить его сюда, он показывает символы длиной в 200 букв, так как я могу вам показать?

5. @AjayLingayat Или есть проблема с моей базой данных? должен ли я писать какой-либо запрос? нравится makemigrations?

Ответ №1:

Вы можете попробовать этот способ:

signup.html

 <form action="accountssignup" method="POST">
   {% csrf_token %}
 

Комментарии:

1. RuntimeError at /accounts/signup You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1:8000/accounts/signup/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.

2. Возникает ошибка времени выполнения. И после отображения этой ошибки я отредактировал ее, чтобы перенаправить косую черту, как /accounts/signup тогда, также с той же ошибкой, если я изменю ее на accounts/signup ошибку page not found.

3. я отредактировал ответ . Посмотрите на новое action значение атрибута, после которого у него есть еще одна косая accountssignup черта . Попробуйте.

4. Бинго, большое тебе спасибо. Я пытаюсь сделать это с прошлой недели.

5. Можете ли вы взглянуть на мой другой вопрос в моем профиле, например, кнопка отправки не работает, я использую ajax, JS, html для проверки некоторых ответов.