[Django] URLから動的に値を取得する

URLから動的に値を取得する方法です。

クエリパラメーターを使った方法はDjangoでURLから値を受け取るココ参考に

URLから動的に値を取りたい…たとえば

http://retasu0.com/mypage/1234

http://retasu0.com/mypage/retasu

この2つにアクセスした際にそれぞれ1234、retasuを取得する方法です。

こういった場合はurls.pyの編集が必要になります。urls.pyに以下のように記述します

<foo>ってのが今回のミソです。

一方でviews.pyには次のように記述します

1行目に注目してほしいのですが引数にfooがありますね。ここで先ほどの<foo>に入る値を取得できます。

あとURLの形を制限?することも可能です。

このようにすればmypage/1234から1234が取得できますがmypage/retasuからretasuを取得することはできません

 

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

この記事を参考にテンプレの中にテンプレを…といれたら「’block’ tag with name ‘content’ appears more than once」ってエラーが出てしまった

contentという名前のブロックタグが何度も出ているよって意味だ

問題のコードはこんな感じ

自分勘違いしていたみたいなんですけど{% block content %}じゃなくて{% block 〇〇 %}って使い方なんですね。〇〇は好きなわかりやすい名前にしてOKだけど同じ物を同じテンプレ上で2回以上使うと上記のエラーが出るっぽい

 

よってこんな感じにすれば上のテンプレは問題なく動くと

 

[Django] モデルを任意の個数取得する方法

モデルを全部持ってくるのじゃなくて5個とか10個とか任意の個数を持ってきたいそんなケースに当たったのでメモ

全部持ってくるときは

これは簡単

 

10個だけ持ってきたいときは

これでおけ

[0:10]の部分適宜弄ってあげればスライスも自由自在

 

ちなみに最初の1つだけとか最後の1つだけ取りたいって場合は.first()や.last()つけてあげればよい

もしページネーション関係でここを参照しているならDjangoには専用の関数などがあるのでそっちの方が便利

DjangoでPagination

[Django] ログインしているか調べる方法

ログインしていると見れるけどログインしてないと見れないページを実装する機会は少なくないと思います。上記の事をするだけなら

って感じ@login_requiredをつけてあげれば実装可能です。

しかしこの方法だとログインしていない状態でアクセスすると「Page not found」の404エラーが返ってきます。

ログインしている場合はアクセス出来てそうじゃない場合は別のページ(例えばサインアップページ)に飛ぶように分岐させるには以下のようにします

 

参照

https://qiita.com/haessal/items/2c4077f3600bc3039e06

[Django] 3ステップで実装するログアウト

サインインとログインを実装したので次はログアウトの実装をしてみたいと思います。

ログアウトの機能もDjangoに既にあるのでそれを使うだけ。めっちゃ簡単

まずURLを登録しておきます。urls.pyにこんな感じに追記してけば大丈夫だと思います。

 

次にsettings.pyにログアウトしたらどこに飛ぶかを記入しておきます。

 

次にテンプレートに以下のように記述しておけば完成!

 

ログアウトって書かれたリンクをクリックするとログアウトし任意のページ(今回だとname=’toppage’で登録したURL)に飛ばされます。

 

[Django] ログイン中のユーザーを表示する方法

http://djangoproject.jp/doc/ja/1.0/topics/auth.html

ドキュメントは1だけどDjango2でもこのままで動きます

[Django] ログインフォームでログインに失敗した際は

前回作成したログインフォームではログインに失敗したとき(ユーザー名とパスワードが異なる等)はloginフォームにもう一度飛ばされるという実装になっていました。

それだけだと不親切なのでもし失敗したらエラーメッセージを出してあげましょう

login.htmlを以下のようにします

3~7行目が新たに足されました。

それでは間違ったユーザー名などでログインしてみます

こんな感じでメッセージが出るようになりました。

 

 

 

 

[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アプリなら十分なフォームですね