在 django 中,对于像 ListView
和 DetailView
这样基于类的 View ,方法像 get()
或 post()
或开发者定义的其他函数带参数包括 self
和 request
。我了解到在 self
中,这些实际上是一个 self.request
字段,那么 self.request
和 request之间有什么区别
?
例如,这是基于类的 View 中的函数,用于处理用户的登录要求:
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'))
这是用来处理用户注册的函数:
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'))
在第一个函数中,它使用了存储在 request
中的数据,在第二个函数中,它使用了 self.request
,两者都在功能上起作用。有什么区别?
最佳答案
对于 View
的子类,它们是同一个对象。 self.request = 请求
is set in view
as_view()
返回的函数。我查看了历史记录,但只发现设置 self.request
然后立即将请求传递给 View 函数。
关于python - Django 基于类的 View 中 self.request 和 request 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339221/