旅好きエンジニアのメモ

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

djnagoのORMでinを書く方法

例えば為替のレートを検索するときで
ユーロとオーストラリア・ドルだけ抽出したいときは以下のように書きます。

ExchangeRate.objects.all().values().filter(currency_code__in=["EUR","AUD"])

filterのなかで"__in="を書いて、その中でリスト型で書くだけですね。

pythonでオブジェクトの中身を知りたい時

pythonでオブジェクトの中身を知りたい時

pythonってrubyに比べて便利なメソッドとか無かったりするんですよね。

特に最近思ったのはオブジェクトの中身を確認する方法。

rubyだと便利なのは一杯あるんですよね。

 

qiita.com

 

個人的にpythonだと

dir("調べたいもの")

一択ですね。

 

以下のような方法もありますがなにせ長いので使いにくいですw

print type(obj)
for x in inspect.getmembers(obj, inspect.ismethod):
  print x[0]

Djangoでデータ登録しようとした時character with byte sequence 0xe3 0x83 0x95 in encoding "UTF8" has no equivalent in encoding "LATIN1"なエラーが出ちゃった時

Djangoで日本語のデータを登録しようとした時、以下のようなエラーが出ました。

character with byte sequence 0xe3 0x83 0x95 in encoding "UTF8" has no equivalent in encoding "LATIN1"

 

これは自分がPostgreSQL使っていて起きた問題です。
PostgreSQLに原因があります。

まぁ、簡単に言うと現在使っている文字のエンコードが違うよーってはなし。
なのでDBを作成するときはエンコードをUTF8で作成しましょう。

Djangoとnginxでstaticファイルが当たらないとき

普段nginxの設定をしない自分からすればめっちゃ詰まりました。。。

nginx,uwsgi,djangoを使ってサイトを公開しようとしました。

すると、おっ独自ドメインでサイト見れるぞ!っとここまでは良かったんですが、
あれcss当たってない。。。。
と言うかstaticファイル読み込んでなくね。。。

となったわけです。

chromeの開発者ツールで見てみると
403エラーと出ているわけです。

ふむふむ、だいたいこれは権限関係のことだなっと。
まぁ、本当はというか、絶対良くないけど、アプリ配下の権限777のしちゃえば良くない?と思って変えたわけです。

しかし、直らない。。。

そして
ps aux | grep nginx
でようやく真相をするわけです。

あっ、nginx起動しているユーザー "www-data" みたいなやつだ。

自分のアプリのユーザーと違う。。。

まぁ、そこでnginxの起動ユーザー名を変えたら直りました。

つまりは

myprojectのユーザーが hogeなら

/etc/nginx/nginx.conf
一番上らへんにある

user www-data;

user hoge;

に変えてあげんと駄目だったんです。

django製CMS mezzanineをインストールしてみよう

みなさんはCMSと聞いて何を思いつくでしょうか?
そうです、wordpressですね。

テンプレートの種類もプラグインも豊富ですし簡単にブログやサイト構築ができて非常に便利です。

でも、phpですよ!php!
えぇ、私はphpができないんですね。
じゃあ勉強してやればいいじゃんって話なんですが、RubyPythonやっててまた、LL言語っていうのもねぇ。

次やるならgoやりたいんです。

ということで自分の中ではwordpressじゃないpython製のcms探せばいいんじゃない?
っということで探しました。

それが"mezzanine"です。
ちなみに"django cms"とかpython製のcmsは他にもありますが"mezzanine"はwordpressのような感じです。

インストールは簡単でpython使っている人なら
pip install mezzanineで入れることができます。

なお、mezzanineはdjangoを使っているので、djangoのバージョンが変わらないようにvirtual envとか使ってやるのがベターです。

installできたら
後はdjangoと同様の操作でいけます。

cms自体の管理画面をいじくりたかったら直接mezzanineファイルをいじりましょう。

以下はプロジェクト作成からサーバー起動までです。
もうほとんどdjangoですね。。。

プロジェクト作成
$ mezzanine-project myproject

DB作成
$ cd myproject
$ python manage.py createdb

サーバー起動
$ python manage.py runserver

http://localhost:8000
上のurlで確認


ちなみにmezzanineのメリットを言っておくと

wordpressより高い拡張性とはじめからwordpressで入れないと行けないようなプラグインが入っているので
サイト構築により気を使わなくて良い点です。

pythonの仮想環境 virtualenv の使い方

pythonの仮想環境 virtualenv の使い方

好きな名前をつける

 

virtualenv "仮想環境名称"

これで仮想環境を作ります

 

次に以下のコマンドで仮想環境を起動します

cd "仮想環境名称"
source bin/activate

 

はじめはpython2の環境なのでpython3にしたい人は自分で設定しましょう。