概述
历史
许多年前,劳伦斯出版集团需要开发一个以新闻内容为主的网站。
众所周知,对于新闻网站来说,需求变化很快,互动性也很高。
于是,world online的三位工程师使用python开发了Django。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
Django:--完美主义者快速开发之选
设计哲学
Django的主要目的是简便、快速地开发数据库驱动的网站——动态网站。Django强调代码复用,多个组件可以方便地以“插件”形式服务于整个框架,Django有许多功能强大的第三方插件。
Django强调快速开发
基于MVC(更确切的说是MTV)
安装
安装pythonPip install django
或者
Easy_install django
Django应用
Google appEngine豆瓣部分使用django
爱调研http://www.idiaoyan.com
海报网www.haibao.cn63万PV
http://www.djangosites.org/列举更多国外知名网站
IDE
Eclipse插件功能强大,耗内存
Vim
可使用pysmell插件
idle
带有提示功能,文件少时候比较好用
Geany
提示功能再强化一点就完美了
PyCharm
收费
入门示例
WEB系统需解决
Web请求与web后端处理的映射; 动态数据的展示;
请求的验证(客户端+服务器端);
数据的处理;
数据的持久化;
Django提供urls模块处理映射、template模板用于数据展示、form模块用于服务器端验证+客户端结果展示、Django-ORM框架用于持久化。
开发图书库存系统
1.创建项目
django-admin startproject bookstore2.创建模块
cd bookstorepython manage.py startapp books
3 写model
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=200)
addr = models.CharField(max_length=200)
class Book(models.Model):
name = models.CharField(max_length=200)
author = models.CharField(max_length=200)
publisher = models.ForeignKey(Publisher)
4增加books模块
setting.py里增加:INSTALLED_APPS += ('books',)
5设置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add
'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'bookstore.db', # Or path to
database file if using sqlite3....}}
6 启用admin模块
setting.py里增加:INSTALLED_APPS += ('django.contrib.admin',)
urls.py里增加:
from django.contrib import admin
admin.autodiscover()
url(r'^admin/', include(admin.site.urls)),
7 给admin模块注册model
vim books/admin.py添加:from django.contrib import admin
from books.models import Book,Publisher
admin.site.register(Book)
admin.site.register(Publisher)
8 初始化数据库
python manage.py syncdb
这里会提示创建一个admin用户,输入密码,一会儿可以用于登录
9 启动server
python manage.py runserver
10 试试成果
登录http://127.0.0.1:8000/admin/
原理介绍
mvc模型
MVC把web分为数据模型,控制器和视图三层,可以使业务逻辑与数据表现分开;
Django是MTV分层
Django遵循了MVC(model-view-controller)这个分层方式,但是确切的说是MTV分层。Mmodel,数据模型
Ttemplate,模板
Vview,视图
Model层
1、使用的是ORM2、我们所能控制的就是models.py文件
3、负责数据库管理
models.py文件,一个类对应数据库的一张表
class Publisher(models.Model):
name = models.CharField(max_length=200)
addr = models.CharField(max_length=200)
def __unicode__(self):
return self.name
class Book(models.Model):
name = models.CharField(max_length=200)
author = models.CharField(max_length=200)
publisher = models.ForeignKey(Publisher)
def __unicode__(self):
return self.name
Template层
1、负责怎么样显示数据2、说白了,就是利用一些格式化的html文件,使数据按照要求显示(显示在哪里,怎么显示等等)
3、需要在工程目录下,建立templates文件夹,然后在setting.py中设置好templates目录的路径。然后在此目录中建立所需html文件。
Template示例,index.html
{% if book_list %}
<ul>
{% for book in book_list %}
<li><a href="/book/{{ book.id }}/">{{ book.name
}}</a> {{ book.author }} {{ book.publisher }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books are available.</p>
{% endif %}
View层
1、django中的view层是用于控制要显示什么数据2、我们能看到的就是views.py文件
文件是views.py,既然是要控制显示的数据,那么要显示之前的book数据呢?
def index(request):
book_list = Book.objects.all()
return
render_to_response('books/index.html',{'book_l
ist': book_list})
最后就差URLconf把模型,模板和视图串联起
来了。
在urls.py文件中:
urlpatterns = patterns('',
url(r'^index$', 'books.views.index'),
url(r'^admin/', include(admin.site.urls)),
)
运转过程
在浏览器中输入127.0.0.1:8000/indexDjango会根据urls.py文件找到bookstore文件夹下books目录中的views.py文件中index函数,然后根据model.py文件找到数据库中Book表中数据,并输出到index.html文件中,最后浏览器渲染出我们所需的网页。
Django的过程
Web服务器收到一个http请求Django把web服务器传过来的请求转换成一个请求对象Django在URLconf里查找正确的视图函数调用这个视图函数,参数为请求对象以及任何捕捉到的URL参数然后视图会创建并返回一个响应对象
Django将这个响应对象转换成web服务器可以理解的格式
Web服务器将响应发送给客户端
参考资料:
官方文档:https://docs.djangoproject.com/en/1.5/
中文版:
http://django-document-cn.readthedocs.org/en/latest/index.html
http://djangobook.py3k.cn/2.0/