Просмотр account.views.signup не вернул объект HttpResponse. Вместо этого он вернул None

#django #user-interface #authentication

#django #пользовательский интерфейс #аутентификация

Вопрос:

Пытаюсь зарегистрировать пользователя в Django. он продолжает выдавать мне ошибку HttpResponse

signup.html расположение шаблонов : templates/registration/signup.html

Вот что я попробовал:

forms.py

 from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User


class SignUpForm(UserCreationForm):
    username = forms.CharField(max_length=50)

    class Meta:
        model = User
        fields = ('username', 'email', 'password1', 'password2', )
  

views.py

 from django.contrib.auth import login, authenticate
from django.shortcuts import render, redirect, HttpResponse


from django.contrib.auth.decorators import login_required
from .forms import SignUpForm


@login_required
def home(request):
    return render(request, 'registration/home.html')

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(email= email, password= raw_password)
            login(request, user)
            return redirect('registration/home')
        else:
            form = SignUpForm()
        return render(request, 'registration/signup.html', {'form': form})

  

Я попытался заменить redirect на HttpResponseRedirect, но это не сработало

Учетная запись urls.py

 from django.contrib.auth import views as auth_views
from django.conf.urls import url
from django.urls import path 
from . import views

urlpatterns = [
    path("login/", auth_views.LoginView.as_view(template_name = "registration/login.html"), name='login'),
    path("logout/", auth_views.LogoutView.as_view(), name='logout'),
    path('home/', views.home, name='home'),
    url('signup/', views.signup, name='signup'),
]
  

Ошибка

 ValueError at /accounts/signup/
The view account.views.signup didn't return an HttpResponse object. It returned None instead.
Request Method: GET
Request URL:    http://127.0.0.1:8000/accounts/signup/
Django Version: 3.0.3
Exception Type: ValueError
Exception Value:    
The view account.views.signup didn't return an HttpResponse object. It returned None instead.
  

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

1. Я думаю, вы пытаетесь получить доступ /accounts/signup/ через GET метод, пока он поддерживает только POST

2. Я сделал это с помощью метода POST, как вы можете видеть мой views.py

3. Request Method: GET таким образом, вы получаете к нему доступ через GET

Ответ №1:

Вам необходимо поддерживать GET метод, например:

 def signup(request):
    form = SignUpForm()
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(email= email, password= raw_password)
            login(request, user)
            return redirect('registration/home')
    return render(request, 'registration/signup.html', {'form': form})