Почему Django перенаправляет URL на нежелательную страницу - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь сделать регистрацию пользователя в Django (версия 2.2). Я могу запустить локальный сервер и заполнить регистрационную форму, но когда я нажимаю кнопку «Отправить», происходит перенаправление, и новый пользователь не создается. Вместо перенаправления на главную страницу ('/') есть перенаправление на «account / register / register», и я не знаю почему. Может кто-нибудь помочь мне найти проблему.

Раньше в views.py я использовал команду Import User из django.contrib.auth.models и изменил код в register.html, но проблема была той же. Может быть, что-то не так с моим settings.py? в settings.py я добавил в INSTALLED_APPS = ['users.apps.UsersConfig',] и в конце LOGIN_REDIRECT_URL = '/'

# 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>

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Спасибо за помощь. Я использовал все ваши советы, но у меня все та же проблема. После попытки регистрации нового пользователя у меня в терминале есть следующий ответ:

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, я вставил в urls.py

from django.views.generic import RedirectView

url_patterns=[

path(r'^favicon\.ico$',RedirectView.as_view(url='/static/images/favicon.ico')),] 

, но он не работает,Хуже всего то, что новый пользователь не создан.

0 голосов
/ 31 октября 2019

Джанго никуда не перенаправляется. Ваш фактический просмотр регистра даже не вызывается.

Вы поместили действие формы как "регистрация". Это относительный путь;так как вы начали с "/ account / register /", он будет добавлен к этому, и именно здесь форма будет отправлена.

Вы должны сделать одно из:

  • Укажите полный путь в форме: action="/accounts/register/"
  • Лучше укажите имя шаблона URL вurls.py: path('accounts/register/', register, name='register') и обратитесь к нему с помощью тега url: action="{% url 'register' %}"

  • Или просто оставьте действие пустым, и в этом случае оно будет отправлено на ту же страницу,что вы хотите в любом случае: action=""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...