【问题标题】:KeyError in customized Django-all auth form自定义 Django-all auth 表单中的 KeyError
【发布时间】:2016-03-09 00:38:59
【问题描述】:

我正在开发一个基于 Django 框架的网站。我选择了 django-allauth 作为我的后端,并自定义了它提供的标准登录表单,如下所示:

myapp/forms.py:

from allauth.account.forms import LoginForm, SignupForm
from django import forms


class MyLoginForm(LoginForm):
    def __init__(self, *args,
                 **kwargs):
        super(LoginForm, self).__init__(*args, **kwargs)
        self.fields['remember'].label = 'Remember me'
        self.fields['remember'].initial = True
      # To use a placeholder text we'll have to use below
        login_widget = forms.TextInput(attrs={'type':'email',
                                      'placeholder':
                                       ('Enter your email'),
                                      'autofocus':'autofocus'
                                                     })
        self.fields['email'] = forms.CharField(label=("Email"),
                                               widget=login_widget)

        self.fields['email'].label = 'Email'

        def clean_email(self):
            email = self.cleaned_data.get('email')
            base, provider = email.split('@')
            domain, extent = provider.split('.')
            if extent == "edu":
                forms.ValidationError("Please use a valid \
                                      personal email address")
            return email



class MySignUpForm(SignupForm):
    def __init__(self, *args, **kwargs):
        super(SignupForm, self).__init__(*args, **kwargs)

这是我处理表单渲染的视图: another_app/views.py:

from django.shortcuts import render
from userlogin.forms import MyLoginForm, MySignUpForm


def index(request):
    login = MyLoginForm()
    signup = MySignUpForm()
    if request.method == "POST":
        login = MyLoginForm(request.POST or None)
        signup = MySignUpForm(request.POST or None)

        if login.is_valid():
            lg_instance = login.save(commit=False)
            print (lg_instance)

    context = {
              'login': login,
              'signup': signup,
              'login_url': '/profile/'
    }

    return render(
        request,
        'homepage.html',
        context,
    )

鉴于以上信息,我有以下问题:

  1. 点击提交后,网站在 / 处显示 KeyError。这可能是什么原因?回溯显示,在“LoginForm”类中(在 allauth/accounts/forms.py 中)有一个名为 Login 的字段导致冲突。

  2. 我如何实际登录用户并转到个人资料视图。

【问题讨论】:

  • 你能分享完整的回溯吗?
  • @TarunBehal:link'这里'

标签: python django forms django-allauth


【解决方案1】:

问题在于MyLoginForm 初始化。从那里删除所有与电子邮件相关的代码。在您的 settings.py 中使用 ACCOUNT_AUTHENTICATION_METHOD = 'email' ,然后使用 __init__ 方法仅覆盖占位符。检查here django all auth 已经支持电子邮件。

【讨论】:

  • 我已经这样做了,但问题是当我使用它时,电子邮件字段未初始化
  • 我的 settings.py 中有以下设置: ACCOUNT_AUTHENTICATION_METHOD = "email" ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_FORMS = {'login': 'userlogin.forms.MyLoginForm'}
  • 你也可以添加homepage.html。
  • 我解决了,这个错误也在我的 homepage.html 中,因为我使用的是派生的电子邮件地址而不是“登录”字段。格拉西亚斯
猜你喜欢
  • 2021-02-04
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多