python Web開發架構-Django (1),python-django
以前用web.py(另外一款輕量級web開發架構)做一個監控管理平台,沒有做特別的記錄就不好拾起來。最近做一個日誌彙總系統,使用的是django,這次就記下來,方便查詢。
Django是一個高效的web開發架構,上手容易,便於調試和發布。
設計模式
它的設計遵循經典的web設計架構-MVC(Model-view-controller),一個應用分為四部分:
- models.py:檔案主要用一個 Python 類來描述資料表。 稱為 模型(model) 。本文不對model做詳細介紹,資料庫的存取是單裝了mysql,自己做的dao。
- views.py:檔案包含了頁面的商務邏輯。是模板和模型間的橋樑,接收前端url請求,進行商務邏輯實現,最後返回資料(結果或模板)。
- urls.py:一個設定檔,用於映射 URL到視圖。
- xxx.html: html 模板,它描述了頁面設計,支援簡單的範本語言。
環境準備
python & django,本文使用的是python-2.7.9,django-1.7.6
範本語言
在html中使用範本語言定義頁面架構和內容,後台由模板引擎渲染成完整的html。{% %}用於邏輯控制,{{}}用於變數引用
模板間關係
- include:{% include 'nav.html' %},引入布局單元
- 模板繼承:定義一個基礎模板(定義頁面架構),由子模板來繼承(填充個人化頁面子塊)。基礎模板使用block標籤-{% block %},每個block下的這一塊內容將有可能被子模板覆蓋。子模板用extends標籤來繼承基礎模板{% extends "base.html" %}。
//base.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"><html lang="en"><head> <title><strong>{% block</strong> title <strong>%}{% endblock %}<</strong>/title></head><body> <h1>My helpful timestamp site</h1> {% block content %}{% endblock %} {% block footer %} <hr> <p>Thanks for visiting my site.</p> {% endblock %}</body></html>//子模板 current.html<strong>{% extends "base.html" %}{% block title %}</strong>The current time<strong>{% endblock %}</strong>{% block content %}<p>It is now {{ current_date }}.</p>{% endblock %}
基本控制標籤
- {% if %} {% else %} {% endif %}:支援and/or/not關鍵字,不支援and/or組合,不支援用圓括弧來組合比較操作,不支援 elif
- {% for %}{% endfor %}:迴圈文法是 for X in Y
- {% ifequal %}{% endifequal %}或者ifnotequal:只有模板變數,字串,整數和小數可以作為 {% ifequal %} 標籤的參數
- {{var|op}}:模板過濾器,在變數被顯示前修改它的值。op有lower/upper/length/join等操作
補充:python中空列表、空元組、空字典、Null 字元串、0、None對象、False對象代表布爾值假,其餘都是真布爾值。
相關技術點
前端頁面:HTML、JavaScript、HTML DOM、JQuery、ajax、JSON
後端邏輯:python
頁面模板:建議網上找基於bootstrap的網頁模板
執行個體流程
項目建立
django-admin.py startproject tulip
獲得如下的目錄,manage.py/__init__.py/wsgi.py不需要修改,另外手動建立static目錄用於儲存js/css,建立templates用於儲存html模板,建立lib用於儲存依賴庫
tulip/ manage.py tulip/ __init__.py settings.py urls.py wsgi.py static/ templates/
邏輯實現
寫頁面
//search.html<select id="servicename" class="form-control" onchange="getServiceInfo()"><option value="">應用服務</option>{% for service in servicenames %}<option>{{ service }}</option>{% endfor %}</select>
配置urls.py
from django.conf.urls import patterns, include, urlurlpatterns = patterns('tulip',//tulip是模組名,作為後續映射路徑的共同首碼url(r'^$', 'searchText.index'),)視圖邏輯
//searchText.pyfrom django.shortcuts import render_to_responsefrom django.http import HttpResponsedef index(request): dao = TulipDao() servicenames = dao.getServicenames() return render_to_response('search.html', locals()) #或者return render_to_response('search.html',{'servicenames':servicenames}) #locals()返回的字典包含所有局部變數的名稱與值的映射
啟動應用
python manage.py runserver 0.0.0.0:8000 //0.0.0.0允許任意非本地串連,不指定ip則僅監聽本地串連
文章太長了,再分一篇吧,下一篇記錄一些技巧和參考資料