2012年12月31日月曜日

今年、最もアクセスの多かった記事は、「Linux Mint 13をインストール(MATEとCinnamonの違い)」

今年、最もアクセスの多かった記事は、「Linux Mint 13をインストール(MATEとCinnamonの違い)」でした。Linux Mint人気を反映する結果となりました。GNOME由来のMATEとCinnamon以外にも、先日、Linux Mint 14 KDE版もリリースされていますし、ますます、デスクトップ環境が充実してきている印象です。LinuxをクライアントOSとして利用する環境は整ったといえるでしょう。覚悟さえあれば(笑)。

さて、中身の薄いブログではありますが、今年も1年間、休まず記事を書き続けてこれました。ちょっとでも目を通していただいた方、心から感謝しております。ありがとうございました。懲りずに、来年も、どうぞよろしく。




2012年12月30日日曜日

撮影している自分も写真に収まる「Not One Less Camera」

撮影している自分も写真に収まる「Not One Less Camera」、数人で集まって写真を撮る場合、撮影する人は写真に入れないわけですが、それを解消しようというのが、このカメラです。卒業アルバム写真でよく見かける欠席した生徒のように、切り抜きで自分もその写真内に収まることができます(笑)。セルフタイマーを使えば、簡単に解決できることではあるのですが、セルフタイマーって使わないですからね。



2012年12月29日土曜日

Cloudinaryの管理画面

Cloudinaryの管理画面にログインすると、ウェブ上からアップロードした画像を管理できるようになります。画像の編集削除はもちろん、アクセス数も確認できます。英語でよくわからなかったのですが、画像の一括ダウンロードなどの機能があれば、言うことなし。Cloudinaryが提供しているこの管理画面からも画像をアップロードできますし、ちょっとした画像置き場としても、十分活躍してくれるのではないでしょうか。








2012年12月28日金曜日

herokuで、cloudinaryを利用した画像アップロード(python+django)

herokuで、cloudinaryを利用した画像アップロードです。cloudinaryは、クラウド上に画像をアップロードし、リサイズ、トリミングなど編集、管理できるサービスで、herokuのアドオンとして提供されています。設定環境は、python(2.7.2)+ django(1.4.2)。無料版のスタータープラン(Starter Plan)は、500MB のストレージ、25,000 画像ファイル、1月につき、1GB の転送量となっています。

画像のアップロードは、Django管理サイトから行なって、表示部分のみviews.pyで作りこんでいます。画像のサイズ変更はもちろん、切り抜きや、エフェクトなども思いのまま。人物画像では、自動顔認識の機能も使えます。cloudinaryは、利用価値大で素晴らしいサービスなのです。

スタータープラン(Starter Plan)
Starter Plan
500MB Storage 
25,000 Images 
1GB Monthly Bandwidth
1, pipでライブラリをインストール
pip install cloudinary
pip freeze > requirements.txt
heroku addons:add cloudinary
2, settings.py CLOUDINARYのアカウント設定
heroku configコマンドで確認できます。
CLOUDINARY_URL=cloudinary://API_KEY:API_SECRET@CLOUD_NAME
CLOUDINARY = {
  'cloud_name': '(アルファベットのcloud_name)',  
  'api_key': '(数字のapi_key)',  
  'api_secret': '(アルファベットのapi_secret)',  
}
3, /blog/models.py モデル指定
import cloudinary
from cloudinary.models import CloudinaryField

class Blog(models.Model):
    image = cloudinary.models.CloudinaryField('image', null=True, blank=True)
4, /blog/views.py 画像の読み込みと編集
import cloudinary

def post(request, slug):   
    blog = get_object_or_404(Blog, slug=slug)
    if blog.image is not None:
        img = cloudinary.CloudinaryImage(blog.image.public_id, format=blog.image.format)
        pic = img.image(width=200, height=200, crop="fit", effect="pixelate_faces")
実際に設定してみたサイトがこちら自動で顔認識してくれているところが、ポイント高いです(笑)。

Django管理サイトの様子


参考サイト
Cloudinary(Heroku Dev Center)
Image transformations(Cloudinary Documentation)
Django model with Cloudinary Field(Stack Overflow)
cloudinary/pycloudinary(GitHub)

2012年12月27日木曜日

クラウド上に画像をアップロードし、リサイズ、トリミングなど管理できる「Cloudinary」

クラウド上に画像をアップロードし、リサイズ、トリミングなど編集、管理できる「Cloudinary」。自動顔検出や、エフェクト効果、文字のオーバーレイ挿入など、かなり高機能です。と、サービスの紹介は、この程度にして。本来は、実際に使ってみたブログ記事を書きたかったのですが、見事に、カタチになりませんでした(笑)。無常にも、時間だけが過ぎていく。

2012年12月26日水曜日

Djangoで、イメージファイルのアップロード

Django(1.4.2)で、イメージファイルのアップロードです。モデルで、ImageFieldを指定すると、管理サイトからは、簡単にイメージファイルをアップロードできるようになりました。MEDIA_ROOTとして指定したフォルダ内に画像が保存されます。途中、ImageFieldを指定した際、PIL関連(?)のエラーが出たので、Python Imaging Library (PILライブラリ) をインストールしました。ということで、アップロードまではできましたが、表示方法がわからない。再び、亀の歩みで進むしかありません(笑)。

settings.py
SITE_ROOT = os.path.dirname(__file__) 
MEDIA_ROOT = os.path.join(SITE_ROOT, 'static/img')
/blog/models.py
from django.db import models
from django.conf import settings

class Blog(models.Model):
    pic = models.ImageField(upload_to=settings.MEDIA_ROOT)
PILのインストール
pip install PIL

Django管理サイトの様子




参考サイト
Need help installing PIL to use Django ImageField(Stack Overflow)

2012年12月25日火曜日

Djangoで、タグクラウド「django-taggit」該当タグのデータ取得(続き)

Django(1.4.2)で、タグクラウド「django-taggit」の続きです。実際にデータベースから該当するタグのデータを取得してみました。「filter(tag__name__in=['tagname'])」を利用すると、簡単に取得することができます。フィルター「tag__」のtagは、カラム名になりますので、カラム名が、groupの場合は「filter(group__name__in=['tagname'])」となります。

/blog/views.py
blogs = Blog.objects.filter(tag__name__in=['tagname'])
実際に設定してみたサイトがこちら。ちょっとブログらしくなったかも(笑)。



参考サイト
Django で簡単にタグ機能を実装できる django-taggit が便利(presentさん)
django-taggit documentation

2012年12月24日月曜日

Djangoに、タグクラウドが簡単に実現できる「django-taggit」と「django-taggit-templatetags」を組み込む

Django(1.4.2)に、タグクラウドが簡単に実現できる「django-taggit」と「django-taggit-templatetags」を組み込んでみました。設定すると、データベース内にtaggit_tag、taggit_taggeditem、taggit_templatetags_amodelの3つのテーブルが出来上がります。管理サイトにログインして、実際にタグを登録すると、見事にデータベースに登録されます。タグの入れ替えや、削除も思いのまま。とにかく便利です。しかしながら、使いこなすには慣れが必要だと思います。組み込んだだけで、手が止まってしまいました(笑)。モノにするには、ちょっと時間がかかりそう。

1, pipでインストール
pip install django-taggit
pip install django-taggit-templatetags
2, settings.pyに追加
INSTALLED_APPS = (
    'taggit',
    'taggit_templatetags',
)
3, /blog/models.pyにカラム設定
from django.db import models
from taggit.managers import TaggableManager

class Blog(models.Model):
    tag = TaggableManager() 
4, syncdbする
python manage.py syncdb
5, /templates/blog/post.html
{% load taggit_extras %}

{# タグリストの場合 #}
{% get_taglist as tags %}
<ul>
{% for tag in tags %}
<li>{{tag}} ({{tag.num_times}})</li>
{% endfor %}
<ul>
{# タグクラウドの場合 #}
{% get_tagcloud as tags %}
<ul>
{% for tag in tags %}
<li><font size={{tag.weight|floatformat:0}}>{{tag}}</font></li>
{% endfor %}
<ul>
Django管理サイトの様子






参考サイト
Django で簡単にタグ機能を実装できる django-taggit が便利(presentさん)
django-taggit と django-taggit-templatetags の組み合わせが便利すぎる(presentさん)

2012年12月23日日曜日

Djangoに、WYSIWYGエディタのTinyMCE(django-tinymce)を組み込む

Django(1.4.2)に、WYSIWYGエディタのTinyMCEdjango-tinymce)を組み込んでみました。もっと手こずるかと思いましたが、すんなり設定できました。躓く部分は皆無。しかも、モデルのカラム指定に、「= HTMLField()」と指定するだけです。簡単、手間いらずなので、開発者をダメにしますね(笑)。

1, pipでインストール
pip install django-tinymce
2, settings.pyに追加
INSTALLED_APPS = (
    'tinymce',
)

TINYMCE_DEFAULT_CONFIG = {
    'plugins': "table,spellchecker,paste,searchreplace",
    'theme': "advanced",
}
3, urls.pyに追加
urlpatterns = patterns('',
    url(r'^tinymce/', include('tinymce.urls')),
)
4, /blog/models.pyにカラム設定
from django.db import models
from tinymce.models import HTMLField

class Blog(models.Model):
    body = HTMLField()
実際に組み込んでみたサイトが、こちら

Django管理サイトの様子




参考サイト
django-tinymce(Google Code)
tinymce 1.5.1b2 documentation(django-tinymce documentation)

2012年12月22日土曜日

Djangoで、フォームのセレクトボックス(selectbox)

Django(1.4.2)で、フォームのセレクトボックス (selectbox)の設定です。連想配列のようなカタチで、タプル型で設定できます。モデル内に定義しておくと、管理サイトにも変更が反省されるので、即座に利用できて、大変便利。

/member/models.py
class Member(models.Model):

    MYGENDER = ( 
        (1, '女性',),
        (2, '男性',),
        (3, 'その他',),

    gender = models.IntegerField(null=True, blank=True, default=None, choices=MYGENDER)
実際に設定してみたのがこちら

Djangoの管理サイト画面の様子


参考サイト
How to build a select box with a list of countries for a form in Django(Stack Overflow)

2012年12月21日金曜日

Djangoで、ログイン認証を必要とするページの設定

Django(1.4.2)で、ログイン認証を必要とするページの設定です。「login_required デコレータ」を利用すると、簡単に設定できます。各メソッドの前に「@login_required」を追加するだけでOK 。これは非常に楽です。

from django.contrib.auth.decorators import login_required

# パスワード再設定
@login_required(login_url='/member/login/')
def password(request):
    :
実際に設定してみたサイトがこちら

2012年12月20日木曜日

Djangoで、モデルと連携したフォーム

Django(1.4.2)で、モデルと連携したフォームです。ミソは、フォームフィールドを指定する際の、fields = ()exclude = ()の最後の「,」と、ディフォルト値を指定するinstance=の設定です。データベースに保存されているデータを更新するような場合、フォームの初期値として、インスタンスを明示的に設定する必要があるようです。

from django.db import models
from django.forms import ModelForm

class PartialMemberForm(ModelForm):
    class Meta:
        model = Member
        fields = ('name', 'age',)

class PartialMemberForm(ModelForm):
    class Meta:
        model = Member
        exclude = ('birth_date',)

form = PartialMemberForm(instance=member) 
実際に設定してみたサイトがこちら



参考サイト
Django: Field Error Unknown fields(Stack Overflow)

2012年12月19日水曜日

Djangoで、メールアドレスとパスワードを利用したユーザ認証ログイン(修正)

Django(1.4.2)で、メールアドレスとパスワードを利用したユーザ認証ログインです。前回の記事は、ユーザ認証しただけで、ログインできていませんでした(笑)。今度こそ、ログインできたような気がします。カスタムの認証バックエンドを設定して、authenticate() を利用する必要があるようです。

1, settings.pyAUTHENTICATION_BACKENDSの設定を追加
2, settings.pyと同じ階層にbackends.pyを追加
3, views.pyで、authenticateを利用して認証

といった流れになります。ドキュメントにあるようにauthenticate() を最初に呼び出して、login() 認証させないと、ログイン出来ない模様。

settings.py(sampleprojectnameは、あなたのプロジェクト名)
AUTHENTICATION_BACKENDS = (
    'sampleprojectname.backends.EmailAuthBackEnd',
    'django.contrib.auth.backends.ModelBackend',
)
backends.py
from django.contrib.auth.backends import ModelBackend
from django.contrib.admin.models import User

class EmailAuthBackEnd(ModelBackend):
    def authenticate(self, email=None, password=None,**kwargs):
        try:
            user = User.objects.get(email=email)  
            if user.check_password(password):
                return user
            return None
        except User.DoesNotExist:
            return None
/member/views.py
from django.contrib.auth import authenticate, login, logout

email = form.cleaned_data['email']
password = form.cleaned_data['password']

user = authenticate(email=email, password=password)
if user is not None:
    if user.is_active:
        login(request, user)
        messages.info(request, 'いらっしゃいませー。')
        return HttpResponseRedirect('/') 
    else:
        messages.error(request, 'ログインに失敗しました。')
else:
    messages.error(request, 'ログインに失敗しました。')
実際に設定してみたサイトがこちら



参考サイト
Django Authentication With Email Instead of Usernames(Django foo)

2012年12月18日火曜日

Djangoで、メールアドレスとパスワードを利用したユーザ認証

すみません。このままだと、ユーザ認証のみで、ログインはできません。こちらの記事を参考にどうぞ。

Django(1.4.2)で、ユーザ認証です。authenticate(ユーザーネームusername, パスワードpassword)を利用すると簡単にユーザ認証できるようですが、今回は、メールアドレスとパスワードを利用して設定してみました。check_passwordを利用すると、難なく実現できるようです。何とか動いている?

authenticateを利用する場合
from django.contrib.auth import authenticate

username = form.cleaned_data['username']
password = form.cleaned_data['password']

user = authenticate(username=username, password=password)
if user is not None:
    print "OK"
else:
    print "NG"
メールアドレスとパスワードを利用する場合
email = form.cleaned_data['email']
password = form.cleaned_data['password']

try:
    user = User.objects.get(email=email)
    if user.check_password(password):
        messages.info(request, 'いらっしゃいませー。')
        return HttpResponseRedirect('/') 
    else:
        messages.error(request, '認証に失敗しました。')

except User.DoesNotExist:
    messages.error(request, '認証に失敗しました。')
実際に設定してみたサイトがこちら



参考サイト
Django Authentication using an Email Address(micah carrick)

2012年12月17日月曜日

Djangoで、フラッシュメッセージの表示

Django(1.4.2)で、フラッシュメッセージの表示です。メッセージをたった一行表示するのに、時間がかかりすぎました(笑)。簡単なことなのですが、慣れないことをするには、エネルギーを使います。こんなところで躓いていると、先が遠のくのですが。。。

実際に設定してみたサイトがこちら

views.py
from django.contrib import messages

messages.success(request, 'ログインに成功しました。')
return HttpResponseRedirect('/') 

messages.error(request, 'ログインに失敗しました。')
return HttpResponseRedirect('/') 
template.html
{% if messages %}
    {% for message in messages %}
        {% if message.tags == 'success' %}
        <div class="alert-box success">{{ message }}</div>
        {% endif %}
        {% if message.tags == 'error' %}
        <div class="alert-box alert">{{ message }}</div>
        {% endif %}
        {% if message.tags == 'warning' %}
        <div class="alert-box secondary">{{ message }}</div>
        {% endif %}
        {% if message.tags == 'info' %}
        <div class="alert-box">{{ message }}</div>
        {% endif %}
    {% endfor %}
{% endif %}

参考サイト
DjangoでrailsのFlashメッセージと同じことをしたい(brainstorさん)
The messages framework(Django)

2012年12月16日日曜日

ハッシュタグ(#)を名前にした赤ちゃん誕生

ハッシュタグ(#)を名前にした赤ちゃん誕生(To The Mom Who Named Her Baby Hashtag)というニュースを目にしました。その名も、Hashtag Jamesonちゃんです、時代ですね。最近、子供に読みにくい名前をつけることが多いらしいのですが、さすがに、これは日本では認可されないでしょう。それはさておき、将来、IT系の分野に進むことになるのでしょうか。あるいは、グレるのか(笑)。

2012年12月15日土曜日

Djangoで、CC、BCCメール送信、更にGmailをSMTPサーバーに

Django(1.4.2)で、CC、BCCメール送信です。どうやって実現するのだろうと、しばらく調べ回ってしまいました。できてみると、あっけないくらいに簡単です。何を悩んでいたのでしょうか(笑)。EmailMessageクラスを利用すると、簡単に送信できました。受信者はいずれも、タプル型のデータで指定できるので、便利。

subject = '件名'
message = '本文です。'
from = 'from@sampledomain.com'
to = ['to@sampledomain.com']
cc = ['cc@sampledomain.com']
bcc = ['bcc@sampledomain.com']

from django.core.mail import EmailMessage
msg = EmailMessage(subject=subject, body=message, from_email=from, to=to, cc=cc, bcc=bcc)
msg.send()
更に、settings.pyに下記の設定を加えれば、GmailをSMTPサーバーとしてメール送信することが可能です。素晴らしい。

settings.py
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'youremail@gmail.com'
EMAIL_HOST_PASSWORD = 'yourpassword'
EMAIL_PORT = 587


参考サイト
DjangoでGmailのSMTP使って送信失敗(Djangoへの片思い日記さん)

2012年12月14日金曜日

Djangoで、追加のユーザ情報を保存、UserProfileとget_profile()

Django(1.4.2)で、追加のユーザ情報を保存です。UserProfileクラスを追加して、get_profile() メソッドで呼び出して利用できます。今回は、UserProfileの名前を変えて、Memberクラスで設定してみました。アプリケーション名も「member」です。以下、ユーザーを登録して、Memberテーブルに認証キーを追加するサンプルです。良い具合にユーザーテーブルに紐付いて、追加のデータが保存されます。

settings.py
# UserProfile
AUTH_PROFILE_MODULE = 'member.member'
/member/models.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models import permalink
from django.db.models.signals import post_save

class Member(models.Model):
    user = models.OneToOneField(User)
    authkey = models.CharField(db_index=True, unique=True, max_length=100, default=None)

    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Member.objects.create(user=instance)

    post_save.connect(create_user_profile, sender=User)
/member/views.py
# Userデータ登録
user = User.objects.create_user(no, email, password)
user.save()

# Memberテーブルにハッシュ値を追加
member = user.get_profile()
member.authkey = authkey
member.save()

2012年12月13日木曜日

Djangoで、パスワードの暗号化と復号

Django(1.4.2)で、パスワードの暗号化と復号です。もろ、サンプルのパクリ。暗号化の際、キーになるハッシュ文字列を同時に作り出してくれるのが賢いです。何をやっているのかよくわかっていない部分はあるのですが、エレガントと言ってしまいましょう。

import urllib
import hashlib, zlib
import cPickle as pickle

my_secret = "yama kawa"

# 暗号化
def encode_data(data):
    text = zlib.compress(pickle.dumps(data, 0)).encode('base64').replace('\n', '')
    m = hashlib.md5(my_secret + text).hexdigest()[:12]
    return m, text

# 復号
def decode_data(hash, enc):
    text = urllib.unquote(enc)
    m = hashlib.md5(my_secret + text).hexdigest()[:12]
    if m != hash:
        raise Exception("Bad hash!")
    data = pickle.loads(zlib.decompress(text.decode('base64')))
    return data
使い方は、下記の通り。
hash, enctext = encode_data(['Hello', 'World'])
print hash, enctext
print decode_data(hash, enctext)
参考サイト
How to generate temporary URLs in Django(Stack Overflo)

2012年12月12日水曜日

Djangoのテンプレート機能拡張パッケージ「django-widget-tweaks」

Django(1.4.2)のテンプレート機能拡張パッケージ「django-widget-tweaks」を組み込んでみました。これがフォームを扱う際に、最高にイカしたパッケージなのです。「class」などの属性を追加する際に非常に便利。実現方法がわからずに、路頭に迷っていたところなので、本当に有難い。他にも、いろいろ賢い使い方ができるようです。

テンプレートで、例のように指定すると、
{{ form.email }}
{{ form.search_query }}
↓↓↓
{{ form.email|attr:"class:error" }}
{{ form.search_query|attr:"type:search" }}
HTMLでは、下記のように属性が追加されます。
<input type="text" name="email" id="id_email" />
<input id="id_search_query" type="text" name="search_query" />
↓↓↓
<input id="id_email" type="text" name="email" class="error" />
<input id="id_search_query" type="text" name="search_query" type="search" />
実際に組み込んでみたのがこちら

2012年12月11日火曜日

Djangoで、フォームの操作

Django(1.4.2)で、フォームの操作です。サンプルを設定するのと、自分で考えて機能を作り上げていくことには雲泥の差があります。今までわかったつもりでいましたが、何もわかっちゃいませんでした(笑)。メールアドレスとパスワードのログインフォームを表示するだけでも一苦労です。

class LoginForm(forms.Form):
    email = forms.EmailField(label="メールアドレス")
    password = forms.CharField(widget=forms.PasswordInput(render_value=False), label="パスワード")
実際に設定したフォームがこちら。フォームを表示しただけで、動きはありません(笑)。



参考サイト
PasswordField(Django)

2012年12月10日月曜日

Djangoで、会員ログイン管理「django-registration」

Django(1.4.2)で、会員ログイン管理「django-registration」です。会員登録から、ログイン、パスワードのリセットまで一通り揃っているパッケージです。誰もが通る面倒な会員管理機能を準備する手間が省けますので、ユーザー認証を必要とするサイトには、本当に有難いパッケージです。設定も容易、すぐに利用できるようになります。

しかし、初心者の私には、レベルが高く、ソースを眺めてみても、なんだかよくわかりません(笑)。よって、このまま利用するには、何ら問題ないのですが、ちょっとカスタマイズしようとすると、たちどころに路頭に迷う結果となりました。甘くはないですね。前途多難。

実際に設定してみたサイトがこちら


参考サイト
django-registrationでユーザ認証(Pythonで自然言語処理している学生のメモ書きさん)
django-registrationの使い方(Hello Worlさん)
User authentication with django-registration(Development Doodles)

2012年12月9日日曜日

アニメビデオを作成して、公開できる「GoAnimate」(無料)

アニメビデオを作成して、公開できる「GoAnimate」(無料)。このサービス、面白すぎます(笑)。アニメのキャラクターや背景画像、撮影シーンなどは、あらかじめ雛形が用意されているので、文章だけ用意すればOK。各種組み合わせを変えることで、クオリティーの高いアニメ映像が簡単に出来上がってしまいます。ビジネス用のものも準備されていますので、可能性無限大です。

実際に作成してみたサンプルがこちら。Youtubeへのエクスポートが可能となっています。



2012年12月8日土曜日

Django1.4の日本語ドキュメント

Django1.4の日本語ドキュメントページが立ち上がっています。なぜ、今まで気づかなかったんでしょう。検索スキルがアマすぎますね(笑)。1.0のドキュメントはすぐ見つけられたのですが、正直、若干、古さを感じていました。最新のドキュメントが読めるのは、本当にありがたい限りです。翻訳者に心から感謝。

2012年12月7日金曜日

Djangoで、お問合せフォーム

Django(1.4.2)で、お問合せフォームです。フォームオブジェクトという概念がよくわからず、自分の手で制御しているという感覚が希薄なのですが、サンプル通りに設定したら、何とか使えるようになりました。メールも見事に送信されます。嬉しい。デザインにこだわらなければ、テンプレートはかなり簡略化できます。そういうわけで、コード量が少ない分、どこでどう動いているのか、よくわからない(笑)。

/templates/contact/index.html
<form action="/contact/" method="POST">
    {{ form.as_p }}または、{{ form.as_table }}または、{{ form.as_ul }}
    <input type="submit" value="Submit">
</form>
実際に設定してみたサイトが、こちら

2012年12月6日木曜日

Djangoで、djangorocks.com 簡易ブログチュートリアル

Django(1.4.2)で、djangorocks.com 簡易ブログチュートリアル「How to create a basic blog in Django」を設定してみました。モデル(models.py)で、ForeignKeyを設定しておくと、勝手にリレーションしてくれるので、最高に楽できます。シンプルなので、私のような初心者には物凄く有難いです。カスタマイズ心をくすぐる、素晴らしいサンプルとなっています。

/blog/models.py
class Blog(models.Model):
    title = models.CharField(max_length=100, unique=True)
    category = models.ForeignKey('blog.Category')
    body = models.TextField()
実際に設定してみたサイトがこちら

2012年12月5日水曜日

Djangoで、ページネーション(ページ送り)「django-pagination」

Django(1.4.2)で、ページネーション(ページ送り)「django-pagination」です。ドキュメントに紹介されているものは、さすがに簡素なので、別のものを試してみたくなってしまいました。というわけで、パッケージとして提供されているdjango-paginationです。

これが、最高に素晴らしいのです。何が素晴らしいって、ビューでは、対象データを全件取得する指定をしていても、テンプレート部ではレイジーローディング(lazy loading)によって、実際には、該当表示分のデータのみが取得される点です。ソースも簡潔になり、まさに感動です。

/polls/views.py
def index(request):
    polls = Poll.objects.all()
    return render_to_response('polls/index.html',{'polls': polls})
/templates/polls/index.html
{% if polls %}
    {% autopaginate polls 10 %}
    {% paginate %}
    {% for poll in polls %}
        {{ poll.question }}
    {% endfor %}
    {% paginate %}
{% endif %}
実際に設定してみたサイトがこちら





参考サイト
Django-paginationを使用する(Ponsukeのプログラミング日記さん)
django-pagination便利だね(偏った言語信者の垂れ流しさん)
django-pagination(Google Project Hosting)
Using Django-Pagination(Eric Florenzano's Blog)

2012年12月4日火曜日

Djangoで、ページネーション(ページ送り)

Django(1.4.2)で、ページネーション(ページ送り)です。ドキュメントに紹介されているソースをそのまま設定してみました。これぞミニマムと言えるほど、簡潔です。シンプルなので、迷う要素がありません(笑)。ページネーターオブジェクト(Paginator objects)を理解するには、ありがたいサンプルです。

実際に設定してみたサイトがこちら

2012年12月3日月曜日

Djangoの、サンプルチュートリアル「投票」

Django(1.4.2)で、サンプルチュートリアル「投票」を試してみました。Djangoのドキュメント上で紹介されているものです。手順通りに設定すると、投票(poll)とその選択肢(choice)のテーブルがデータベース上に作成され、アンケートのような簡易サンプルが出来上がります。オブジェクトモデル(Object Model)を理解する上で、大いに役だってくれるのではないでしょうか。まだ何もわかっちゃいませんが、うまく利用すれば、飛躍的に開発スピードを上げることができそうな予感がします。

実際に設定したサイトが、こちら

2012年12月2日日曜日

MySQL5.5.28で、my.cnfの[mysqld]文字コードを指定は、「character-set-server」と「collation-server」

MySQL5.5.28で、my.cnfの[mysqld]文字コードを指定は、「character-set-server」と「collation-server」です。「default-character-set」を指定したために、エライ目に会いました。MySQLが起動できなくなってしまったわけですが、原因がわからずに、東奔西走、あらぬ方向へ迷い込むことに。my.cnfの指定は間違っているはずがないと思い込んでいたため、散々、あちこち掘り返してしまいました。結局、謙虚に一から1つづつ見なおして、ようやく原因究明。疲れました。

[mysqld]
default-character-set=utf8
↓↓↓
character-set-server=utf8
collation-server=utf8_general_ci

参考サイト
Configuring the Character Set and Collation for Applications(MySQL 5.0 Reference Manua)

2012年12月1日土曜日

Djangoで、テンプレート

Django(1.4.2)で、テンプレート。いわゆる、よくあるテンプレートエンジンです。子テンプレートから、親のレイアウトテンプレートを呼び出せるようになっています。専用タグなども一通りそろっていて、すぐに覚えられそうな気がします。特に決まった呼び名はないのでしょうか? 「Djangoテンプレート言語(Django template language)」という文字しか見つけられませんでした。

実際に設定してみたのが、こちら。ウェブサイトらしい雰囲気に?(笑)。

2012年11月30日金曜日

Djangoで、Hello World

Django(1.4.2)で、Hello Worldです。Djangoの紹介ビデオを見て、ちょっとわかった気になりました。Djangoは、MVCならぬ、MTVフレームワークとのこと。バージョン1.0が、2006年時点に発表され、既にこのような設計思想が取り入れられていたということは、驚きです。

DjangoフレームワークのMTVパターン
Model -> Model
Template -> View
View -> Controller
実際のサイトがこちら。何とかスタートラインに立てたかと(笑)。

2012年11月29日木曜日

Python の Djangoフレームワーク 1.4.2 を設定

PythonDjangoフレームワーク 1.4.2 を設定してみました。Pythonのウェブフレームワークは、他にもいろいろあるようですが、右も左も分からない状態ですので、まずは、Djangoです。お世話になるサーバーは、herokuGetting Started with Django on Herokuのページを参考に進めて、なんとか設定できたように思います。しかし、「Hello World」の文字を表示したいのに、それがわからない。こりゃ、先が長くなりそうです(笑)。

実際のサイトが、こちら



参考ページ
Getting Started with Django on Heroku(Heroku)

2012年11月28日水曜日

Python 2.7.3(2系の最新版)を使いたいために、Ubuntu Server 12.10をインストール

Python 2.7.3(2系の最新版)を使いたいために、Ubuntu Server 12.10をインストールしました。Ubuntuのデスクトップ版はお馴染みですが、サーバー版は新鮮な気分を味わえます。インストール作業は、文字通り全自動。入力を求められる部分がなく、全て勝手に進めてくれます。余談ですが、どぎつい紫の背景が目に染みます(笑)。

インストール後は、taskselコマンドで、OpenSSH serverを追加しました。何もない状態で、これでやっと、外部からアクセスできます。見事な割り切り方。LAMP serverなるものもインストールしました。LAMP環境が整います。これは、非常に楽。ちなみに、PHPは、PHP 5.4.6-1ubuntu1.1、Perlは、v5.14.2となっています。

sudo tasksel

2012年11月27日火曜日

Google's Python Classの続き

Google's Python Classの続きで、「Regular Expressions」と「Utilities」です。テキストを制するものは、全てを制す。そんなGoogleの奥義を見た気がします。Pythonに興味の無い方でも、見て損はないでしょう。Googleのコアテクノロジーのエッセンスを感じることができます。一方、不眠症に悩める方にもお勧め。興味のある内容とはいえ、さすがに長い。催眠効果、抜群であります(笑)。







2012年11月26日月曜日

Pythonに挑戦「Google's Python Class」!

ついにと言いますか、念願のと言いますか、Pythonに挑戦です! もちろん、全く予備知識無し。文字通り、ゼロからのスタートであります。挫折必至とも思えますが、また亀の歩みのマイペースで進めていけたらと(笑)。もし、挫折してしまったら、笑ってやって下さい。というわけで、基本の「き」、いろはの「い」のGoogle's Python Class、「Strings」、「Lists」、「Sorting」、「Dicts and Files」から始めてみます。









GoogleのKey-Valueストアテクノロジーの一端を覗けます。

2012年11月25日日曜日

Linux Mint 14(Nadia)をインストール

Linux Mint 14(Nadia)をインストールしてみました。前回、GNOME2版のmateを試してみたので、今回はGNOME3版のcinnamonです。インストール画面から全て日本語で進めていけるので、安心感があります。最初に環境設定できれば、後は全自動。躓く部分がないので、緊張感がなく、退屈な時間です(笑)。

インストール後、ちょっと試してみて、どうも日本語入力がうまくいかなかったので、「ソフトウェアの管理」からMozcをインストールしました。これで全て完璧です。