Narito Takizawa 札幌在住の、Webエンジニア。Python/Djangoでのバックエンド開発や講師業をしています。 趣味はピアノとギター 著書 Github toritoritorina@gmail.com
Django の Signal って使う頻度が少ないので、使うときにだいたい忘れてませんか? 奇遇ですね、自分もです。 今回は そんな Signal についてまとめてみました。 シグナルとは何らかのイベントが発火したタイミングで登録した処理(以下ハンドラという)を呼び出す機能です。 info執筆時での最新バージョンを使います。Python 3.6Django: 2.0Sqlite3Eventsハンドラを定義していませんが、あえて先に説明します。 シグナルは用途によって配置されているモジュールが異なるので、モジュールパスも一応書いておきます。 (バージョンによって変わる可能性はあります) 名前説明モジュールパスpre_save(対象)モデルに対するレコードの 追加 or 変更 をする 直前django.db.models.signals.pre_savepost_save(対象)モデルに対す
モデル同士を紐づけるときに、ForeignKeyやOneToOneFieldを使いますが、その際、バージョン2からは引数としてon_deleteを指定することが必須となりました。 指定しないとTypeError: init() missing 1 required positional argument: 'on_delete'というエラーメッセージが出てしまいます。 on_deleteの意味 on_deleteとは、参照するオブジェクトが削除されたときに、それと紐づけられたオブジェクトも一緒に削除するのか、それともそのオブジェクトは残しておくのかを設定するものです。 実際の使用例 例えば、こんなモデル設計があったとします。ForeinKeyを使用して、Storyオブジェクト(小説)はAuthorオブジェクト(作者)を参照しています。 models.py from django.db im
たとえばこんなフォームのテストをしたいとき from django import forms class HogeForm(forms.Form): name = forms.CharField(max_length=100) image = forms.ImageField(upload_to='images/') テスト用のダミー画像を用意するのもいいが、ダミー画像なしでテストする方法として、PILとSimpleUploadedFileを使ってアップロードされた画像ファイルっぽいものを作ってテストできる。 gistff7336608fca2c889955 使い方 from django.test import TestCase from your_app_name.forms import HogeForm from inmemory_image_generator import ge
POSTで画像アップロードがあるフォームのテストを書く方法を調べる機会があったのでメモしておく from django.test import TestCase class UploadTest(TestCase): def test_upload(self): with open('test.jpg') as f: res = self.client.post('images/upload/', {'title': 'test_image', 'image': f}) self.failUnlessEqual(res.status_code, 200) このように、ファイルハンドラをそのままpostにdataとして渡すことでうまくいきました。 ついでにちょっとpostメソッドの中身を見てみると、content_typeはデフォルトでmultipartなのがわかります def post(s
SQLのSELECT文をDjangoのQuerySet APIで書いてみた時のメモを残しておきます。 2015/9/6 追記 id:kkotyy さんのコメントを受けて、本文中の.values()は省略しました。 参考:QuerySet API reference | Django documentation | Django なお、GitHubのコードはそのままにしてあります。実行結果はモデルオブジェクトよりも辞書のリストのほうが確認しやすいかなと考えているためです。 2015/9/6 追記ここまで 目次 環境 今回使用するModel fixtureによるデータの投入 SQL SELECT句 全列抽出 指定列抽出 WHERE句 通常 NOT AND OR 演算子 ORDER BY句 昇順 降順 GROUP BY句 全体の集約 行の集約 LIMIT句 LIMITのみ OFFSET付 Pyt
Django ORM の QuerySet には、select_related および prefetch_related というメソッドがありますが、イマイチ使い勝手がよく分からなかったりします。 公式ドキュメントにはこう書いてありますが、 select_related works by creating an SQL join and including the fields of the related object in the SELECT statement. For this reason, select_related gets the related objects in the same database query. However, to avoid the much larger result set that would result from joining a
models.pyで、ForeignKeyやManyToManyFieldと一緒に使う related_name の使い方についてです。 related_nameは、ForeignKeyを使ってリレーションを張った時に、逆参照するときに使います。 related_nameを使う前にまずは、ForeignKeyの基本的な使い方です。 models.py class Author(models.Model): name = models.TextField(max_length=30 ) def __str__(self): return self.name class Book(models.Model): title = models.TextField(max_length=60) author = models.ForeignKey(Author, on_delete=models.C
はじめに Djangoで文字コードがutf8mb4のMySQLデータベースを利用するためのメモです。 絵文字を含むデータを使うために文字コードがutf8mb4のデータベースを作成したのですが、クライアント側の文字コード設定を忘れてしまい、レコード追加時に下記のエラーが発生してしまったので設定方法をまとめました。 django.db.utils.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8C\\xBF\\x0Ai...' for column 'message' at row 1") 環境 CentOS 7.4 Python 3.6.3 Django 1.11.5 MySQL 5.7.20 PyMYSQL 0.7.11 方法 MySQL接続に必要なパッケージのインストール Python実装のMySQLクライアント
今回は Django で rest な API を実装するのに超絶便利な Django REST framework を紹介します。 その名の通り、Django で RESTful な API を作るための framework になります。 APIの開発効率が何倍にも上がる代物ですので、ぜひみなさまにも使っていただきたいと思っています。 はじめに 簡単なAPIを作ってみる Serializer を定義する Articleを全件取得する API を作ってみよう API 経由でArticleを作成してみよう Serializer の機能いろいろ 特定のフィールドは出力したくない 外部キー参照先はキー値じゃなくてオブジェクトとして取得したい 外部キー参照先も同時に作成したい まとめ はじめに 前回作成した racchai プロジェクトをベースに進めていきます。 racchai.hatenablo
このあいだ自分がプライベートで運営している動画サイトにAPIが欲しかったので、django-rest-frameworkを使ってみました。日本語の資料が少なかったので、布教目的でここに置いておきます。 欲しかった機能はこんな感じ。 モデルデータのCRUD モデルの特定フィールドの検索 多対多(ManyToMany)でよろしくやる 登録ユーザのみ許可する認証処理 pythonスクリプトからAPIを使う(おまけ) 可能なのかどうか半信半疑で使ってみましたが、チュートリアルに全部書いてあったので参考になれば。 今回はTutorial 1: Serialization(version 3系)の超意訳です。 第01回「シリアライズ」(今ココ) 第02回「リクエストとレスポンス」 第03回「クラスベースのビュー」 第04回「認証と許可」 第05回「リレーションシップとハイパーリンクAPI」 第06回「
Oauth認証した際に、プロフィール画像を保存させる。 はじめに python-social-authでOauth認証した際に、プロフィール画像を保存したかったのでpipelineを追加してみました。 環境 requirements.txt Django==1.5.12 python-social-auth==0.2.13 まず画像を扱えるようにする ImageFieldを扱えるように models.ImageFiledを利用して画像を保存したいので、まずはその準備。 モデルフィールドリファレンス — Django 1.4 documentationによると、 Python Imaging Libraryが必要らしい。 pipでインストールする場合は、 $ pip install Pillow MEDIA_ROOTとか settings.py import os # ./ BASE_DIR
かなり更新をサボってしまっていました。2018/05/19に開催されたDjangoCongressにスピーカとして参加してきましたので参加記録をまとめておきます。 発表内容 いまさら振り返る Django Migrationという内容でmanage.py migrateやmanage.py makemigrationsのソースを追っかけたりする内容でした。 speakerdeck.com 45分で資料が90枚あって余裕がないと思いきや、急ぎすぎて7分あまるとか色々と後悔する部分はありますがいい経験ができたと思います。 もともとこの内容は自分が雰囲気でマイグレーションをやっていたのでちゃんと中身を知りたいなと思ったのがきっかけで、CfPを出した時点ではまだソースをちゃんと読み込んではいませんでした。CfPの倍率も3-4倍と聞いていたので、さすがに通らないだろうと高を括っていたらまさかの採用、
追記: 翔泳社さんからDjangoの書籍を出版するのでぜひ読んでみてください。 実践Django Pythonによる本格Webアプリケーション開発 作者:芝田 将翔泳社Amazon この資料は DjangoCongress JP 2018で話した「Djangoにおける認証処理実装パターン」 の解説記事になります。 2019/04/08 追記: GithubのコードはPython3.7 Django2.2にupdateしています) 何年か前に Djangoのユーザー認証まとめ という記事を書きました。今でもコンスタントに100PV/dayくらいアクセスのある記事なのですが内容が古く、実装時にハマりやすい注意点にもあまり触れることができておらず、おすすめできる資料ではありません。今回はDjangoCongress JPにて発表の機会をいただけたのですが、この機会に認証処理についてまとめ直すと同
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く