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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章