建立django虛擬環境(virtualvenv):
ref - https://djangogirlstaipei.gitbooks.io/django-girls-taipei-tutorial/content/django/installation.html
我們可以直接開始安裝 Django,但實務上,大多數人都會搭配使用虛擬環境。使用虛擬環境有許多優點:
- 你的專案會擁有一個專屬的獨立 Python 環境。
- 不需要 root 權限,就可以安裝新套件。
- 方便控管不同版本的套件,不用擔心升級套件會影響到其他專案。
- 如果需要多人協作或在不同機器上跑同一個專案時,使用虛擬環境也可以確保環境一致性。
相關命令:
建立環境:python -m venv django_venv
切換至虛擬環境:django_venv\Scripts\activate
今天完成了字串轉 json object的處理,也對Django的了解更進一步;建立一個頁面,然後將新竹市政府opendata的資料,從json字串,轉換為 json object list,再轉到自己寫出來的頁面上
先看成果
先看成果
過程與程式說明:
★資料來源:
新竹市政府開放資料平台提供了許多有趣的資料,其中一個是新竹市寺廟名冊
★步驟:
1. 在templates新增一個html,先將layout放入,再放入 layout.html 中挖空的部份(content),最後放入內容,在這邊僅僅把廟宇和主祀神像的名稱 show 出來
{% extends "app/layout.html" %}
{% block content %}
{% for god in gods %}
{{god.temple}} : {{god.mastergod}}
{% endfor %}
{% endblock %}
2.在model要先定義JSON物件的類別,用來將傳回的資料物件化
class god(object):
def __init__(self, temple, region, mastergod, type, organizationType, address, phone1, phone2):
self.temple = temple
self.region = region
self.mastergod = mastergod
self.type = type
self.organizationType = organizationType
self.address = address
self.phone1 = phone1
self.phone2 = phone2
3.在view中,則是要處理回傳資料的內容與產生god物件,再將之放到list中並回傳到template
import urllib.request
import json
import urllib
from urllib.request import Request
from app.models import god
def allMyGodsInHsinchu(request):
assert isinstance(request, HttpRequest)
req = Request("http://opendata.hccg.gov.tw/dataset/480911dd-6eea-4f97-a7e8-334b32cc8f6b/resource/ee12c072-e8aa-4be1-8179-f1c9606198f3/download/20150304091340575.json")
try:
response = urllib.request.urlopen(req)
ur = response.readall().decode('utf-8-sig')
j_obj = json.loads(ur)
templeLst = []
for jsonObj in j_obj:
g = god(jsonObj["寺廟名稱"],jsonObj["地區"],jsonObj["主祀神像"],jsonObj["教別"],jsonObj["組織型態"],jsonObj["寺廟所在地"],jsonObj["寺廟電話 1"],jsonObj["寺廟電話 2"])
templeLst.append(g)
except urllib.error.HTTPError as e:
print(e.code)
print(e.read().decode("utf-8-sig"))
return render(request,
'app/allmygods.html',
context_instance = RequestContext(request,
{
'title':'求人不如求神',
'gods':templeLst,
}))
沒有留言:
張貼留言