Django 空请求对象

Posted

技术标签:

【中文标题】Django 空请求对象【英文标题】:Django empty request object 【发布时间】:2015-02-12 23:50:57 【问题描述】:

我在 Django 中有一个自定义的 UpdateView,它应该管理给定对象的更新过程。我目前正在使用 slug(对象的标识符而不是 pk),因此我使用 url 模式中给出的 slug 名称定义字段“slug_field = 'cluster_id'”:

**views.py**

class LeopUpdateView(edit_views.UpdateView):
    model = leop_models.Cluster
    slug_field = 'cluster_id'
    form_class = leop_forms.LeopForm
    template_name = 'staff/leop_update.html'
    success_url = django_resolvers.reverse_lazy('leop_management')

    def get_object(self, queryset=None):
        print '>>> self.request.GET = ' + misc.dict_2_string(
            self.request.GET.dict()
        )
        print '>>> self.request.POST = ' + misc.dict_2_string(
            self.request.POST.dict()
        )

        print '>>> cluster_id = ' + str(self.request.GET.get('cluster_id'))
        print '>>> user = ' + str(self.request.user)
        print '>>> '
        return self.model.objects.get(
            identifier=self.request.GET.get('cluster_id')
        )

**urls.py**

urlpatterns = urls.patterns(
    '',
    urls.url(
        r'^update/(?P<cluster_id>\w+)/$',
        decorators.login_required(leop_views.LeopUpdateView.as_view()),
        name='leop_update'
    ),
)

但是,当我在视图中通过覆盖的“get_object”方法收到请求时,request.GET 和 request.POST 对象为空且未设置 slug;但是,用户名是在请求中设置的(以下是我在控制台中得到的输出):

>>> self.request.GET = 

>>> self.request.POST = 


>>> cluster_id = None
>>> user = satnet_admin

urlpattern生成并匹配的URL为:“/leop/update/elana/”

我做错了什么?我应该以不同的方式访问 slug 字段吗?

【问题讨论】:

【参考方案1】:

request.GET 包含查询字符串参数 (?key=value&key1=value1) 并且 request.POST cform 包含发布数据(通常是表单)

我认为错误在这一行

slug_field = 'cluster_id'

应该是

slug_url_kwarg = 'cluster_id'

slug_field 应包含用作搜索的模型字段的名称(根据您的 url 的字符)。

PS。你不需要覆盖get_object

【讨论】:

是的,我重写了该方法只是为了检查 self.request.GET 和 self.request.POST 的内容。

以上是关于Django 空请求对象的主要内容,如果未能解决你的问题,请参考以下文章

Django 2021年最新版教程12GET POST请求参数 如何接收判空默认值

jQuery JSON ajax 请求上的空请求正文

Django中请求之间的共享对象

Django通过ajax获取请求发出两个请求

JSON数据请求后的空对象

Laravel 中的 Ajax 请求返回一个空对象