2016-12-09 3 views
1

홈페이지에서 등록을 할 수 있으므로 등록을 처리 할 별도의 URL이 없습니다. get_context_data을 통해 양식을 보내려고하지만 작동하지 않습니다. 여기에 내 코드입니다 :오류 : 메서드가 허용되지 않음 (POST) : "POST/HTTP/1.1"405 0

<form action="" enctype="multipart/form-data" method="post">{% csrf_token %} 
    <div class="registerBox"> 
     {{ form.username }} 
     {{ form.password }} 
     <input type="submit" value="register"/> 
    </div> 
</form> 

그래서

base.html

class UserRegistrationForm(forms.ModelForm): 
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
     model = User 

     fields = [ 
      'username', 
      'password', 
     ] 

views.py

class BoxesView(ListView): 
    template_name = 'polls.html' 

    def get_context_data(self): 
     context = super(BoxesView, self).get_context_data() 

     # login 
     if self.request.method == 'POST': 
      form = UserRegistrationForm(self.request.POST or None) 
      context['form'] = form 
      if form.is_valid(): 
       username = form.cleaned_data['username'] 
       password = form.cleaned_data['password'] 
       user = User.objects.create_user(username=username, password=password) 
       user.save() 
       return redirect('/') 
      else: 
       print(form.errors) #doesn't print anything 
       print(form.non_field_errors()) #doesn't print anything 
       print('Errors') #doesn't print anything 
     else: 
      form = UserRegistrationForm() 
      context['form'] = form 

    return context 

    def get_queryset(self): 
     pass 

forms.py 때 양식을 제출하면 오류가 발생합니다. Method Not Allowed (POST): "POST/HTTP/1.1" 405 0

그리고 새 사용자를 만들지 않습니다. 문제가 뭔지 아십니까?

편집 :이 오류를 가지고, FormMixin 시도 : The view app.views.BoxesView didn't return an HttpResponse object. It returned None instead.

class BoxesView(ListView): 
    template_name = 'polls.html' 
    form_class = UserRegistrationForm 

    def post(self, request, *args, **kwargs): 
     form = self.get_form() 
     if form.is_valid(): 
      username = form.cleaned_data['username'] 
      password = form.cleaned_data['password'] 
      user = User.objects.create_user(username=username, password=password) 
      user.save() 
      return redirect('/') 

    def get_context_data(self): 
     context = super(BoxesView, self).get_context_data() 
     context['form'] = self.get_form() 


     return context 

    def get_queryset(self): 
     pass 
+0

'사용자 = User.objects.create_user (사용자 이름 = 사용자 이름, 암호 = 암호를)'안쪽에 가져 가라. 부는 내가 생각하는 문제가 아니다. 당신의 URL은 괜찮습니까? – metmirr

+0

고정 된 들여 쓰기. 음, 이것이 내 홈페이지입니다. 그래서 별도의 등록 URL이 없습니다. 등록은 홈페이지에서 자바 스크립트 (onclick)를 통해 이루어집니다. 이것이 영향을 미치는가? – Zorgan

답변

0

좋아 나는 문제는 들여 쓰기를 해결 참조하십시오 문이 아닌 외부 get_context_data의 함수 내에서 할 필요가있는 경우)

+0

들여 쓰기를 수정했지만 여전히 작동하지 않습니다. 같은 오류 : 메서드가 허용되지 않음 (POST) : "POST/HTTP/1.1"405 0 – Zorgan

+0

get_context_data 대신 post 메서드를 사용하십시오./class-based-views/intro/# handling-forms-with-class-based-views – Dilmer

+0

action = ""도 누락 되었습니까? 게시하려는 URL을 지정해야합니다. urls.py를 살펴보고보기에 추가 한 URL이 작업에 사용 된 URL이어야합니다. – Dilmer

0

당신이 필요 이처럼 CBV에 post() 방법 FormMixin를 추가

class BoxesView(FormMixin, ListView): 
    template_name = 'polls.html' 
    form_class = UserRegistrationForm 
    # ... 

    def post(self, request, *args, **kwargs): 
     form = self.get_form() 
     if form.is_valid(): 
      # ... 
     else: 
      # ... 
     return render(request, self.template_name, {'data': some_data}) 
+0

나는 그것을 이미 시도해 봤습니다. 오류가 발생하지 않았지만 새 사용자를 만들지 않았습니다. – Zorgan

+0

데이터 형식이 틀림 없음을 확신합니까? '새로운 사용자를 만들지 않았습니다'는 다른 이유로 인해 발생할 수 있기 때문입니다! – ettanany

+0

'form.is_valid()'가 False를 반환 했으므로 데이터가 유효하지 않을 수 있지만 그 이유는 확실하지 않습니다. 편집에 코드를 게시했습니다. – Zorgan

관련 문제