2015-03-05 3 views
0

Я просмотрел много сообщений, которые имели похожие проблемы, и ответы ничего не сделали для моего кода. Я использую настраиваемую регистрационную форму для сайта, над которым я работаю, что требует электронной почты. большая часть кода в нем основана на том, что он встроен в django. Я попытался создать новый класс формы на основе django.contrib.auth.forms.UserCreationForm и по-прежнему получаю ту же ошибку.Объект 'WSGIRequest' не имеет атрибута 'post' с пользовательской формой регистрации

форма на основе одного в Джанго

class UserCreateFrom(UserCreationForm): 
    """ 
    A form that creates a user, with no privileges, from the given username and 
    password. 
    """ 
    error_messages = { 
     'duplicate_username': _("A user with that username already exists."), 
     'duplicate_email': _("That email is already in use"), 
     'password_mismatch': _("The two password fields didn't match."), 
    } 
    email = forms.EmailField(label=_("Email Address"), 
          required=True, 
          help_text="Required. Your Email Address for password resets, and other emails from us") 

    def clean_email(self): 
     email = self.cleaned_data["email"] 
     try: 
      User._default_manager.get(email=email) 
     except User.DoesNotExist: 
      return email 
     raise forms.ValidationError(
      self.error_messages['duplicate_email'], 
      code='duplicate_email', 
     ) 

форма используется в настоящее время

class UserCreateFrom(forms.ModelForm): 
    """ 
    A form that creates a user, with no privileges, from the given username and 
    password. 
    """ 
    error_messages = { 
     'duplicate_username': _("A user with that username already exists."), 
     'duplicate_email': _("That email is already in use"), 
     'password_mismatch': _("The two password fields didn't match."), 
    } 
    username = forms.RegexField(label=_("Username"), max_length=30, 
           regex=r'^[\[email protected]+-]+$', 
           help_text=_("Required. 30 characters or fewer. Letters, digits and " 
              "@/./+/-/_ only."), 
           error_messages={ 
            'invalid': _("This value may contain only letters, numbers and " 
               "@/./+/-/_ characters.") 
            } 
           ) 
    email = forms.EmailField(label=_("Email Address"), 
          required=True, 
          help_text="Required. Your Email Address for password resets, and other emails from us") 
    password1 = forms.CharField(label=_("Password"), 
           widget=forms.PasswordInput) 
    password2 = forms.CharField(label=_("Password confirmation"), 
           widget=forms.PasswordInput, 
           help_text=_("Enter the same password as above, for verification.")) 

    class Meta: 
     model = User 
     fields = ("username",) 

    def clean_username(self): 
     # Since User.username is unique, this check is redundant, 
     # but it sets a nicer error message than the ORM. See #13147. 
     username = self.cleaned_data["username"] 
     try: 
      User._default_manager.get(username=username) 
     except User.DoesNotExist: 
      return username 
     raise forms.ValidationError(
      self.error_messages['duplicate_username'], 
      code='duplicate_username', 
     ) 

    def clean_email(self): 
     email = self.cleaned_data["email"] 
     try: 
      User._default_manager.get(email=email) 
     except User.DoesNotExist: 
      return email 
     raise forms.ValidationError(
      self.error_messages['duplicate_email'], 
      code='duplicate_email', 
     ) 

    def clean_password2(self): 
     password1 = self.cleaned_data["password1"] 
     password2 = self.cleaned_data["password2"] 
     if password1 and password2 and password1 != password2: 
      raise forms.ValidationError(
       self.error_messages['password_mismatch'], 
       code='password_mismatch', 
      ) 
     return password2 

    def save(self, commit=True): 
     user = super(UserCreateFrom, self).save(commit=False) 
     user.set_password(self.cleaned_data["password1"]) 
     if commit: 
      user.save() 
     return user 

мнение, я не был в состоянии работать на, если форма является действительным, так как я не могу получить его для работы без данных UserCreateFrom - это моя пользовательская форма регистрации, импортированная из froms.py в том же приложении.

@sensitive_post_parameters() 
@csrf_protect 
@never_cache 
def register(request): 
    """ 
    Allow registration of new users 
    :param request: 
    :return: 
    """ 
    context = {} 
    form = UserCreateFrom(data=request.post) 
    context.update({'form': form}) 
    if request.method == 'POST' and form.is_valid(): 
     return render(request, 'test.html', context) 
    else: 
     return render(request, 'register.html', context) 

если я переключаюсь form = UserCreateFrom(data=request.post) в form = UserCreateFrom(request) я получаю объект «WSGIRequest» не имеет атрибута «получить» ошибку, но таким образом, по крайней мере, ошибки в праве шаблона, где форма вызывается через `{{форма}}, а не вид.

ответ

0

Атрибут данных называется request.POST.

Но вы должны переместить это в блок, который проверяет метод.