2015年3月31日火曜日

Djangoで、データベースデータの一括削除

Djangoで、データベースデータの一括削除です。flushコマンドを利用すると、手間いらずです。初期化して、シードデータを投入する際などに便利に使えます。データベースのテーブル構造はそのままに、データだけ削除してくれます。

$ python manage.py help flush

$ python manage.py flush --database=default

参考サイト
Remove all data from every table (but keep the tables themselves) (Stack Overflow)

2015年3月30日月曜日

Pythonで、substring

Pythonで、substringです。独特の使い方ですよね。

str = "Hello World"

substr = str[2:]
print substr

substr = str[:2]
print substr

substr = str[-2:]
print substr

substr = str[:-2]
print substr

参考サイト
Is there a way to substring a string in Python?(Stack Overflow)

2015年3月29日日曜日

CakePHP 3.0がリリース

CakePHP 3.0がリリースされました。ORMが新しくなったとのこと。PHP5.4.16以上が必要です。日本では人気がありますので、勉強しておいて損はないでしょう。



参考サイト
「CakePHP 3.0」リリース、ORMを刷新(SourceForge.JP Magazine)

2015年3月28日土曜日

Djangoで、ページ送り「django-endless-pagination」

Djangoで、ページ送りの「django-endless-pagination」を設定してみました。非常に簡単に設定できます。便利で良いのですが、モデルのデータを全て読み込んでいるらしく(?)、パフォーマンスはどうなのかなと思いました。設定が間違っている可能性も高いですが(笑)。

pip でインストール。
pip install django-endless-pagination
settings.py
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS += (
  'django.core.context_processors.request',
)

INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sites',
  'endless_pagination',
)
/templates/item/index.html
{% load endless %}

{% paginate items %}
{% for item in items %}
    {{ item.name }}
    {{ item.price }}
{% endfor %}
{% show_pages %}



参考サイト
Django Endless Pagination 2.0 documentation

2015年3月27日金曜日

Djangoで、Avg, Max, Min, Countなどの集約関数

Djangoで、Avg, Max, Min, Countなどの集約関数です。DBモデルをインポートする必要があるところが、Djangoらしい。

from django.db.models import Avg, Max, Min, Count

item = Item.objects.aggregate(num_avg=Avg('price'), num_max=Max('price'), num_min=Min('price'), num_count=Count('id'))

print item["num_avg"]
print item["num_max"]
print item["num_min"]
print item["num_count"]

参考サイト
集約(Aggregation) (Django documentation)
Aggregation(Django documentation)

2015年3月26日木曜日

jQueryで、ul(Unordered List)に要素li(List Item)を追加

jQueryで、ul(Unordered List)に要素li(List Item)を追加です。すぐに利用できる、実践的な例かなと思います。

<div id="element">
  <ul class="tabs">
    <li><a href="/news/1">News Title1</a></li>
    <li><a href="/news/2">News Title2</a></li>
  </ul>
</div>

$("#element ul").append('<li><a href="/news/3">News Title3</a></li>');

参考サイト
jQuery: how to add <li> in an existing <ul>?(Stack Overflow)

2015年3月25日水曜日

Djangoで、Ajaxリクエストの判定

Djangoで、Ajaxリクエストの判定です。

GETかPOSTかの判定
if request.method == 'GET':
  do_something()
elif request.method == 'POST':
  do_something_else()

Ajaxか否かの判定
if request.is_ajax():
  message = "ajaxリクエストです。"
else:
  message = "ajaxリクエストではありません。"

参考サイト
Djangoのis_ajaxメソッドを使ってリクエストがAjaxかどうかを判定する(18th Technoteさん)
Request and response objects(Django documentation)

2015年3月24日火曜日

Djangoで、404エラー

Djangoで、404エラーです。

from django.http import HttpResponse, Http404
from django.views.generic import View

class MyView(View):

  def get(self, request, *args, **kwargs):
    if not param:
      raise Http404

    return HttpResponse('こんにちは、世界。')

参考サイト
Redirecting to a 404 page in Django(Pressing the Red Button)
Writing views(Django documentation)

2015年3月23日月曜日

Pythonで、dictionaryにキーが存在するか否かのチェック

Pythonで、dictionaryにキーが存在するか否かのチェックです。

if 'key' in dict:
  print "yes"
else:
  print "no"

if dict.has_key('key'):
  print "yes"
else:
  print "no"

参考サイト
キーの確認(in演算子, has_keyメソッド)(Python入門さん)
ディクショナリ操作 dict(Python Snippetsさん)

2015年3月22日日曜日

OSに依存しないソフトウェアプラットフォーム「Mono」

OSに依存しないソフトウェアプラットフォーム「Mono」 Linux上に、ASP.NET環境を構築できるもの。興味をそそられたので、メモ。Linux上で、ウェブアプリなどを開発することができる「MonoDevelop」も用意されています。一度、試してみたい気分。



参考サイト
.NET FrameworkをUNIXで動かす「Mono Project」
Mono×LinuxでASP.NET MVCを動かすまで(@IT)

2015年3月21日土曜日

Djangoで、キャッシュ

Djangoで、キャッシュです。今回は、データベースにキャッシュする方法で設定してみました。

1. キャッシュ用テーブル作成
$ python manage.py createcachetable table_name

2. settings.pyに設定を記述
CACHES = {
  'default': {
    'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
    'LOCATION': 'table_name',
    'TIMEOUT': 60*60*1,
  }
}

3. viewでキャッシュの設定、読み込み
# キャッシュの設定
cache.set(cache_name, data, 60*10)

# キャッシュの読み込み
cache_name = cache.get(cache_name)

参考サイト
Django のキャッシュフレームワーク(Django documentation)
Caching(The Django Book)

2015年3月20日金曜日

2015年3月19日木曜日

PythonでユニークIDの生成

PythonでユニークIDの生成です。

import uuid

# ランダム
print uuid.uuid4()

# 名前空間UUIDとMD5ハッシュ
print uuid.uuid3(uuid.NAMESPACE_DNS, 'python')

# 名前空間UUIDとSHA-1ハッシュ
print uuid.uuid5(uuid.NAMESPACE_DNS, 'python')

参考サイト
How can I generate a unique ID in Python?(Stack Overflow)
uuid — RFC 4122 に準拠した UUID オブジェクト(Python documentation)

2015年3月18日水曜日

Djangoで、settings.pyデータの読み込み

Djangoで、settings.pyデータの読み込みです。サイト固有のデフォルト設定を共通化することが可能です。

from django.conf import settings

settings.TIME_ZONE

参考サイト
Using settings in Python code(Django documentation)

2015年3月17日火曜日

Djangoのテンプレートでカスタムフィルタ

Djangoのテンプレートでカスタムフィルタです。

templatetags ディレクトリを作成し、modelsやviewsと同じ階層に配置。
中身が空の __init__.py ファイルを作成。
polls/
  models.py
  templatetags/
    __init__.py
    app_filters.py
  views.py
/polls/templatetags/app_filters.py(フィルター処理)
from django import template

register = template.Library()

@register.filter(name='get_due_date_string')
def get_due_date_string(value):
    delta = value - date.today()

    if delta.days == 0:
        return "Today!"
    elif delta.days < 1:
        return "%s %s ago!" % (abs(delta.days),
            ("day" if abs(delta.days) == 1 else "days"))
    elif delta.days == 1:
        return "Tomorrow"
    elif delta.days > 1:
        return "In %s days" % delta.days
/templates/polls/index.html(テンプレートでの利用)
{% load app_filters %}
{{ poll.created_at|get_due_date_string }}

サイト全体で利用したいと思い、最初 /templatetags/app_filters.py に配置してしまい、しばらく悩みました。/polls/templatetags/app_filters.py のように、models 配下に作成するのがコツかなと思います。これで問題なく動くようになりました。


参考サイト
テンプレートタグやフィルタを自作する(Django documentation)
Django Tutorial: Making Your Own Template Filters(Paul Finn's Blog)

2015年3月16日月曜日

Windows環境で、npmパッケージをインストールする際のエラーの対処

Windows環境で、npmパッケージをインストールする際のエラーの対処です。npm install にオプションの--no-bin-linksを追加すると、うまくいきました。Windowsにシンボリックリンクは、相性が悪いんですよね? よくわからないですが、結果オーライです。

$ node -v
$ npm cache clean
$ npm set registry https://registry.npmjs.org/
$ npm install --no-bin-links

参考サイト
Npm errors when installing packages on windows share(Ask Ubuntu)

2015年3月15日日曜日

Perl、Ruby、PHPなどを利用して、Android, iPhoneなどのスマホにリアルタイム通知を送信できる「Pushover」

Perl、Ruby、PHPなどを利用して、Android, iPhoneなどのスマホにリアルタイム通知を送信できる「Pushover」 ソースを見る限り、非常に簡単に実現できそうに見えます。コレは、要チェックでしょう。

2015年3月14日土曜日

コンポーネントに別れたPHPフレームワーク「Webiny Framework」

コンポーネントに別れたPHPフレームワーク「Webiny Framework」 確かに、RESTfulなAPIを提供するのに巨大なフレームワークは必要ありませんから、必要なところだけを良いとこどりするという考えは、今後、広まるように思います。PHP 5.5以上が必要という、挑戦的な構成になっています。



参考サイト
Exploring the Webiny Framework: The StdLib Component(SitePoint)

2015年3月13日金曜日

Django Debug Toolbarを設定

Django Debug Toolbarを設定してみました。これ、最高に便利です。SQLの内容や、読み込んでいるモジュール、静的ファイルなどを細かく確認できます。デバックに必要な情報は、ほぼ網羅されていると言って良いのではないでしょうか。

settings.py
# サーバーのIPを設定
INTERNAL_IPS = ('192.168.33.10')

INSTALLED_APPS = (
    # ...
    'django.contrib.staticfiles',
    # ...
    'debug_toolbar',
)

STATIC_URL = '/static/'

MIDDLEWARE_CLASSES = (
    # ...
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    # ...
)

2015年3月12日木曜日

Djangoテンプレートで、ループインデックスの数字を利用して、割り切れる場合の処理

Djangoテンプレートで、ループインデックスの数字を利用して、割り切れる場合の処理です。リープの途中で定期的に処理をはさみたい時に利用するアレです。説明が下手くそですね(笑)。フィルターの「divisibleby」を利用すると、簡単に実現できます。利用する場面は、結構多いと思います。

ループカウンターが3で割り切れる場合に、処理を挟む例です。
{% for item in items %}
  {% if forloop.counter|divisibleby:"3" %}
  
  {% endif %}
{% endfor %}

参考サイト
divisibleby(Django documentation)

2015年3月11日水曜日

Djangoフレームワークのサンプルソース集「Djangosnippets」

Djangoフレームワークのサンプルソース集「Djangosnippets」 勉強になるソースコードが多数登録されています。カテゴリ分けされているので、目的のソースも探しやすくなっています。DjangoやPythonの奥深さを覗きこみたい方、是非どうぞ。とにかく素晴らしいのです。

2015年3月10日火曜日

Python+DjangoのIDE開発環境「PyCharm」

Python+DjangoのIDE開発環境「PyCharm」 有料ですが、1ヶ月間は無料で試用できます。まだ批評できるほど使ってはいないのですが、Python+Djangoの組み合わせでは、有名どころらしい(?)ので、しばらく使ってみる予定です。

2015年3月9日月曜日

複数行の文字列一括置換Windowsソフト「GrepReplace」

複数行の文字列一括置換Windowsソフト「GrepReplace」 昔からお世話になっていて、再びインストールする必要が生じたので、メモ。コレが良いんです。実にしっくりきてしまいます(笑)。ちなみに、「Program Files 以下にインストールしないでください。」とありますので、ご注意を。

2015年3月8日日曜日

Pythonアプリをデプロイできるクラウド「PythonAnywhere」

Pythonアプリをデプロイできるクラウド「PythonAnywhere」 無料でもインスタンスを1つ利用できますが、sshが利用できないなど、若干の制約あり。しかし、全てウェブのGUIで操作できます。Pythonのバージョンも、3.4、3.3、2.7、2.6と、各種用意されています。スケジュールタスクも設定可能。構成がシンプルなので、すぐに使いこなせると思います。

2015年3月7日土曜日

Ubuntuで、デフォルトのエディタを vi に変更

Ubuntuで、デフォルトのエディタを vi に変更です。いつも、デフォルトで設定されている nano が起動されて、しっちゃかめっちゃかになるので、変更しました。忘れないようにメモです。

# update-alternatives --config editor

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode

2015年3月6日金曜日

Virtualenvwrapperのインストール

Virtualenvwrapperのインストールです。virtualenvwrapperは、virtualenvの拡張セットです。 依存関係で競合することなく、複数のプロジェクトで作業を分けて行える仮想環境を作成することができます。 何もわかってないので、一歩一歩です(笑)。

# インストール
$ pip install virtualenvwrapper

# 仮想環境作成
$ mkvirtualenv (virtualenv name)

# 仮想環境起動
$ workon (virtualenv name)

# 停止
$ deactivate

# 仮想環境削除
$ rmvirtualenv (virtualenv name)

参考サイト
Virtualenvwrapperの導入(Qiita)

2015年3月5日木曜日

複数のプロセスからなるウェブアプリをProcfileで管理できる「Foreman」

複数のプロセスからなるウェブアプリをProcfileで管理できる「Foreman」 いまいちよくわからないのですが、とりあえず、Heroku用に準備したProcfileをローカル環境で動かして試すことができます。

Procfile
web: gunicorn hellodjango.wsgi --log-file -
$ foreman start


参考サイト
ddollar/foreman(github)
Declare process types with Procfile(Heroku Dev Center)

2015年3月4日水曜日

Djangoのバージョンを指定してインストール

Djangoのバージョンを指定してインストールです。現在は、Django 1.7になっていますが、前のバージョンのもの(1.6など)を利用したい場合に使えます。

$ virtualenv -p /usr/bin/python2.7 venv

$ source venv/bin/activate

$ python --version
Python 2.7.6

$ pip install Django==1.6.8

$ python -c "import django; print(django.get_version())"
1.6.8

$ deactivate
参考サイト
how to downgrade from Django 1.7 to Django 1.6(Stack Overflow)

2015年3月3日火曜日

virtualenvを利用して、Python 3.4、Django-1.7.5をインストール

virtualenvを利用して、Python 3.4、Django-1.7.5をインストールです。前回、Djangoを勉強してから、時間が空きました。だいぶ忘れているので、またちょっと勉強です(笑)。

$ python --version
Python 2.7.6

$ virtualenv -p /usr/bin/python3.4 venv
Running virtualenv with interpreter /usr/bin/python3.4
Using base prefix '/usr'
New python executable in venv/bin/python3.4
Also creating executable in venv/bin/python
Installing setuptools, pip...done.

$ source venv/bin/activate
$ python --version
Python 3.4.0

$ pip install Django
Downloading/unpacking Django
Downloading Django-1.7.5-py2.py3-none-any.whl (7.4MB): 7.4MB downloaded
Installing collected packages: Django
Successfully installed Django
Cleaning up...

$ python -c "import django; print(django.get_version())"
1.7.5

参考サイト
Installing an official release with pip(Django documentation)
Install django1.7 with Python 3.4 using virtualenv(Stack Overflow)

2015年3月2日月曜日

Meteor 一区切り、プッシュ型のサービスを簡単に実現可能、しかしSEOは問題かも?

Meteor 一区切りです。何かサービスを作ってカタチにしようと思ったのですが、挫折しました(笑)。というわけで、今まで使ってみた感想をまとめてみたいと思います。

良い点

リフレッシュすること無く、変更が即座に反映されるので、Comet のようなプッシュ型のサービスを簡単に実現できます。クライアント側に、刻々と変化する情報を提供する(送りつける)には、最高のプラットフォームになり得ると思います。

悪い点(?)

よくわかっていないので、推測の話です。
データをクライアント側とサーバー側で同期するために、常にAJAXのような通信をしてクライアント側にデータ表示しているので、多分、SEOの観点から言うと、コンテンツが検索エンジンの検索対象にならない、あるいは検索対象になりにくいような気がします。

とにかく、ウェブの未来を見せてくれるフレームワークです。勉強して損はないでしょう。



参考サイト
Meteor and SEO(Manuel Schoebel)
Meteor SEO - Google Fetch & Render(MeteorHacks)

2015年3月1日日曜日

Yahoo! JAPAN の決済サービス「FastPay」

Yahoo! JAPAN の決済サービス「FastPay」です。新たな決済サービスの選択肢としてメモ。継続課金ができて、スマートフォンにも対応しているとのこと。「数行のコードで決済が可能」と謳われていますが、確かに簡単そうです。