【问题标题】:Django: how do i request username in SessionWizardView?Django:我如何在 SessionWizardView 中请求用户名?
【发布时间】:2015-05-02 11:59:40
【问题描述】:

我有问题。在我的代码中我必须使用class ContactWizard(SessionWizardView):

我遇到了一个问题。我真的不知道如何获得当前登录用户的用户名:(

@login_required
def invite(request):
    return render_to_response('invite.html', {'full_name': request.user.username})

class ContactWizard(SessionWizardView):
    template_name = "invite.html"

    def done(self, form_list, **kwargs):
        form_data = process_form_data(form_list)

        return render_to_response('invitedone.html', {'form_data': form_data})

def process_form_data(form_list):
    form_data = [form.cleaned_data for form in form_list]

    #code code code...       
    #code code code...
    #code code code...

    return form_data

在def process_form_data 我希望能够将用户名放入字符串,然后将其插入电子邮件。但我怎么得到它?我不能使用self 和request,因为它们没有在那里定义。

请帮我解决这个问题

【问题讨论】:

  • 嗯,这应该表明你的设计是错误的。如果您需要这些变量,为什么不将它们传递给函数呢?但是你也应该问问自己,为什么你首先将 process_form_data 作为一个单独的函数。

标签: python django view request


【解决方案1】:

你可以这样做:

class ContactWizard(SessionWizardView):
    template_name = "invite.html"

    def done(self, form_list, **kwargs):
        form_data = process_form_data(form_list, self.request.user)

        return render_to_response('invitedone.html', {'form_data': form_data})

不要忘记require the login 以获取向导视图。

无论如何,正如@Daniel Roseman 所说,您可能还想重新考虑您的设计并将 process_form_data 作为视图的一部分。

【讨论】:

  • 你好,这有帮助,答案的第二部分 - 我也不能使用 @login_required ,因为那时我收到了这个错误:AttributeError at /accounts/loggedin/invite 'ContactWizard' object has no attribute 'user'
  • 很高兴听到!检查您放置 login_required 装饰器的位置。对于基于类的视图,您有两个选择:第一个是在 urlconf 中调用装饰器,这是我添加的链接中使用的装饰器,第二个选项是使用 method decorator 装饰视图的调度方法。
  • 谢谢你,我使用了你建议的第二个选项。
  • 如果您使用多个基于类的视图,您可能会喜欢 mixin 方法:here is and example for the login 以及关于 mixin 的更广泛讨论 here
猜你喜欢
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2020-07-13
  • 2014-05-02
  • 2011-01-03
  • 1970-01-01
  • 2011-05-17
相关资源
最近更新 更多