2016-12-09 6 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ときIこのエラーが表示されるフォームを送信してください:Method Not Allowed (POST): "POST/HTTP/1.1" 405 0

そして、新しいユーザーを作成していません。何が問題なのか?

EDIT:しようとしました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(ユーザ名=ユーザ名、パスワード=パスワード) 'if inside if。これは私が思っている問題ではありません。あなたのURLは大丈夫ですか? – metmirr

+0

固定インデント。まあ、これは私のホームページなので、登録のためのURLはありません。登録はホームページからjavascript(onclick)を介してアクセスします。これがそれに影響を与えているかどうか? – Zorgan

答えて

0

私は問題がインデントを修正する参照[OK]を、あなたのif文ではなく外get_context_data関数内でなければなりません;)

+0

インデントを修正しましたが、まだ動作しません。同じエラー:メソッドが許可されていない(POST): "POST/HTTP/1.1" 405 0 – Zorgan

+0

get_context_dataを使用する代わりに、postメソッドを使用してこのリンクを見てください。https://docs.djangoproject.com/en/1.10/topics/class-based-views/intro /#handling-forms-with-class-based-views – Dilmer

+0

action = ""もありませんか?投稿するURLを指定する必要があります。 urls.pyを見てください。あなたのビューに追加した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

関連する問題