Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

python

django

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?

Thanks for your answers.

like image 794
StopIteration404 Avatar asked Sep 06 '16 00:09

StopIteration404


People also ask

What is request in views in Django?

From Django Docs. Request came from User that want to load page. When a page is requested, Django creates an HttpRequest object that contains metadata about the request. Then Django loads the appropriate view, passing the HttpRequest as the first argument to the view function.

What are Django class based view?

A view is a callable which takes a request and returns a response. This can be more than just a function, and Django provides an example of some classes which can be used as views. These allow you to structure your views and reuse code by harnessing inheritance and mixins.

How is decorator used in class based view?

You need to apply the decorator to the dispatch method of the class based view. This can be done as follows: class ProfileView(View): @youdecorator def dispatch(self,request,*args,**kwargs): return super(ProfileView,self). dispatch(request,*args,**kwargs) //Rest of your code.


1 Answers

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.

like image 166
Alex Riina Avatar answered Sep 20 '22 23:09

Alex Riina