Closed Kaito-a-bit closed 2 years ago
○課題 ・ユーザ登録には成功したが、その後のリダイアレクトが成功しないことがある。 (まだバグかどうか判然としない部分がある)
○解決策
・htmlの<form>
を閉じていなかったので適切な形にすることで望ましい挙動をするようになった。
<成功時のログ>
○現状 ・URLを打ち込めば、ログインしていなくてもホーム画面に行けてしまうようになっている
gitignoreを後から反映する方法があるので、それを実施してください。 次のprでログイン・ログアウト機能を実装しますが、ご質問の点についてはこれ が参考になるかと思います。
gitignoreを後から反映する方法があるので、それを実施してください。
この記事を参考に.gitignore
ファイルを編集し、キャッシュを削除しました。
○修正点
.pyc
をgit管理の対象から外しました。base.html
を拡張する形でユーザ登録画面・ホーム画面を作り替えました。
尚、上記に加えてログイン画面・ログアウト画面を、base.html
を拡張する形で実装しようと考えています。css
ファイルを削除しました。○変更点
authenticate()
を通すようにしたAbstractBaseUser
を拡張する形でカスタムのものに変更したhelp_text
, errors
を表示させるようにしたデフォルトでblank=FALSE
, null=FALSE
らしいので必須フィールドに対する指定を削除した
requirements.txt
を作成しました__pycache__
ファイル以外のものをgit管理の対象に入れましたUserCreationForm
を使用してフォームを作成しましたemail
を用いて通すようにしましたPRが大きくなってすみません😞🙇♂️
user = authenticate(username=email, password=password)
で既に試行していたが、password
の取得ができていなかった。
User
モデルに既にpassword
というカラムが存在しているが、password = form.cleaned_data.get('passsword')
で取得できていない
Cleaned_data
はフォームの中でバリデーションを通過したデータが格納されていく。バリデーション自体は通過しているはずなのに取得できない理由がわからないです。
user = authenticate(username=email, password=password)
で既に試行していたが、password
の取得ができていなかった。
User
モデルに既にpassword
というカラムが存在しているが、password = form.cleaned_data.get('passsword')
で取得できていないCleaned_data
はフォームの中でバリデーションを通過したデータが格納されていく。バリデーション自体は通過しているはずなのに取得できない理由がわからないです。
UserCreationFormは、password1とpassword2というフォームアイテムを持ちます。このpassword1とpassword2のバリデーションチェックが完了した後に、password1がハッシュ化されてUserモデルのpasswordに格納されます。 したがってユーザーが入力した内容を確認する時は、password1を取得します。
form.cleaned_data.get('password1')
テスト作成の参考記事
top
, signup
, home
)のステータスコードを確認するテストを作成○リダイレクト先のテスト リダイレクト先の検証については下記のサイトを参考に作成した。
def test_redirect_to_home(self):
data = {
'username': 'Gym Motivation3',
'email': 'nanaMotive@gmail.com',
'birthday': '2002-1-1',
'password1': 'kjhd1245',
'password2': 'kjhd1245',
}
self.response = self.client.post('/signup/', data)
self.assertRedirects(self.response, '/home/', status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)
上記のテストの実行結果は以下の通りとなった。
以下の結果を302
が返ってくるはずだけど200
が返ってきた。という趣旨のエラーだと解釈した。
ここでshellで同様の処理を実行してみることにした。
shell内ではpost
した結果返ってきたのは302
だった。
(あるページに遷移したことを示すコード)
redirect_chain
について確認してみました。
ここで、結果を返す配列が空になっているのが何故かについても理解ができませんでした。
サインアップ処理自体に失敗しているため生じているエラーです。 以下のコメント箇所が原因と考えられます。
def test_redirect_to_home(self):
data = {
'username': 'Gym Motivation3', # 半角スペースがある
'email': 'nanaMotive@gmail.com',
'birthday': '2002-1-1',
'password1': 'kjhd1245',
'password2': 'kjhd1245',
}
self.response = self.client.post('/signup/', data)
self.assertRedirects(self.response, '/home/', status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)
○issue #1
○実装方針
base.html
)sign_up.html
)home.html
) を作成した。○実行画面
ログイン画面
ログイン後ホーム画面
管理画面(ユーザ登録が確認できる画面)
○質問・その他
現状、アドレスバーよりユーザ登録を経なくてもホーム画面に遷移できる仕様になってしまっています。 これを防ぐ方法を探したのですが、参考になるサイトを見つけることできませんでした。 これを防ぐ手段の名前などを教えて頂けたら幸いです。 →次のログイン・ログアウト機能の作成と同時に修正します。
プロジェクトの作成時点で
.gitignore
に記載した内容が不十分であったことにより、変更ファイルが多くなってしまっています。ご迷惑おかけします。