StopIteration404
StopIteration404

Reputation: 315

Difference between self.request and request in Django class-based view

In django, for class-based view like ListView and DetailView, methods like get() or post() or other functions defined by developer take parameters include self and request. I learnt that in self these is actually a self.request field, so wha's the difference between self.request and request?

Example, this is the function in a class based view and used to handle user's login requirement:

def login(self, request):
    name = request.POST['name']
    pwd = request.POST['password']
    user = authenticate(username=name, password=pwd)

    if user is not None:
        request.session.set_expiry(0)
        login(request, user)
        log_message = 'Login successfully.'
    else:
        log_message = 'Fail to login.'

    return HttpResponseRedirect(reverse('blog:testindex'))

This is the function used to handle user's register:

def register(self, request):
    user_name = self.request.POST['username']
    firstname = self.request.POST['firstname']
    lastname = self.request.POST['lastname']
    pwd = self.request.POST['password']
    e_mail = self.request.POST['email']
    user = User.objects.create(username=user_name, first_name=firstname, last_name=lastname, email=e_mail)
    user.set_password(pwd)
    try:
        user.save()
        user = authenticate(username=user_name, password=pwd)
        login(self.request, user)
    except Exception:
        pass
    else:
        return HttpResponseRedirect(reverse('blog:testindex'))

In the first function, it used data stored in request and in the second one, it used self.request, both work functionally. What's the difference?

Upvotes: 20

Views: 7697

Answers (1)

Alex Riina
Alex Riina

Reputation: 801

For a subclass of View, they're the same object. self.request = request is set in view function that as_view() returns. I looked into the history, but only found setting self.request and then immediately passing request into the view function.

Upvotes: 13

Related Questions