前言:

前幾次開始了Django設計之後,雖然弄出了RESTful的網站,也使用了DjangoRESTFramework.但是,都是依照範例程式來跑出來的.
所以現在決定除了裡面的範例程式之外,另外在同一個網站裡面弄了一個部分是模擬遠端連線
依照著tutorial 1~3 去修改,所以他的架構如下:

  • tutorial (主要的專案部分)

  • snippet (RESTful web site)

    • 負責RESTful的部分,裡面都是使用到DjangoRESTFramework所提供的function.

    • 主要的API 是 snippet

  • webs (模擬的viewer遠端)

    • 主要這裡就是這次開發的部分,主要提供兩個部分:

      • 一個是顯示所有資料的的部分(json get) ,其中全部顯示已經完成但是顯示詳細的部分還沒有.

      • 另外一個是新增資料(使用 json post)(尚未完成)

遇到的問題集錦:
這裡整理一下 ,我這次做出來所遇到的一些問題:

  • 字串的編碼問題

    • 其實這種問題算是基本的,而且也跟我在中文系統上面執行python有關.

    • json出來的資料想要parse出來會成為一堆list

    • 每個list裡面的格式會是utf8~如果要在中文上面正確顯示成字串需要decode(‘big5’)~據說Heroku 預設是utf8但是我使用big5還是可以跑.這個要持續觀察.

  • 樣板的目錄設定(TemplateDoesNotExist)

    • 問題狀況:

      • TemplateDoesNotExist: 500.html
    • 主要原因:

      • 之前在設定的時候都只有一個project 叫做tutorial.但是這次另外建立了一個webs所以template的目錄會出現問題.

      • 依照之前的經驗會以為templates資料夾應該就放在目錄下的/templates/app/,結果因為webs是第二個專案.所以template的設定會維持在第一個,也因為我並沒有在setup.py裡面把TEMPLATE_DIRS設定好.所以會發生這樣的錯誤.

    •  解決方法:

      • 在setup.py 加上以下的部分
        PROJECT_PATH = os.path.realpath(os.path.dirname(file))
        TEMPLATE_DIRS = (
        PROJECT_PATH + ‘/templates/’
        )

      • 接下來把原本打算放在webs/templates的檔案移到tutorial/template/

    • 參考:

最後再寫一次如何把你的Django Code上傳到heroku

  • python manager.py runserver

    • 首先要確定你可以正常的執行
  • 產生Procfile檔案,其內容為

    • web: python manage.py runserver 0.0.0.0:$PORT –noreload
  • heroku login

  • foreman start

    • 確認沒有錯誤訊息

    • 利用 localhost:5000 查看如果任何功能有問題

  • pip freeze > requirements.txt

  • vim .gitignore

    • 確認把virtualenv 產生的目錄加入

    • *.pyc

  • git init

  • git commit -m “任何comment”

  • heroku create

  • git push heroku master

  • heroku ps:scale web=1

    • 記得要先把其他的app dyno設成0或是砍掉~因為沒有付錢的時候heroku只允許dyno=1
  • heroku ps

  • heroku open

  • 其實成功之後,之後就可以用其他比較熟悉的git client比如說是SourceTree不需要在console mode的下指令.

查看結果:

Server:  http://sleepy-plateau-3929.herokuapp.com/snippets/

Client:   http://sleepy-plateau-3929.herokuapp.com/webs/
Github:  https://github.com/kkdai/DjangoREST_Client/

 

先寫到目前的狀況~之後會把POST的部分完成當成第二個部分~~~   


Evan

Attitude is everything