Django:一个可以使web开发工作愉快并且高效的web框架。
Django提供了通过web开发模式的高度抽象,通过此次学习,明白两个方面:第一,深度解释Django到底作了哪些工作以及如何用Django构建web应用;第二,在适当地方讨论更高级的概念,并解释如何在自己的项目中高效使用这些工具。通过学习,学会快速开发功能强大网站的技巧,并且代码清晰,易于维护。
首先,框架是什么?
如果不使用框架,python开发web,最简单,原始和直接的办法就是使用CGI标准,这种方法是这么工作的:首先做一个python脚本,输出html代码,然后保存成.cgi扩展名的文件,通过浏览器访问文件。
比如,用python cgi脚本显示数据库中最新出版的10本书:
#! /usr/bin/env python import MySQLdb print "Content-Type:text/html/ " print "<html><head><title>Books</title></head>" print "<body>" print "<h1>Books</h1>" print "<ul>" Connection = MySQLdb.connection(user= 'me',passwd='letmein',db='my_db') cursor = connection.cursor() cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10") for row in cursor.fetchall(): print "<li>%s</li>"%row[10] print "</ul>" print "</body></html>" connection.close()
首先,用户请求cgi,脚本代码打印Content-Type行,后面跟着换行。再接下来是一些html的起始标签,然后连接数据库并执行一些查询操作,获取最新的十本书。在便利这些书的同时,生成一个书名的html列表项,最后输出html结束标签并关闭数据库连接。
尽管实现简单,还是有些问题和不便的地方。
--应用中有多处需要连接数据库会怎样?每个独立的cgi脚本不应该重复写数据库连接的代码,比较实用的办法是写一个共享函数,可以被多个代码调用。
--初始化和释放相关的工作应该交给通用的框架来完成
--如果代码被重用到一个符合的环境中,每个页面对应独立的数据库和密码么?
--如果web设计师,完全没有python开发经验,但是有需要重新设计页面的话,又将发生什么呢?一个字符写错了,可能导致整个应用崩溃。理想的情况,页面显示的逻辑从数据库中读取书本记录分隔开来,这样web设计师重新设计不会 影响到之前的业务逻辑。
Django的MVC设计模式
Django哦你改过3个python文件和html模板文件来完成以上功能。
分别是models.py ,views.py ,urls.py和latest_books.html
#models.py (the datebase tables) from django.db import models class Book(models.Model): name = models.CharField(max_length=50) pub_date=models.DateField() #views.py (the business logic) from django.shortcuts import render_to_response from models import Book def latest_books(request): book_list=Book.objects.order_by('-pub_date')[:10] return render_to_response('latest_books.html',{'book_list':book_list}) #urls.py (the URL configuration) from django.conf.urls.defaults import * import views urlpatterns=pattern(''.(r'^latest/$',view.latest_books),) #latest_books.html (the template) <html><head><title>Books</title></head> <body> <h1>Books</h1> <ul> {% for book in book_list %} <li> {{book.name}}</li> {% endfor %} </ul> </body></html>
不用关心语法细节;秩序关注分隔后的几个文件:
--models.py 主要用一个python类来描述数据表,成为模型(model)。运用这个类,可以通过简单的python代码来创建、检索、更新、删除数据库中的记录而无需写一条又一条SQL语句。
--views.py文件包含了页面的业务逻辑。latest_books()函数叫做视图。
--urls.py指出了什么样的URL调用什么的视图,/latest/URL将会调用latest_books()这个函数,换句话说,如果域名是example.com,那么浏览网址http://example.com/latest/将会调用latest_books()这个函数
--latest_books.html是html模板,描述了这个页面是如何设计的,使用带基本逻辑声明的模板语言,如{% for book in book_list %}。
结合起来,这种模式成为模型-视图-控制器(MVC),简单说,MVC是一种软件开发的方法,把代码的定义和数据访问的方法(模型)与请求逻辑(控制器)还有用户接口(视图)分开来。