Reputation: 315
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
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