[Django] サクッとログインフォームを作成する

サインアップのフォームが作成できたので次はログインフォームを作ってみようと思います

今回は以下を参照にしました

A Complete Beginner’s Guide to Django – Part 4

オーソドックスなログインフォームはDjangoに用意されているのでそれを使ってあげるとサクッと実装できちゃいます。

まずはurls.pyを以下のように

 

3行目でログイン時に使うviewsを引っ張ってきています。これによってログインフォームの実装は自分でviews.pyを書くことなく実装できちゃうんですね。らくちん

7行目でlogin/にアクセスした際の動作を決めています。template_nameはログインフォーム表示時のテンプレですね

login.htmlはこんな感じ

あともう一つやらないといけないのはsetting.pyに以下を記述

これはログインに成功した後にどこに飛ぶかという設定です。今回はログイン成功と書かれたページに飛ぶようにしました

以上で完成!

それでは実際に使ってみる

まずlogin/にアクセスするとこんな感じ

何も入力せずにログインボタンを押すとこんな感じになります

フォームにエラーがあるとこんな感じで教えてくれる。login.htmlの8~10行目あたりですね

 

正しいユーザー名とパスワードを入力するとこんな感じ。

 

 

 

 

[Django] signupフォームの見た目を整える

前回はUserCreationFormを使ってサクッとsignup用のフォームを作成しました

ただあまりにも味気ないフォームだったのでどうにかよくできないかなと思っていたところ素晴らしいページを見つけました

How to Create User Sign Up View

ここの記事の内容を引用しつつ味気ないフォームを少しいじってみます

views.pyはそのままにテンプレートを以下のようにすると

フォームがこんな感じになります

セキュリティ上の問題で一部文字がエスケープされてulタグとかがそのまま出力されちゃっているので9行目を以下のようにします

 

そうすると問題なく表示されていますね

警告文が赤文字で表記されるので前回のフォームよりはわかりやすいフォームになっていると思います

 

 

[Django] signupフォームを作る

Djangoでオーソドックスなsignupフォームを作成します。

ユーザーの新規登録画面みたいなものですね

 

モデルをフォームから作成するのと同様に自分でフォームを作成してUserモデルを作成することもできますが、Djangoにはsignup用のフォームが用意されているので素直にそれを使った方がいいかもしれません。

views.pyはこんな感じ

 

1行目でUserCreationFormってのを読み込んでいますが、これが先ほど言ったsignup用のフォームになります。

signup.htmlはこんな感じ

そうするとこんな感じのフォームが作成されています

便利

ちなみに同一のユーザーがいないかとかパスワードが正しいかのチェックもしてくれます

簡単なwebアプリなら十分なフォームですね

[Django] ユーザーの権限比較

[Django] 管理画面以外から最速でユーザーを作成する前回の記事の続きみたいなもの

フィールドを設定することでユーザーに権限を与えることができます。

前回は権限を与えなかったので作成はできましたが管理画面にはアクセスできませんでした。

今回は権限ごとにできることなどを比較してみます

今回はこんな感じのコードを動かしてみます。

 

3つユーザー作ってそれぞれに異なる権限を与えていますね。

まずはスタッフ権限のみを与えたstaffでログインしてみます

ログインはできますがモデルの登録変更閲覧など何もできませんでした。

次にスーパーユーザー権限を与えたsuperでログインしてみます。

次はログインすらできませんでした。

最後に両方の権限を与えたsuper_staffでログインしてみます。

こちらでは問題なくログインができ、さらにモデルの閲覧なども可能でした。

createsuperuserで作成したアカウントと同様だと思っていただければわかりやすいかなと

[Django] 管理画面以外から最速でユーザーを作成する

管理画面以外からユーザーを作成します。応用すればフォームからユーザー登録とかできます。

全然上品じゃないですがアクセスするだけでユーザーが作成されます。

フィールド名などはDjango サイト管理に関するメモを参考にするといいかも

こんなかんじで設定することもできますがパスワードはハッシュ値を渡さないといけないのでこれだと「pass」でログインできないことに注意

 

ちなみに今回登録したユーザーは権限を与えていないので正しいパスワードなどを入力しても管理画面にアクセスすることはできません

[Django] あいまい検索の実装

モデルの検索はこんな感じ

これだと「テスト1」という記事しか引っ張って来れない。テスト1を含む記事を探すなどのあいまい検索をするなら○○__containsを使うといい

こうすることでさっきはヒットしなかった「テスト10」や「テスト100」とかもヒットするようになる

 

 

[Django] モデルを逆順で持ってくる

モデルを持ってくるときに降順で持ってきたいなって思うことがるのでメモ

order_by()使うとソートみたいなことができます。逆順にしたいときは「-」をつけてあげると逆になります。

モデルのフィールドでソートができるのでid以外でもモデルにある任意のフィールドでソートができます。

idというフィールドは我々が作らなくてもデフォルトでモデルに付加されている物です。重複しないので新しい順、古い順にするならIDでソートした方が良いでしょう。

 

[Django] モデルを管理サイト以外から作成する

管理画面以外からモデルを作成してみる
今回用意したモデルはこんな感じ

こんな感じで作成できる
7行目がポイントでsaveしないと保存されない。良く忘れる

こんな書き方も可能

 

[Django] タグ内での足し算、引き算

よく忘れるのでメモ

[Django] テンプレートの共通の部分を使いまわそう

2019/3/20追記

この記事を書いた当時は理解が浅くこの記事にちょっと甘い部分がありました。

もし良ければこの記事も目を通していただけると嬉しいです

[Django] “‘block’ tag with name ‘content’ appears more than once”ってエラーが出た

 

 

Djangoでは「extend」や「block」という組み込みタグを使うことでテンプレートの共通の部分を使いまわせたりします。

複数のテンプレートで共通の部分がある場合などはこの組み込みタグを使って使いまわすといいと思います。

そのようにしておくと共通の部分を変更する際に元の部分の変更だけで済み、すべてのテンプレートを1つ1つ変更しなくてもよくなるため是非活用したい機能です。

親テンプレートのindex.html

 

{% block content%}と{% endblock%}で囲まれた場所に子テンプレートが挿入されます。

子テンプレートとしてcontentA.htmlとcontentB.htmlを用意しました。

 

両方とも1行目で親テンプレートを拡張したことを示しています。違うのは5行目の1行だけ

views.pyはこんな感じ

アクセスすると

こう表示されます

views.pyを書き換えてhello/contentB.htmlへ行くようにすると

こんな感じに表示されます。

今回の例だと親テンプレートを変更するだけで2つの記事に変更が反映されるので便利ですね。