Django邊學邊做(一)

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
3)可以試一下是否正常,首先進入verycdhelper目錄,然後使用manage.py來啓動django development server:

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),
)

  2.6 小結

  至此,我們搭建起基本的程序框架,可以再具體做一些事情了。輸入地址127.0.0.1:8000,運行效果如下:


發佈了31 篇原創文章 · 獲贊 19 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章