python - Django 基于类的 View 中 self.request 和 request 的区别

标签 python django django-views

在 django 中,对于像 ListViewDetailView 这样基于类的 View ,方法像 get()post() 或开发者定义的其他函数带参数包括 selfrequest。我了解到在 self 中,这些实际上是一个 self.request 字段,那么 self.requestrequest?

例如,这是基于类的 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/

相关文章:

python - 如何在 Python 中访问类内的全局变量

python - 在 AWS Lambda 中解析 SQS 消息触发器 - Python

django - 创建一个持续存在于 Django 中的多个 View 方法调用的单一连接?

django - uWSGI 作为 HTTP 服务器 : in config. ini 选项称为 `http-socket` ,而不是 `http`

python - 如何在应用程序启动时向 EndPoint 发送请求

python - 使用 tkinter 的条目选择列表

python - 在本地主机上运行 cgi-bin 时出现导入错误 - undefined symbol : lo_truncate64

python - “元组”对象在更新图像对象时没有属性 '_committed' 错误?

python - 自定义 View 中返回的模型

python - 我如何在基于 django 类的 api View 中调用自己的方法