読者です 読者をやめる 読者になる 読者になる

AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

Django での static files の扱い方まとめ (追加)

Django

以前書いたPOST の中で避けてたw点、よい解決方法が見つかったのでメモ。

400.html, 500html などの動作確認を行いたいなーって思って。Django1.8.17で確認しました。


元POST : Django での static files の扱い方まとめ - AWS / PHP / Python ちょいメモ

ちなみに、開発サーバーでも、次の条件が揃うと、 {{ STATIC_URL }} が自動公開されなくなります。

settings.py : DEBUG="False" & ALLOWED_HOSTS = ['something'] のケース
settings.py : DEBUG="Ture" & runserver —nostaticオプション付 で起動
DEBUG="False"の時にも urls.py の設定で、static files を公開する方法もあり(ググってください)

DEBUG="False" の時に Static files を公開する簡単な方法:

$ python manage.py runserver --insecure

runserver に insecure オプションがあるんですね。

--insecure Allows serving static files even if DEBUG is False.

続きを読む

mod_wsgi は pip でも提供ありなのかぁ

Apache2.4 Ubuntu python

今回 Ubuntu 14.04 に PPA を使って Python 3.5.x を導入したところ、PPAには mod_wsgi がないことに気づき対応策を調べた。

結果 pip で mod_wsgi が提供されてるといううれしい事実を発見し、無事に環境構築完了。

Ubuntu 14.04 だと オフィシャルのリポジトリでは Python3.4 が提供されてます

手順

インストール by pip
  1. 次のパッケージが apt でインストールされてることを確認
    • apache2
    • apache2-dev (apxs : APache eXtenSion tool が インストール時に必要)
  2. pip3 でインストール
    • pip3 install mod_wsgi
続きを読む

Django で view から Form オブジェクトに値を渡す : kwargs活用

Django python

args, kwargs が良くわかってなかったので苦労した話。python2.7.x と Django1.8.xでの確認です。

Formオブジェクトに渡すときには

Formオブジェクトを生成するときに、GET パラメーターを渡したいと考えたが発端。あちこち参照して、一つに落ち着きました。

views.py:

class TestFormView(FormView):
    template_name = 'testform.html'
    form_class = TestForm
    success_url = reverse_lazy('index')

forms.py

class TestForm(forms.Form):
    name = forms.CharField(max_length=10)

    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)

kwargs で渡し、 pop で取得

これが一番だと思う。

views で こんな感じで渡して:

class TestFormView(FormView):

    def get_form_kwargs(self):
        kwargs = super(TagEditView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

Form で pop を使って受け取る:

class TestForm(forms.Form):

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(TestForm, self).__init__(*args, **kwargs)

この方法だと pop した段階で kwargs から対象の値が削除されるので、その後の親クラス呼ぶときなどに気を使わなくてもいい。

FormViewに用意されてる get_form_kwargs という名称からもよろしげじゃないですかね?

続きを読む

forms.Model と forms.ModelForm の 違いって

python Django

Django でアプリ作ってて、ふと気になったのでまとめてみた。ざっくり、こんな感じ?

機能 Model & Form ModelForm
validation 指示 Model & Form の両方で定義 Model で定義
フォーム上の項目 Form で定義 Model の定義から、ModelForm が自動決定 *対応表
フォームで表示する項目 Form で定義 ModelForm で定義
save メソッド Model.save() ModelForm.save() (Model.save() も使える)


DB の カラム以上のフィールドが不要なフォームでは、ModelForm を使うと断然コードが短く、簡潔になりますね。

ModelForm 利用時には、ModelForm の サブクラスに Meta クラスを作り、中に元になるModel (model = )や表示する項目 (fields =) に持たせることになります。Metaだけ持てば最低限OKになるので、Formの定義が超簡単!

また views.py の中でも、ModelForm が提供するものをメインで書けるようになり見通しがよくなります。


そもそものキッカケは、ManyToMany の 多対多 リレーションをはったModelに対するFormを上手く作る方法を知りたかったのです。Model & Form で頑張ってみたものの、ManyToMany になってるフィールドを上手く扱えず、ModelForm を利用した形で落ち着きました。なにが原因だったかは、また時間ができたら勉強しよう。

続きを読む

Mac に pythonz 入れる時の OPTION 設定

Mac python TIPS エラー

以前書いた pythonz on Mac の手順が、通用しないようだったので修正方法を探ってみました。

結果としては、pythonz で install する時にオプション設定をすることで解決しました。

MacOS ver 10.11.6 (OS X El Capitan)
/usr/local/opt/openssl 1.0.2j (by homebrew)
pythonz 2.0.1
導入する python 3.5.2
続きを読む