0
votes

I m using this code for a login form. But the post request aint working i m getting this error:

ValueError at /home/login/ The view manager.views.Login didn't return an HttpResponse object. It returned None instead.

Views.py

class Login(View):
form = LoginForm
template_name = 'login.html'

def get(self, request): 
    form = self.form(None)
    return render(request, self.template_name, {'form': form})

def post(self, request):
    form = self.form(request.POST)

    if form.is_valid():
        username = form.cleaned_data['username']
        password = form.cleaned_data['password']

        auth_user = authenticate(username=username, password=password)
        if auth_user is not None:
            if auth_user.is_active:
                login(request, auth_user)
                return  render(request, 'home.html')

        else:
            template_name = 'invalid_login.html'
            return render(request, template_name)

urls.py

from django.conf.urls import include, url
from .views import register,home, contact, contactList, Login, Logout

app_name = 'manager'

urlpatterns = [
url(r'^$', home.as_view(), name='home'),

#REGISTRATION
url(r'^register/$', register.as_view() , name='register'),
url(r'^login/$', Login.as_view() , name='login'),
url(r'^logout/$', Logout , name='logout'),

]

login.html

<form action="" method="POST">
{% csrf_token %}
{{form.as_p}}
<button type="submit">SUBMIT</button>
</form>

The complete code is on Github for any further reference: GITHUB Error

1

1 Answers

2
votes

When the form is not valid i.e. the if form.is_valid() branch is not taken, your view returns None.

You can return a default response from the post method of the view to handle this:

def post(self, request):
    form = self.form(request.POST)

    if form.is_valid():
        ...

    return render(request, self.template_name, {'form': form})

You also need to update your template to properly display form errors.