2013年12月30日 星期一

[Django] Export CSV file ( 匯出CSV檔案 )

凌晨1:20
Export data to a CSV file with Django

前言:
單純因為會用到,所以就剛好寫到這個功能

想說,以後可能在別的公司or自己的server會用到,就順便整理一份範例。

Example Code:
https://gist.github.com/kilfu0701/7332112
# in some views.py, to serve a csv file in Django.
# -*- coding: utf-8 -*-
import csv

from django.http import HttpResponse

def donwload_csv(request):
    # change export csv formatting by request parameter. ( url?encode=utf-8 )
    encode = request.GET.get('encode', 'big5')
 
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename="light_member.csv"'
 
    writer = csv.writer(response, delimiter=',', quotechar='"')
    header = [u'活動名稱', u'姓名', u'Email', u'會員身分', u'答案', u'活動登入日期', u'註冊日期', u'Device']
    writer.writerow([x.encode(encode) for x in header])
    # force export column by text format.
    # http://stackoverflow.com/questions/165042/stop-excel-from-automatically-converting-certain-text-values-to-dates
    deli = u'="{0}"'
 
    ## result['data'], some data from databases.
    #result = {}
    #result['data'] = list(aModel.objects.filter(**ftr).values(*fds))
    for i in result['data']:
        role = u'New' if i['new'] == 1 else u'Exist'
 
        raw_row = [i['plan'], i['name'], i['email'], role, i['option'], str(i['timestamp']), str(i['joined_at']), i['os']]
        row = [deli.format(x).encode(encode) for x in raw_row ]
        writer.writerow(row)
 
    return response


其他參考資料:
1. CSV匯出的時候,會遇到excel格式自動判斷錯誤的問題,後來在下面這篇看到解法:
http://stackoverflow.com/questions/165042/stop-excel-from-automatically-converting-certain-text-values-to-dates

2. 官方文件
https://docs.djangoproject.com/en/dev/howto/outputting-csv/

2013年1月16日 星期三

[Python] 在Debain 6上安裝python 2.7 + vritualenv

晚上7:43
剛好看到有人在gist上放了 安裝python2.7的shell script

其實安裝起來還蠻方便的..(笑)

Shell script code:
https://gist.github.com/1069219

安裝完畢後,執行python就可以看到版本是2.7.2



不過有人會想問,那要用回舊的版本勒?

其實可以修改 ~/.profile 這檔案,檔案內容大致上如下:
if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n
#if [ -d "$HOME/env/bin" ] ; then
#    PATH="$HOME/env/bin:$PATH"
#fi

PATH="$HOME/env/bin:$PATH"註解掉後,就會套用舊的環境設定。

PS: 恩...原本python2.6裝的django是1.4版的,剛好順便升級到py27 + django-1.5 好了 (茶)