[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を取得することはできません

 

GoogleStadiaについて個人的に思ったこと

GoogleがStadiaってサービスを発表した

Googleが新ゲーミングプラットフォーム「Stadia」を発表!あらゆるデバイスからゲームがプレイ可能

簡単に概要を言うと今までPCで高画質なゲームをするにはかなりの投資が必要だったんだけどGoogleのコンピューターを使ってゲームできるようにするからみんなはもうゲームするために高級なPC買わなくてもいいよ!って話

 

巷では技術的な話やサービスの内容についての話が多いですがちょっと別の視点からこのサービスを見て思ったことをアウトプットも兼ねて書いてこうかなって

 

これから先e-sportsが盛り上がるにつれてゲームって大衆に浸透していくと思うんです。でも一方でゲームをやるためにポンと投資できる人って多くは無いと思うんですよね。PS4は2.5万円くらいで買えますがゲーム用PCとなると10万円くらいになってしまいます。これ簡単に出せる人の方が少ないですよね…

stadiaはそういう層をまるっと取り込めるのでブルーオーシャンに見えますね。データセンターへの設備投資とかもかなり必要なので参入も難しいですし…

 

自分はNVIDIAっていう企業が同様のサービスを結構前からやっているのを知っていたので「ふーん別に革新的な事ではないじゃん」ってのが初めの感想だったんだけど一方でこの発表を受けての市場の反応がこんな感じだった

 

グーグル、ゲーム市場に本格参入-クラウドで高価なゲーム機不要に

強敵グーグル参入でソニーや任天堂株下げる、自社株買いも終了

 

なんでこんなに影響があるんや。天下のGoogle様だから猫も杓子も大騒ぎしてるんかと思ったんだけどそもそもGoogleがノリで行動するわけがない。何か目論んだうえでの参入だろうなって思って少し考えてみた

 

よく見るとstadiaは開発者向けツールも出しているんですよね。おそらく今のandroid向けアプリストアのGooglePlayみたいなプラットフォームを作って包囲網を作る予定でしょう。またGoogleはYouTubeを持っていてゲームの配信と相性が良い。YouTuberっていう絶大な影響力を持つ広告塔達も抱えていますから知名度皆無なNVIDIAとは雲泥の差だしお金を稼ぐ部分が違う。なるほどそりゃインパクトあるわと

 

じゃあstadiaに対抗できる企業って何があるかなって考えてみた。

ゲームのストリーミングだと遅延にシビアそう。こういうのに対応するには各地にしっかりとしたデータセンター抱えてないと難しいと思うんですよね。どんなに立派なデータセンターを構えていても地理的に遠ければどうしようもないですし…

そうなるとGoogle以外に挙がる企業はAzure持ってるMicrosoftとかAWS持ってるAmazonとかかな

 

AppleとかFacebookはそういう印象がないので参入は厳しそう。インフラ屋としてしっかり投資をしてきた先ほどの3社+Nvidiaくらいですかね

 

この2社についてちょっと調べたらこんな記事がありました

 

Microsoft、新ゲームストリーミングサービス「xCloud」のトライアルを年内に開始へ

Amazonが独自のゲームストリーミングサービスを計画中、2020年にサービス開始との噂

 

やっぱりライバル達も参入しそうじゃないか!と。IT業界の巨頭達の次の激戦区はどうやらゲームストリーミング市場っぽい

 

GoogleがYouTube抱えているみたいにAmazonは過去にTwitch買収しているのでこの2社は配信界隈を巻き込んでの激戦になりそう

AmazonはFire TVやタブレットもそれなりに普及させているのでここら辺をどう使うのかも個人的に注目ですね

 

Googleに包囲網作らててユーザー囲われちゃったら今プラットフォームやっているSteamどうなっちゃうの。今回の発表でSteamは悲鳴上げているのかなそれとも将来的にGoolgeに買収されてウハウハかなって思って調べてみたらこんな記事が

マイクロソフトがEAやPUBG、Steam買収??トランプ減税で得た莫大な資金の投資先に検討

うおお過去のニュース達の点と点がつながっていく感じゾクゾクしますね。

確かにSteamみたいな偉大なプラットフォームが枯れて衰退していくなんてありえないですもんね。衰退させるなんて勿体ない事せずにどこかに買収されるのが丸いでしょう

 

MSはプラットフォームやブランドを買収することで一歩先に抜き出る事を考えているみたいですね。

ゲーミングストリーミング界隈は結局のところこの3社の三つ巴な戦いになりそう。最終的にどこが勝利するのか

 

おまけ

stadiaはNVIDIAのライバルのAMDと手を組むらしいです(そりゃNVIDIAのサービスと競合するから当たり前か)

AMDの株価は前日比で12%近くの上昇…すごい…

個人的にはNVIDIAはこれを機にストリーミング界隈から手を引いて供給側に徹した方が利益が多そうに思えるけどNVIDIAのこれからのビジョンとかのそこら辺の事情はわからんな…二頭追って一頭も得ない結果になっちゃったりするのかなあ

[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行目を以下のようにします

 

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

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