在django中,对于基于类的视图,ListView和类似的DetailView方法get()或者post()由开发人员定义的其他函数采用参数include self和request.我了解到,在self这些实际上是一个self.request领域,所以self.request和它之间的区别是request什么?
例如,这是基于类的视图中的函数,用于处理用户的登录要求:
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'))
Run Code Online (Sandbox Code Playgroud)
这是用于处理用户注册的函数:
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'))
Run Code Online (Sandbox Code Playgroud)
在第一个函数中,它使用存储在request第二个函数中的数据,它使用的数据self.request都在功能上起作用.有什么不同?
谢谢你的回答.
对于子类View,它们是同一个对象.self.request = request在返回的view函数中设置as_view().我查看了历史记录,但只找到了设置self.request,然后立即将请求传递给了view函数.