在django中,对于ListView
和DetailView
等基于类的视图,get()
或post()
等方法或开发人员定义的其他函数包括{{1} }和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'))
在第一个函数中,它使用了存储在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
,它们都在功能上运行。有什么区别?
感谢您的回答。
答案 0 :(得分:6)
对于View
的子类,它们是同一个对象。 self.request = request
在view
返回的as_view()
函数中设置self.request
。我查看了历史记录,但只找到设置android:background="@android:color/white"
然后立即将请求传递给视图函数。