David
David

Reputation: 221

Change function to class view django

I'm doing a django app and at first I've done methods to my view, but I'd like now to change to class.

Here's an exemple of how I tried :

def register(response):
if response.method == "POST":
    form = RegisterForm(response.POST)
    if form.is_valid():
        form.save()
        return redirect("/login")
else:
    form = RegisterForm()

return render(response, "register/register.html", {"form":form})

And tried to change like this :

class RegisterView(generic.View):
    def post(self, request):
        form = RegisterForm(response.POST)
        if form.is_valid():
            form.save()
            return redirect("/login")
        else:
            form = RegisterForm()
        return render(response, "register/register.html", {"form":form})

But I keep getting a 405 Error Method not allowed, I guess it's because I'm not doing right the changing from method to class. Any idea ?

Upvotes: 0

Views: 45

Answers (1)

danish_wani
danish_wani

Reputation: 872

You need to define the get method as well. Below is the code that must do the job

class RegisterView(generic.View):
    def post(self, request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect("/login")
        else:
            form = RegisterForm()
        return render(request, "register/register.html", {"form":form})

    def get(self, request):
        form = RegisterForm()
        return render(request, "register/register.html", {"form":form})

Upvotes: 2

Related Questions