2017-04-18 1 views
0

crisp 양식을 사용하여 템플릿을 사용하여 Django-allauth 가입 양식에 noRecaptcha 양식을 가져올 수있었습니다. Using this answerDjango Reoder norecaptcha nautocaptcha allauth 가입 필드에 바삭한 양식 사용

질문은 양식이 django-allauth에 포함되어 있고 작성자별로 레이아웃을 지정하지 않은 경우 파삭 파삭 한 양식 레이아웃에서 필드 순서를 강제하는 것과 관련이 있습니다. 따라서 사용자 정의 양식을 사용하여 가입 양식을 재정의 할 때 레이아웃을 지정하려고 시도했지만 확실하게 알 수는 없습니다.
결합 다른 게시물 '답변 :

from django import forms 
from neatf.users.models import User 

from nocaptcha_recaptcha.fields import NoReCaptchaField 


class AllauthSignupForm(forms.Form): 
    captcha = NoReCaptchaField() 

    class Meta: 
     model = User 
     fields = ['username', 'email', 'password1', 'password2', 'captcha'] 
     field_order = ['username', 'email', 'password1', 'password2', 
         'captcha'] 

    def signup(self, request, user): 
     """ Required, or else it throws deprecation warnings """ 
     pass 

내가 잘못된 모델을 참조하거나 단순히 무시됩니다 있습니다 확신합니다. noRecaptcha 필드는 양식의 맨 위 부분에서 기쁜 마음으로 앉을 수 있습니다.

FormHelper를 사용해 보았지만 명확하게 잘못하고 있어야합니다.

helper = FormHelper() 
helper.form_class = '.form-inline' 
helper.field_template = 'bootstrap4/layout/inline_field.html' 
helper.layout = Layout(
    Fieldset('Contact data', 'username', 'email',), 
    Fieldset('Password', 'password1', 'password2', 'captcha')) 

나는 템플릿을 다시 작성하지 않고 레이아웃을 재정의 할 수있는 방법이 있기를 바랍니다.

답변

0

github의 django-crispy에 대한보고 된 문제에서이 답변을 발견했습니다. "undocumented" feature (그 당시) 나는 결국 found in the docs on tags reference (레이아웃 섹션에서 언급하지 않음)입니다.

signup.html

<form class="signup" id="signup_form" method="post" action="{% url 'account_signup' %}"> 
    {% csrf_token %} 

    {{ form.username|as_crispy_field }} 
    {{ form.email|as_crispy_field }} 
    {{ form.password1|as_crispy_field }} 
    {{ form.password2|as_crispy_field }} 
    {{ form.captcha|as_crispy_field }} 

    {% if redirect_field_value %} 
     <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}"/> 
    {% endif %} 

    <script src='https://www.google.com/recaptcha/api.js'></script> 
    <button class="btn btn-primary" type="submit">{% trans "Sign Up" %} &raquo;</button> 
</form> 

forms.py

from django import forms 

from nocaptcha_recaptcha.fields import NoReCaptchaField 


class AllauthSignupForm(forms.Form): 
    captcha = NoReCaptchaField() 

    def signup(self, request, user): 
     """ Required, or else it throws deprecation warnings """ 
     pass 

희망 : 아주 간단하고 forms.py의 제로 변경을 요구하는 템플릿에서 수행

이것은 다른 사람들을 돕는다.

0

이전에이 문제에 대한 해결책을 찾고,이 방법을 사용 :

class AllauthSignupForm(forms.Form): 
#https://developers.google.com/recaptcha/docs/display 
#https://github.com/praekelt/django-recaptcha 
captcha = ReCaptchaField(
    attrs={ 
     'theme' : 'clean', 
     'size' : 'normal', #compact 
    }) 
captcha.label = "Капча" 

def __init__(self, *args, **kwargs): 
    super(AllauthSignupForm, self).__init__(*args, **kwargs) 
    original_fields = self.fields 
    new_order = OrderedDict() 
    for key in ['username', 'email', 'password1', 'password2', 'captcha']: 
     if key in original_fields: 
      new_order[key] = original_fields[key] 
    self.fields = new_order 

def signup(self, request, user): 
    """ Required, or else it throws deprecation warnings """ 
    pass 

관련 답변 :

How does Django Know the Order to Render Form Fields?

How can I order fields in Django ModelForm?

django-allauth: rearrange form fields (change order)

을 이 솔루션은 == 버전 장고 - allauth에서 0.29을 작동하고 새 버전 (0.30-0.31에 대한 시험)

내가 순서를 설정할 수 없습니다 새 버전에 대한

에서 작동하지 않습니다.

+0

나는 django-allauth (0.31.0)을 가지고 있고 코드를 사용하여 recaptcha를 전자 메일 (순서를 표시 : username, email, recaptcha, password1, password2) 다음에 중간으로 옮길 수 있습니다. 개선되었지만 captcha를 끝까지 강요하는 방법을 모릅니다. 감사 – wedward

관련 문제