django

Djangoのセッション管理について 2

昨日みたとおり、djangoのセッション管理はcookieを利用して行われます。 cookieを使えない状況には対応してません。 Django のセッションフレームワークは完全なクッキーベースであり、クッキー以外 の情報を扱いません。従って、 PHP のように URL にセッ…

Djangoのセッション管理について

普段django使ってアプリ開発とかしてるわけですが、実は中身がどうなってるのかあまり知らずに使ってます。 今日はなんとなくセッション管理について調べてみました。 セッションを使うには? セッションを有効にする方法 MIDDLEWARE_CLASSESに、 'django.co…

Djangoでrailsのrake routesみたいな機能

初めてdjango触ったとき、railsでいうrake routesってないのかなと思った記憶があります。最近はある程度djangoに慣れたせいかあまり思いませんが、あってもいいと思うんですよね。新しいプロジェクトに参画したときとか、リポジトリが大きくてurls.pyがアプ…

複数のdb設定を持つdjangoアプリのテストはmulti_db=Trueを指定する

以前、djangoで複数DBを扱う場合についてエントリを書きました。 テストについて注意することがあったのでメモしておきます。複数dbを扱う場合は設定ファイルに以下の様に複数定義します。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite…

django-paginationでページング

djangoでページング用のライブラリというと、django-paginationがわりと使われるようですね。 http://www.djangopackages.com/grids/g/pagination/ 使ってみたので基本の使い方をメモまず設定ファイルです。以下を追加します。settings.py TEMPLATE_CONTEXT_…

djangoで日本語名のファイルアップロード時のエラー

djangoをnginx+gunicornで動かしている環境で日本語のファイル名のファイルをアップロードしたら、たまに見かけるUnicordEncodeErrorが発生 UnicodeEncodeError: 'ascii' codec can't encode characters in position 43-44: ordinal not in range(128) ググ…

Django 1.4でSeleniumを使ったwebページのテスト

Django1.4でLiveServerTestCaseが追加されました。 https://docs.djangoproject.com/en/dev/releases/1.4/#support-for-in-browser-testing-frameworks Seleniumを使ったブラウザテストを可能にするものです。 どんな感じが掴んでみようと簡単なサンプルを動…

django-social-authでエラー

だいぶ昔に作ったdjango-social-authを使ったサンプルアプリで久々にtwitterログインしようとしたら以下のようなエラーになった。 HTTPError at /complete/twitter/ HTTP Error 404: Not Foundtwitter側の仕様が変わったぽい。使用していたdjango-social-aut…

Django 1.4のタイムゾーン

Django 1.4からDateTimeFieldのタイムゾーンの扱いが変更されている https://docs.djangoproject.com/en/dev/releases/1.4/#support-for-time-zonesいくつか警告やエラーに遭遇したので、気がついた挙動をまとめてみる動かした環境は OSX 10.7.5、Python 2.7…

unittestでFileFieldを持つDjangoモデルのインスタンスを作成する

ユニットテストでFileFieldを持つモデルのインスタンスを作成する場合どう書くべきか こんなモデルがあるとして class UploadFile(models.Model): file = models.FileField(upload_to='file') 思いつくまま書いてたらいくつかエラーを出したのでメモしておく…

Django 1.4でbulk create

以前djangoでbulk insertするにはどうするかってエントリを書きましたが、django 1.4からbulk_createメソッドが用意されましたので、そちらの方法でも試してみました。 dbはmysqlでMySQL-pythonを使ってます。 こういうモデルの場合 from django.db import m…

djangoでsend_mailのテストをする

djangoではsend_mailで簡単にメール送信ができます。 以下はドキュメントにある最もシンプルな例です。 from django.core.mail import send_mail send_mail('Subject here', 'Here is the message.', 'from@example.com', ['to@example.com'], fail_silently…

manage.pyのコマンドをプログラム上から呼び出す

結局使わなかったけどせっかく調べたのでメモカスタムコマンドを作成して、python manage.py hoge みたいに呼び出すのをプログラム上から呼び出したい場合、以下のようにcall_command関数が使える from django.core.management import call_command call_com…

djangoのlogging設定でSMTPHandlerを使う例

djangoのデフォルトのLOGGING設定では、エラー時のメール送信用ハンドラとして、AdminEmailHandlerを使った"mail_admins"が用意されてます。ただAdminEmailHandlerだと、subjectが自由に設定できない?っぽかったので、SMTPHandlerを使ったハンドラを試して…

Djangoでdb接続情報を複数設定する

普通にdjangoプロジェクトを作成するとdb設定の初期値は以下のようになってます DATABASES = { 'default': { 'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': '', # Or path to database file if u…

DjangoでBulk Insert

cursorのexecutemanyでbulk insertになった mysql-pythonでしか試していないmodels.py from django.db import models class Book(models.Model): name = models.CharField(max_length=255) price = models.IntegerField() published = models.DateTimeField(…

Djangoのモデルに数値フィールドの範囲を定義する

models.IntegerFieldのvalidatorsにValidatorのインスタンスをリストで渡す 以下のモデルのModelFormは1以上、100以下の場合は正しい値として扱う class Person(models.Model): name = models.CharField(max_length=100) age = models.IntegerField(validato…

DjangoでImageFieldに画像が設定されていないことをテストする

ImageFieldに画像が設定されていないことをテストで確認したい場合はどうするか 以下の例の通り、画像を設定していないImageFieldはNoneではないので、TestCaseのassertIsNoneなどでは正しくテストできない >>> p = Person.objects.get(pk=1) >>> p.profile_…

DjangoでアップロードファイルをS3に置くときの設定メモ

適当にImageFieldを持つmodelを作るmodels.py class Image(models.Model): file = models.ImageField(upload_to='img/%Y%m%d') memo = models.CharField(max_length=255) S3に置くためにdjango-storagesを使う たぶん以下が最小限の設定settings.py DEFAULT_…

Djangoのunique_together制約のエラーメッセージをカスタマイズする

unique_error_messageをオーバーライドする class Foo(models.Model): driver = models.CharField(max_length=20) restaurant = models.CharField( max_length=30) age = models.IntegerField() class Meta: unique_together = (("driver", "restaurant"),) …

django-pistonで304を返す

django-pistonで返すレスポンスはpiston.utils.rcに定義されていて以下のような使い方をする。 def read(self, request, *args, **kwargs): if not self.has_model(): return rc.NOT_IMPLEMENTED pkfield = self.model._meta.pk.name if pkfield in kwargs: …

DjangoのテストクライアントにHTTPヘッダを設定する

djangoでPOSTやGETのテストするときに、HTTPヘッダを設定する方法のメモ パラメータとは別に**付きの辞書で渡す from django.test.client import Client c = Client() response = c.post( '/books/', {'title': 'Code Reading'}, **{'HTTP_AUTHORIZATION': '…

herokuでswigに依存したライブラリを使う

djangoアプリをherokuにアップしたときにこんなエラーがでました unable to execute swig: No such file or directory error: command 'swig' failed with exit status 1requirements.txtに書いてある、以下のライブラリをインストールするときにswigがない…

Django on herokuでsendgridを使ってメール送信する

昨日django-registrationを使ってユーザー登録するサンプルを作ってたんですが、メール送信の部分はgmailを使ってました。 今日はherokuにアップすることを考えて、herokuのアドオン sendgridを使ってメール送信を試してみました。 メール送信するアプリのリ…

django-registrationのメモ

djangoでユーザー登録するライブラリとしてはdjango-registrationが一番ポピュラーみたいなので、さわってみました。 とりあえず動かしてみたってだけなので、使ったことのある人にとってはこのエントリから得るものは多分ないです。 1. インストール pip in…

django-pistonでAPIにBasic認証をかける

昨日django-pistonで簡単なAPIを作る方法を試してみました。 今日はそのAPIにbasic認証をかけてみます。簡単です。 まず認証されるユーザーが必要です。django.contrib.auth.models.Userです。 なければpython manage.py createsuperuserで作りましょう。 続…

django-pistonでシンプルなAPIを作ってみる

最近django-tastypieをちょいちょい触っていたのですが、同じような目的のライブラリにdjango-pistonというのがあると知りました。このサイトによるとtastypieとpistonで人気を二分しているように見えます。 http://www.djangopackages.com/grids/g/rest/ 一…

Django+Kickstrap+Knockout.js+TastypieでTodoアプリ

最近さわっているdjango-tastypie、kickstrap、knockout.jsなどを使ってよくある感じのTodoアプリを作ってみました。 http://django-kickstrap-todo.herokuapp.com/ 削除や更新のたびにリストを取り直しているせいか動作がちょっともっさりしてます。 ソース…

djangoでkickstrapを使うサンプル

先日使ってみたkickstrapをdjangoと組み合わせて動かせるようにしてみました。 site_media以下にkickstrapのファイルを置いて、参照できるようにsettingsやhtmlの参照をちょっといじったくらいですが。あとkickstrap.lessに定義してあるカスタマイズ用の変数…

django-tastypie 0.9.12-alphaのSessionAuthenticationのサンプル

昨日試してみたSessionAuthenticationのサンプルを見た目をちょっとだけマシにしてherokuにupした。http://tastypie-sessionauth-sample.herokuapp.com/githubにもおいたhttps://github.com/yuhei0718/tastypie-sessionauth-sample このサンプルではjQueryを…