1、前言
1.1 本文的背景
近些日子以來,我逐步學習了python語言的基礎知識,算是剛剛入了門。但是我知道,如果只是做做書本練習,不會很快熟練一門語言,所以我決定做一些實際的工作來儘快使用python功能強大的功能。鑑於很難一下子在各個方面同時展開學習,我決定從web編程開始入手,中間穿插着其他python的使用場景。Django是使用最爲廣泛的web開源框架,我不妨從它開始,構建自己的一些程序實例。
1.2 本文的參考資料
- 主要入門的資料來自官方網站(https://www.djangoproject.com)裏的教程。
- 另一資料是Django Book 2.0 中文版(http://download.csdn.net/download/beyond628393/3800971)。
1.3 本文的目的
由於本人只是初學者,本文只作爲自己工作的備忘,並不會對一些語法和用法進行羅列,更談不上有太深的見解。本文只是從初學者的角度,記錄如何使用python和Django,進行一些有意思的開發。
2、實例一:電驢鏈接抓取(Views和Urls基本框架搭建)
2.1 實例背景
本人經常上電驢下載電子書籍,但是許多書籍verycd上是沒有直接鏈接的。必須將verycd下載頁面的www.verycd.com改爲www.verycd.gdajie.com才能找到下載鏈接。而且此下載鏈接界面許多廣告,加載十分慢,經常點擊會特別費事。
作爲程序員和python初學者,當然不願意自己寶貴的時間浪費在這些點擊和等待上,應該利用自己的知識解決這一問題
2.2 實例分析
我們先來分析一下此問題,從電驢上獲取一條下載鏈接的步驟如下:
1)進入電驢的下載頁面。
2)進行下載頁面URL的轉換。
3)進入新的下載頁面,列出下載直接鏈接。
很明顯,我們只要能夠解析HTML頁面,那麼就可以在電驢下載頁查找到所有的可下載書籍列表;對這些書籍列表的下載鏈接,進行URL的拼接,加上gdajie這一段,然後跳轉到新的頁面;在新的下載界面解析出書籍的具體信息和直接下載鏈接,則這一問題就可以完美解決了。
這裏我們用到了python的HTML解析庫BeautifulSoup(http://www.crummy.com/software/BeautifulSoup/),大家可以直接查看它的使用文檔。
2.3 實例設計
我們設計如下的一個web程序:
左側做成書籍目錄,右側則根據目錄項,顯示相應的頁面列表、書籍列表和書籍具體內容。
2.4 工程建立
1)首先,我們來建立這個web程序的工程目錄,我們將這個web程序命名爲verycdhelper,windows命令行中鍵入如下命令:
django-admin.py startproject verycdhelper
2)此時在當前目錄生成工程目錄樹如下:
verycdhelper/
manage.py
verycdhelper/
__init__.py
settings.py
urls.py
wsgi.py
python manage.py runserver
輸出如下,則正常:
2.5 基本界面
1)在urls.py同一目錄新增views.py和templates目錄。關於urls.py和views.py的關係,可以這麼來看,根據urls.py裏的url定位到views.py裏的view函數。具體的用法看參考Django教程。
2)在templates目錄中,我們創建index.html文件,作爲verycdhelper的主界面,對應url爲http://127.0.0.1:8000/。爲了使用templates中的文件,我們需要定義Django載入templates的目錄。打開settings.py,找到TEMPLATE_DIRS,加入templates的絕對路徑:
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'G:/Python/testsite/verycdhelper/verycdhelper/templates',
)
3)index.html中使用frame標籤,將瀏覽器分爲左右兩框,分別顯示不同的html文件:
<html>
<frameset cols="300, *">
<frame src="/home/" noresize="yes">
<frame src="" name="display" noresize="yes">
</frameset>
</html>
cols屬性指定了左側框架300像素寬,剩下的都是右側的框架。左側框架的html源地址是/home/,這一地址對應home.html,我們目前還沒有創建,並且固定框架不可改變大小;右側框架則暫時不指定html源文件,命名爲display,也不可改變大小。
4)我們創建home.html,顯示基本的輸出信息:
<html>
<head>
<h1> VeryCD Book Menu </h1>
<hr>
</head>
</html>
5)根據Django的使用方法,我們在views.py中添加home.html的顯示函數,在urls.py中添加home.html的url匹配規則:
views.py:
from django.http import HttpResponse
from django.template.loader import get_template
from django.shortcuts import render_to_response
def index(request):
return render_to_response('index.html')
def home(request):
return render_to_response('home.html')
urls.py:
from django.conf.urls import patterns, include, url
from verycdhelper.views import *
urlpatterns = patterns('',
url(r'^$', index),
url(r'^home/$', home),
)