Django学习--介绍Django

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是一种软件开发的方法,把代码的定义和数据访问的方法(模型)与请求逻辑(控制器)还有用户接口(视图)分开来。

原文地址:https://www.cnblogs.com/dawnpower/p/4259819.html