2014年3月23日 星期日

Django mysql insert into 中文資料: incorrect string value

在django 中使用model 自動creat mysql 的table 並不能直接設定 table 的語系設定,

所以必須從 my.cnf中來決解這個問題。

修改mysql  的設定檔,加入以下的設定。
# vim /etc/mysql/my.cnf

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8


正常來說,此時就可以正常insert data to mysql。

但是如果還是有問題的話,進入mysql consol界面check 一件事情。

# mysql -uroot -p

mysql > use yourdatabse;

mysql > show create table yourtable;

檢查這一行  
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

請create table時確定為utf8,如果不是utf8代表這table是在更改設定檔之前時,所create 出來的table。所以會一直無法寫入中文的data,因此再用django 的syncdb從新create table吧!

2014年3月4日 星期二

Django 中簡易配置static file (讓template 可以inclde javascript css image)

在 Django 中 開始一個project 後,到setting.py 中設定 STATIC_URL

# vim settings.py

import os
PROJECT_DIR = os.path.dirname(__file__)


STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    ("js", os.path.join(STATIC_ROOT,'js')),
    ("css", os.path.join(STATIC_ROOT,'css')),
    ("images", os.path.join(STATIC_ROOT,'images')),
)


以後在這project底下建立一個 static 資料夾,資料夾中包括 js 、css及images

將來將你的javascript檔置入js中,css檔置入css及圖檔置入images

以上的配置並不需要在urls.py 中多做設定

======================================

接下來只要在你的templates 中的html 宣告正確的js、css、images正確位置正常include。

在temlates 中使用javascript的宣告方式
<script type="text/javascript" src="{{STATIC_URL}}js/jquery.js"></script>

在temlates 中使用css的宣告方式
<link rel="stylesheet" type="text/css" href="{{STATIC_URL}}css/style.css" media="screen" />
在temlates 中使用image的宣告方式
<img src="{{STATIC_URL}}images/me.jpg"" alt="img">


注意{{STATIC_URL}}就是取配置文件settings.py里的STATIC_URL变量,解析出来的就是:/static/。
而{{STATIC_URL}}css/style.css最终解析出来的就是我们想要的:/static/css/style.css,Django会根据配置文件找到相应的文件。

Reference:http://2goo.info/blog/panjj/Django/2012/11/18/544

2014年1月17日 星期五

使用django-social-auth做 goole auth2.0 登入

官方的 Demo:http://social.matiasaguirre.net/

測試環境:
python 2.6
Django 1.4.9

基本上只要是Django >=1.2.5 python-social-auth >= 0.1.12 即可使用

下載:git clone https://github.com/omab/django-social-auth.git

先instll 必要的package
$ sudo pip insall south

$ cd django-social-auth
$ sudo python setup.py install

$ cd  example
$ python manage.py syncdb
$ python manage.py migrate

$ vi  example/settings.py

 #在最下面的部分加入

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'YOUR CLIENT SECRET'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET  = 'YOUR CLIENT SECRET'

$ python manage.py runserver 0.0.0.0:8080

再來打開你的browser 輸入

localhost:8080

就可以正常運作並利用 google oauth2.0登入了

-----------------------------------------------------------------------------------------------
在 python 3.3    Django 1.5.5下
需要將修改一些東西

# vim example/urls.py

將以下這行註解
#from django.conf.urls.defaults import patterns, url, include

加入以下這行
from django.conf.urls import patterns, url, include

即可讓網站正常運作,但是記得,要改用python3.3 及 pip3.3 來運作。

小編也有試著將Django 升級到目前最新的版本 1.6.1,

其實都可以正常運作,但在login的時候會不太正常。

如何不清楚 google oauth 2.0 的client_id  與 client_secret 如何申請麻煩參考以下google的文件:

https://developers.google.com/adsense/management/tutorials/oauth-generic?hl=zh-tw



2014年1月10日 星期五

python 3.3 + Django 1.6.1 使用mysql 遇到 Error loading MySQLdb module: No module named 'MySQLdb'

在 python 3.3 底下執行Django 1.6.1 ,若搭配 Mysql 使用時,可能會遇到以下問題

Error loading MySQLdb module: No module named 'MySQLdb'

該問題是因為少install 了MySQLdb,但是在python3 並不兼容MySQLdb,所以需要用相容python3 的相關套件。

所以請安裝以下套件
# sudo pip3.3 install  PyMySQL

安裝好了執行了Django會發現,還是會出現同樣的error,此時問題又出在哪了?

其實在要你startproject中的 __init__.py 檔中加入以下資料

import pymysql
pymysql.install_as_MySQLdb()

將剛剛安裝的library import 即可讓你的django 正常運作了。



在python 3.3 下安裝Django 1.6.1

在 python3.3 因為不是系統預設的python 所以安裝django 需要使用 pip3的協助。


1. install setuptools  (因為pip3 需要用到setuptools)

# wget https://bitbucket.org/pypa/setuptools/get/default.tar.gz#egg=setuptools-dev -O setuptools.tar.gz

# tar -zxvf setuptools.tar.gz
# cd pypa*
# sudo python3.3 setup.py install
# cd ..


2. install pip3  (phython3 的套件管理程式)

#  wget https://pypi.python.org/packages/source/p/pip/pip-1.5.tar.gz
# tar -zxvf pip-1.5.tar.gz
# cd pip*
# sudo python3.3 setup.py install



3. install Django1.6.1 (python MVC framework)

# sudo pip3.3 install Django==1.6.1

以上就可以使用 python3.3 執行 Django了。