freedom-man.com

ブログは俺のセーブポイント

Category: Python (page 2 of 4)

djangoのbuilt-in viewの利用

djangoのユーザ管理ではビルトインのviewが利用できる。

https://docs.djangoproject.com/en/1.5/topics/auth/default/#module-django.contrib.auth.views

 

上記URLに書いてあるようにloginの場合はurls.pyに

みたいな感じで、viewにビルトインのビューと任意のテンプレートを設定してあげて、

テンプレートにはこれまたデフォルトで設定されているformを色々と弄ってあげればOK。

(※上記参照)

 

と、ここまでは使い方がソースコードとともに説明されてあるから良いけど、

logout以降はサンプルソースとか使い方が詳細に書いていない!

本当にどこにも書いてない上に、ググっても出てこないので、

django使いはソースコードを読んで理解しているのか!?

 

ということで、ソースコード直接読んで何となく理解しました。

基本的にはフィールドの設定とバリデーションを組んでいるだけで、

templateは利用するフィールドを理解していれば、

あとはPOSTするだけでOKな感じ。

 

具体的には

1. {% form %}とか{% for field in form.base_fields %}{{  field }}{% endfor %}とかで

出力するフィールド名をメモ

2. 対象フィールド名をformタグ内に書き込む(ex.  {{ form.old_password}})

な流れで不自由なく使えると思う。

 

っていうかそんな大したソースじゃないのでgithubで解析するのが一番かも。

 

で、password_changeはこんな感じで動いた。

 

ユーザ管理関連ってログイン、ログアウト、パスワード変更、パスワードリセットとありふれた感じで

DRY原則に則るならば、ビルトインも使えこなせるようにならないと!と思いました。

Djangoでpjax!

今話題(?)のpjaxをdjangoで使ってみることにした。

 

百聞は一見に如かずということで、まずはソースから

load staticfilesと{% static ‘jquery.pjax.js’ %}で静的ファイルを読み込んでます。

 

静的ファイルの設定はsetting.pyの

STATICFILES_DIRSに対象ディレクトリを

“C:/Users/admin/python/django/taskapp/static”

みたいな感じで設定してあげればOK。

 

これでstatic で読み込んだ時に自動的に対象パスを検索してくれます。

 

そんで肝心のpjaxはベースとなるテンプレートファイルにJSで

みたいに書いてあげればOK。

 

これを継承しているテンプレート全てにpjaxが適用されるみたいな。

 

凄い楽ちんなのに高速画面遷移でテンション上がりました。

Djangoのユーザモデル

DjangoにはデフォルトでUserモデルなるものが存在します。

admin画面作ってログインしたときにAuthのところのUsersっていうモデルがそれ。

もちろん最初に作成するadminユーザもUserモデル。

 

Userモデルは以下のURLで説明があります。例のごとく英語…。

https://docs.djangoproject.com/en/dev/topics/auth/

https://docs.djangoproject.com/en/dev/topics/auth/default/

 

まずはsettings.pyのINSTALLED_APPSに

django.contrib.auth
django.contrib.contenttypes

が記述されていることを確認。

記述されていないorコメントアウトされていたら、

設定後にpython manage.py syncdb

 

その後は、自由にユーザモデルを作成したり、ログインしたり。

 

1. ユーザの作成(views.py)

 

is_staffはアドミンサイトにログインできるかどうかを判別(true=ログイン可能)

 

2.ユーザログイン(views.py)

 

ログイン後は、 request.user.is_authenticated()がtrueかfalseかで認証状況を判別して

request.userコンテキストの情報をうまく使ってアプリを作っていく感じ。

 

あとは作成したモデルにユーザ情報をひもづける場合は例のごとく

のように、ForegnKey設定してあげればOK

djangoでsqlite3からpostgreSQLに移行してみた。

sqlite3は非常に手軽に扱えてGoodなんだけど、

外部キー制約をadd constraint で追加できなかったり

コマンド上でカラムを一気に複数作れなかったり、

drop columnもこんな感じで結構面倒。

 

軽さ故に痒いところに手が届かない感じでハマりまくった。

 

基本機能としてrailsのマイグレーションみたいなのをサポートしていないdjangoは

Southとかのツールを利用しないとなるとテーブルを直接触らないといけないので

sqlite3ではちょっと学習効率も開発効率も悪いなーと思ったので

postgreSQLに乗り換えてみた。

 

pythonのpostgreSQLドライバとしてはpsycopg2が有名なんだけど

windows だとpip install psycopg2 ってやると

vcvarsall.batが無いとか言われて、

この為だけにVC++2010をインストールしたけど

それでもうまく動かず…。

 

psycopg2のWebサイトに行ったらwindows用のインストーラがあるとかいう

何という灯台下暗し!

 

しかるべきバージョンのインストーラをダウンロードし、exeクリックで余裕でインストール!

あとはdjangoのsettings.pyを

ってやって “python manage.py syncdb”でOK。

 

ちなみにNAMEに指定したデータベースはsyncdbしても自動的に作成されないので

ちゃんとpsqlからテーブル作成してあげないとダメ。

 

sqlite3だとデータベースという概念を意識せずに色々できちゃってたのでプチハマりしました。

Python初心者がDjangoチュートリアルを触ってみる(Part 4)

今回はフォーム画面の作成。

チュートリアルだとvoteだけだったので、Pollの新規作成画面も作成してみた。

チュートリアルとの差分はurls.py, newpoll.html, index.htmlあたり。

 

polls/urls.py

 

polls/views.py

 

polls/templates/polls/detail.html

 

polls/templates/polls/index.html

 

polls/templates/polls/results.html

 

 polls/templates/polls/newpoll.html

Older posts Newer posts

© 2018 freedom-man.com

Theme by Anders NorenUp ↑