2015-12-04 2 views
0

Я работаю над веб-сайтом, созданным на основе Django. Я выбрал Джанго-allauth как мой бэкэндом и настроить стандартную регистрационную форму он обеспечивает примерно так:KeyError в пользовательской форме Django-all auth

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. Как я могу войти в систему и перейти к профилю.

+0

Можете ли вы поделиться полной трассой. –

+0

@TarunBehal: [link] (http://pastebin.com/mhGjPEeT) «Вот» –

ответ

0

Вопрос с MyLoginForm Инициализация. Удалите из него весь код, связанный с электронной почтой. Используйте ACCOUNT_AUTHENTICATION_METHOD = 'email' в ваших настройках.py, а затем используйте метод __init__ для переопределения только заполнителей. Проверьте here, что письмо уже поддерживается в django all auth.

+0

Я уже это сделал, но проблема в том, что я использую это, поле электронной почты не инициализировано –

+0

У меня есть следующее настройки в моем settings.py: ACCOUNT_AUTHENTICATION_METHOD = "электронная почта" ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_FORMS = { 'Войти': 'userlogin.forms.MyLoginForm'} –

+0

вы можете добавить homepage.html тоже. –

Смежные вопросы