ユーザー登録がうまくできないです。
index.htmlに
<div class="newaccount"> <h2>New Account registration</h2> <form class="form-inline" action="{% url 'accounts:detail' %}" method="POST"> <div class="form-group"> <label for="id_username">Username</label> {{ regist_form.username }} {{ regist_form.username.errors }} </div> <div class="form-group"> <label for="id_email">Email</label> {{ regist_form.email }} {{ regist_form.email.errors }} </div> <div class="form-group"> <label for="id_password">Password</label> {{ regist_form.password1 }} {{ regist_form.password1.errors }} </div> <div class="form-group"> <label for="id_password">Password(conformation)</label> {{ regist_form.password2 }} {{ regist_form.password2.errors }} <p class="help-block">{{ regist_form.password2.help_text }}</p> </div> <button type="submit" class="btn btn-primary btn-lg">Regist</button> <input name="next" type="hidden"/> {% csrf_token %} </form>
と書いて、views.pyに
def login(request): login_form = LoginForm(request.POST) regist_form = RegisterForm(request.POST) if regist_form.is_valid(): user = regist_form.save(commit=False) context = { 'user': request.user, 'login_form': login_form, 'regist_form': regist_form, } print(33333) return redirect('profile', context) if login_form.is_valid(): user = login_form.save(commit=False) print(1111) print(user) login(request, user) context = { 'user': request.user, 'login_form': login_form, 'regist_form': regist_form, } print(33333) return redirect('profile', context) context = { 'login_form': login_form, 'regist_form': regist_form, } print(2222) return render(request, 'registration/accounts/login.html', context)
と、
models.pyに
class UserData(models.Model): user = models.ForeignKey("auth.User", verbose_name="imageforegin")
と書きました。
forms.pyには
class RegisterForm(UserCreationForm): class Meta: model = User fields = ('username', 'email',) def __init__(self, *args, **kwargs): super(RegisterForm, self).__init__(*args, **kwargs) self.fields['username'].widget.attrs['class'] = 'form-control' self.fields['email'].widget.attrs['class'] = 'form-control' self.fields['password1'].widget.attrs['class'] = 'form-control' self.fields['password2'].widget.attrs['class'] = 'form-control' class LoginForm(AuthenticationForm): def __init__(self, *args, **kwargs): super(LoginForm, self).__init__(*args, **kwargs) self.fields['username'].widget.attrs['class'] = 'form-control' self.fields['password'].widget.attrs['classF'] = 'form-control'
と書きました。
urls.pyには
from django.conf.urls import url from . import views from django.contrib.auth.views import login, logout from django.views.generic import TemplateView urlpatterns = [ url(r'^login/$', views.login,name='login'), url(r'^detail$', views.detail,name='detail'), ]
と書きました。views.pyはaccountsアプリ内に入っています。
ユーザーネーム・パスワード・Emailの全ての項目を埋めて、Registボタンを押すと次のページに飛びました。ここまでは良いのですが、adminサイトを見るとそのデータが入っていませんでした。ターミナルには2222が出力されていて、その部分を通っていることがわかります。なぜ
if regist_form.is_valid():
の中を通らないのか、
何が問題なのかわかりません。書き方や使っているメソッドが間違っているのでしょうか?
どう直せば良いのでしょうか?
実際のhtmlは
<form class="form-horizontal" action="/accounts/detail" method="POST"> <div class="form-group-lg"> <label for="id_username">ユーザネーム</label> <input autofocus="" class="form-control" id="id_username" maxlength="150" name="username" type="text" required /> </div> <div class="form-group-lg"> <label for="id_email">Eメール</label> <input class="form-control" id="id_email" maxlength="254" name="email" type="email" /> </div> <div class="form-group-lg"> <label for="id_password">パスワード</label> <input class="form-control" id="id_password1" name="password1" type="password" required /> </div> <div class="form-group-lg"> <label for="id_password">パスワード(確認)</label> <input class="form-control" id="id_password2" name="password2" type="password" required /> <p class="help-block">確認のため、再度パスワードを入力してください。</p> </div> <div class="form-group-lg"> <div class="col-xs-offset-2"> <button type="submit" class="btn btn-primary btn-lg" style="color:white;background-color: #F62459;border-style: none;">登録</button> <input name="next" type="hidden"/> </div> </div> <input type='hidden' name='csrfmiddlewaretoken' value='XXXXXXXXXXXX' /> </form>
回答1件
あなたの回答
tips
プレビュー