2015-02-03 2 views
0

공개 웹 사이트를 진행하면서 등록 양식부터 공개 양식을 보호하고 싶습니다.내 양식에 대한 새로운 재구성

나는 새로운 Google captcha를 발견했으며 내 장고 프로젝트에서 사용하고 싶습니다. https://github.com/praekelt/django-recaptcha : OK

  • 는 VAR 및 settings.py에서 응용 프로그램을 추가

    1. 이 도구를 설치 OK
    2. 페이지에 스크립트 JS 추가 : OK
    3. 편집 클래스를 양식에 이제 새로운 보안 문자를 제대로 넣었

    를 OK,하지만 난 괜찮 아닌지 확인하는 방법을 모른다 : OK

  • 양식에 보안 문자를 추가 : 보안 문자를 추가합니다.

    import os 
    os.environ['RECAPTCHA_TESTING'] = 'True' 
    
    form_params = {'recaptcha_response_field': 'PASSED'} 
    form = RegistrationForm(form_params) # assuming only one ReCaptchaField 
    form.is_valid() # True 
    
    os.environ['RECAPTCHA_TESTING'] = 'False' 
    form.is_valid() # False 
    

    나는이 내 코드와 함께 작동하는 방법을 이해하지 않습니다 설명서를 읽기

    ,이 섹션 것 같다. 더욱이 폼 검사는 뷰가 아닌 클래스 형식 (클린 데프)으로 수행되므로 이해가 안됩니다.

    forms.py :

    class RegisterForm(forms.Form): 
        username = forms.CharField(min_length=5, max_length=30, required=True) 
        email = forms.EmailField(max_length=75, required=True) 
        password = forms.CharField(widget=forms.PasswordInput, required=True) 
        password_check = forms.CharField(widget=forms.PasswordInput, required=True) 
        captcha = ReCaptchaField() 
    
        def clean(self): 
         cleaned_data = super(RegisterForm, self).clean() 
         username = cleaned_data.get('username') 
         email = cleaned_data.get('email') 
         password = cleaned_data.get('password') 
         password_check = cleaned_data.get('password_check') 
    
         # Username 
         if User.objects.filter(username=username).exists(): 
          msg = "Ce nom d'utilisateur n'est pas disponible" 
          self.add_error('username', msg) 
    
         # Email 
         if User.objects.filter(email=email).exists(): 
          msg = "Cet email est déjà associé à un utilisateur" 
          self.add_error('email', msg) 
    
         # Password 
         if password_check != password: 
          msg = "Le mot de passe et sa confirmation doivent être identiques" 
          self.add_error('password_check', msg) 
    
         return cleaned_data 
    

    views.py :

    def register(request): 
        if request.user.is_authenticated(): 
         return redirect('/') 
        else: 
         if request.method == 'POST': 
          form = RegisterForm(request.POST) 
    
          if form.is_valid(): 
           username = form.cleaned_data['username'].strip().capitalize() 
           email = form.cleaned_data['email'] 
           password = form.cleaned_data['password'] 
    
           #Success message 
           messages.success(request, "Votre inscription est désormais terminée. Connectez-vous pour démarrer l'aventure.") 
    
           return redirect(reverse('membres.views.login')) 
    
         else: 
          form = RegisterForm() 
    
         return render(request, 'membres/register.html', locals()) 
    
  • +0

    뻔뻔한 셀프 플러그인이지만, 구현하기가 훨씬 쉽다면 django-simple-math-captcha에 다음을 시도해보십시오. https://pypi.python.org/pypi/django-simple-math-captcha /1.0.5 – Brandon

    +0

    안녕하세요, 저는 수학 보안 문자에 관심이 없습니다. 하지만 어쨌든 고마워요 –

    답변

    0

    흠, 내가 장고-reCAPTCHA를 사용하고하고 보안 문자가 있다면 테스트 아무것도 할 필요가 없습니다 좋은. 이 형식은 is_valid() 형식으로 처리됩니다.

    +0

    그래서 할 일이 없나요? 내가 한 방식은 괜찮아 끝났어? –

    +0

    글쎄, 당신은 그것을 시험해보아야한다, 그렇지? 'is_valid()'중에 무슨 일이 일어나는지 보거나 템플릿에서 에러 값을 얻을 수 있습니다. –

    +0

    오류가 발생했습니다. JSON 개체는 '바이트'가 아닌 str이어야합니다. –