Django

DjangoCongress JP 2018に参加しました

DjangoCongress JP 2018にスタッフとして参加しました。 djangocongress.jp Djangoフレームワークのみをテーマとした100人以上の規模のイベントは、日本では初めてだったように思います。 半年前から準備してきたイベントですが、無事終了できてよかったです…

DjangoフレームワークとVue.js (Vuex)を使ってアプリケーションを作る

以前作成した DjangoフレームワークとVue.jsを使ってアプリケーションを作る - 偏った言語信者の垂れ流し の、Vuex対応版です。 よかったらGitHubでStarをつけてください! github.com controllerとしていた部分を、VuexのStoreに書き換え、Vueコンポーネン…

NGINX UnitでDjangoアプリケーションを動かしてみる

NGINX Unitは、NGINXの開発元が作ってるアプリケーションサーバー。 http://unit.nginx.org/ Pythonのアプリケーションも動かせるとのことなので、Djangoアプリで試してた。 試した環境は、Vagrant上でUbuntu 16.04 LTS、Python 3.6.2(deadsnakes PPA)、Djan…

Django REST FrameworkのフィールドでJSONを扱う

DjangoのモデルにTextFieldでJSON文字列を保存しておき、APIをDjango REST Frameworkで提供する例。 JSONデータを保存して、読み込み時にもJSON形式のまま提供したかった。 restframeworkのシリアライザのFieldクラスを継承し、JSONを扱うフィールドを定義し…

DjangoフレームワークとVue.jsを使ってアプリケーションを作る

DjangoフレームワークとVue.jsでアプリケーションを作る例として、テキストを編集保存するシンプルなノートアプリケーションを作ってみました。 github.com Djangoのサーバーサイドレンダリングを使いつつ、Vueを組み合わせる一例として参考になればよいかな…

モデルクラスを継承してメソッドを追加する(proxyを使う場合)

この記事は Django Advent Calendar 2017 の7日目の記事です。 Djangoのモデルクラスを継承した場合、Metaに特に指定が無ければ、マルチテーブル継承となり、migrateを実行すると2つのテーブルができます。 モデルを継承して単一のテーブルにする方法は2つあ…

Djangoフレームワーク組込みのドキュメントジェネレータ(django.contrib.admindocs)の紹介

この記事は Django Advent Calendar 2017 の6日目の記事です。 tell-kさんの記事 を読んでいて、「そういえばDjangoには組込みのドキュメントジェネレータがあるんで紹介しておこう」と思ったので書くことにしました。 タイトルの通り、 django.contrib.admi…

Hue meetupでDjangoの話をしてきました

Hadoop WebUIソフトウェアのHueのmeetupでDjangoの話をしてきました。 connpass.com HueはDjangoフレームワークで作られているのですが、どのように使われてるとか、拡張の仕方とかを紹介しました。 スライドは、slideshareにアップロードしています。 Djang…

Django1.10以降のDeferredAttributeとフィールドへのアクセス

Djangoのモデルクラスにフィールドやメソッドを定義しておいて、さらに属性値を代入していて、この値を取得するコードを書く場合。 メソッドのほうはgetattrでとればいいのだけど、同様にDjangoのフィールドのほうはget_fieldでフィールドを取得しないといけ…

7/15に北海道のオープンソースカンファレンスでDjangoの紹介をしてきました。

www.ospn.jp 聞きに来てくださった方はありがとうございました。 今年も北海道の人たちに会えたのでよかったです。また来年。 スライドとサンプルコード Djangoフレームワークの紹介 from Shinya Okano www.slideshare.net github.com

bpmappers 0.9

bpmappersのバージョン0.9を公開しました。 pypi.python.org リポジトリはbeproud organization以下にありますが、権限を頂いて引き続きメンテナンスしています。 以前のバージョンでは、django.utilsにあったSortedDictとMultiValueDictをコピーして使って…

django-ftpserver 0.5.0

django-ftpserverのバージョンを0.5.0に上げました。 pypi.python.org pyftpdlibのFileSystemにDjangoのStorageAPIをつなげる機能を追加してみました。 StorageAPIとつなげると、面白そうだなーというのは前から考えてたんですが、StorageAPI側の機能が足り…

Travis CIのmatrixでtoxを実行する

Djangoフレームワークに依存するPythonのモジュールを作っていると、複数のPythonバージョンと複数のDjangoバージョンでテストコードを実行する必要があります。 手元で実行する場合はtoxを使うのですが、CIツールでもテストを実行したいです。 Welcome to t…

Django 1.11がリリースされましたね

Djangoフレームワークの1.11がリリースされましたね。 Django 1.11 released | Weblog | Django 1.11はLTS(Long Term Support)バージョンです。メンテナンス期限はリリースから3年後までなので、2020年4月までになります。 1つ前のバージョン1.10のメンテナ…

オープンソースカンファレンス2016 HokkaidoというイベントでDjangoの紹介をしました

6/18に北海道のオープンソースカンファレンスでDjangoの紹介をしてきました。 www.ospn.jp 説明が急ぎ足になったり、デモが中途半端に終わってしまって申し訳ない感じですが、聞きに来てくださった方はありがとうございました。 いくつか面白いセミナーもあ…

DjangoのDeprecationWarningを確認する

Djangoフレームワークでは、APIが変更、廃止される場合には、次のバージョンですぐに変わってしまうのではなく、警告を上げた上で2つ先のバージョンで削除されることになっています。 Deprecation policy Pythonの組み込み例外であるDeprecationWarningを継…

cx_Oracleをマルチスレッドで使う

PythonでOracle Databaseに接続するには、cx_Oracleを使う。 マルチスレッド環境下でcx_Oracleを使う場合にハマったのでメモを残す。 Oracleのクライアントライブラリは、マルチスレッドで使う際には、OCI_THREADEDというモードで使わないといけないらしい。…

Djangoで複数のデータベースを使う際に、モデルごとに使われるデータベース名を取得する

Djangoで複数のデータベースを使う際に、データベースルーター(Database router)を設定すると、モデル毎にデータベースを切り替えたりできます。 Multiple databases | Django documentation | Django データベースルーターが設定されている場合に、アプリケ…

複数のレコードをまとめて更新する際にdjango-bulk-updateが便利

既存の複数のレコードをまとめて更新する際にdjango-bulk-updateというパッケージが便利だったので紹介します。 GitHub - aykut/django-bulk-update: Bulk update using one query over Django ORM 通常のDjangoのORMを使ったレコードの更新 Djangoで既存の…

Djangoのプロジェクトに管理コマンドを追加する

Djangoのmanage.pyは独自に管理コマンドを作成して追加できます。 ここでは、「myapp」という名前のDjangoアプリケーションに対し、「summation」という名前のコマンドを実装する例を紹介します。 myappはプロジェクトに作成済みで、INSTALLED_APPSに追加済…

Djangoのエントリポイントとアプリケーションの仕組み

PyCon mini Sapporo 2015で、「Djangoのエントリポイントとアプリケーションの仕組み」というタイトルで話しました。 資料はSlideshareに置いてます。 Djangoのエントリポイントとアプリケーションの仕組み

Djangoの管理コマンドを作る際にdjango-extensionsのcreate_commandコマンドを使う

Djangoのmanage.pyスクリプトのサブコマンド(管理コマンド、management command)を追加するには、Djangoアプリケーション内に「management/commands/コマンド名.py」のようにモジュールを作成しますが、頻繁に使うわけでもないので作法をよく忘れてしまって…

DjangoテンプレートのstaticタグとSTATIC_URLコンテキスト変数の使い分け

Djangoテンプレートで静的ファイルのパス指定時にdjango.contrib.staticfilesのstaticタグとSTATIC_URLのどちらを使うべきか、という質問があったので、少し調べました。この記事はDjango 1.8のドキュメントとコードを参考にしています。 結論としてはstatic…

Django 1.8で追加されたSecurityMiddlewareについて

Django1.8で増えた機能でSecurityMiddlewareというものがあります。 何ができるのか把握しておきたかったので調べていました。 django.middleware.security.SecurityMiddleware コードはこのあたり。 django/security.py at stable/1.8.x · django/django · …

Djangoのメッセージフレームワークのストレージについて

Djangoフレームワークには、利用者ごとに一度だけ表示するメッセージ(フラッシュメッセージ)を扱う機能(django.contrib.messages)が含まれています。 The messages framework | Django documentation | Django メッセージは、複数のリクエストをまたいで表示…

django-celeryを使わずにDjangoとCeleryを組み合わせて使う

DjangoとCeleryを組み合わせて使う際に、django-celeryのモデルのテーブルを作りたくなかったり、各種機能が不要でシンプルに動かしたかった。 Celery - Distributed Task Queue — Celery 5.3.0b2 documentation Celeryやdjango-celeryはドキュメントが少し…

Django1.7の管理サイトでアプリケーション名を変更する

Django1.6以前のバージョンでは、管理サイトで表示されるアプリケーション名を変更する方法は通常の使い方では提供されていませんでした。 変えたいのはこの「Myapp」という部分。 Django1.7ではアプリケーションごとの設定が抽象化、再利用可能な仕組みが導…

DjangoでDEBUG=Falseの際にSQLのログを出力する

Djangoでクエリのログを出力したい場合、ロギングの設定でdjango.db.backendsのロガーを設定すればできます。 ただし、これはsettings.DEBUG=Trueのときにしか出力されないようになっています。 これはドキュメントにも書かれています。 ロギング — Django 1…

Djangoでprefetch_relatedを使ってクエリ数を減らす

prefetch_relatedはDjango 1.4で追加された機能です。 親子関係を表すモデル(多対多になってるものなど)をツリー状に表示する場合、ループ内でクエリを実行しってしまうと、クエリ数が多くて極端に遅くなります(特に2段目とか3段目)。 prefetch_relatedを使…

Django 1.5.3以降で変更されたセッションのシリアライズについて

Djangoのセッションデータは、settings.SESSION_ENGINEで指定されたクラスによって保存されます。 Django 1.5.3より前のバージョンでは、セッションデータのオブジェクトをシリアライズ、デシリアライズする処理は、ここで指定されるバックエンドクラスに任…