Welcome to Django!
Welcome to Django!
实验简介
Django是一个可以使Web开发工作更加高效愉快的Web开发框架。Django可以让你用最小的代价构建和维护更高质量的Web应用程序。
从好的方面来看,Web开发是一项有趣和充满创造性的事;但是另一方面,Web开发又可能是一项繁琐令人生厌的工作。通过减少重复的部分,Django能让你专注于Web程序的核心,从而让开发更加有趣。为了达到这个目标,Django提供了通用Web开发模式的高度抽象,一些常见任务的快捷方式,还为“如何解决问题”提供了清晰明了的约定。同时,Django尝试留下一些方法,来让你根据自己的需要在framework之外来开发。
关于发音
Django, 应该读作jan go,读音演示 D是不发音的~~~发音的~~~音的~~~的~~~
MVC设计模式
让我们来研究一个简单的例子,通过这个实例,你可以看出用Web框架方式与之前的做法有什么不同。首先,我们将内容分隔到3个Python的文件中models.py、views.py、urls.py 和一个模板文件( latest_books.html )。
models.py (数据库表)
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=50)
pub_date = models.DateField()
views.py (业务逻辑层)
from django.shortcuts import render
from models import Book
def latest_books(request):
book_list = Book.objects.order_by('-pub_date')[:10]
return render(request, 'latest_books.html', {'book_list': book_list})
urls.py (URL配置)
from django.conf.urls.defaults import *
import views
urlpatterns = patterns('',
(r'^latest/$', views.latest_books),
)
latest_books.html (模板文件)
<html><head><title>Books</title></head>
<body>
<h1>Books</h1>
<ul>
{% for book in book_list %}
<li>{{ book.name }}</li>
{% endfor %}
</ul>
</body></html>
现在,我们不需要太专注语法细节,只需要注意这里实现的方式。 这里要重点提到的是 重点分离 (separation of concerns):
models.py 中用一个Python类来描述一个数据库中的表,被称作 模型 (model)。通过这个类,你可以通过简单的Python代码来对数据库中的记录进行增删改查(创建,检索,更新,删除),而无需你去写一条一条的SQL语句。
views.py 中包含了页面的业务逻辑。 latest_books() 方法叫做 视图 (view)。
urls.py 指定视图和URL的关系,即什么样的URL调用哪个的视图。在这个例子中, /lastest/ URL 会调用 latest_books() 这个方法。换句话说如果你的域名是example.com,任何人访问http://example.com/latest/
就会调用 latest_books() 。
latest_books.html 是HTML模板,它定义了这个页面的设计,模板中使用了带基本逻辑语句的模板语言,比如 {% for book in book_list %}
这部分代码松散地遵循了模型-视图-控制器(MVC)的设计模式。简单来说,MVC是一种软件开发的方法,它把定义和访问 数据的代码(模型 model)和控制请求逻辑的代码(控制器 controller)和用户接口(视图 view)分割开来。我们会在以后更加深入地讨论MVC。
这个方法最重要的优点在于它的各个部分都是 松耦合 (loosely coupled)的。这样用Django开发的Web程序中每个部分都有它自己单一的目的,并且可以单独地被修改而不会影响到其他部分。比方说,一个程序员可以在不影响底层实现的情况下修改URL;设计师可以不需要接触Python的代码就修改页面的HTML;数据库管理员在重命名数据表之后只需要修改一个地方就可以了,而不需要在一大堆文件中查找替换。
Django的版本
本课程基于Django 1.4
Django的开发尽量保证版本向后兼容,但是仍然可能会添加一些不向后兼容的改变。每个版本的更新通常都会 记录在relase note中,你可以到https://docs.djangoproject.com/en/dev/releases/1.X (X请用相应的版本替换,eg:1.4、1.7)查看。
一点提示
本课程基于《The Django Book》改编,想查看更多的资料: 老版本django book: http://djangobook.py3k.cn/2.0/ 新版本django book(翻译中):http://djangobook-cn.readthedocs.org/en/latest/ 在学习过程中,想了解更多,必须得官方文档啊! https://www.djangoproject.com/
有问题,要提问呀! 社区邮件列表,你值得拥有: https://groups.google.com/forum/#!forum/django-users
Django的一个最大的优势就是她有一群乐于助人的人活跃在Django社区里。 你在Django中遇到的任何问题,从安装,程序设计,数据库设计到部署,都可以在上面寻求帮助。
django-users邮件列表上面有上万的Django用户,活跃着讨论问题。可以到 http://www.djangoproject.com/r/django-users 免费注册。 如果碰到棘手的问题,想要得到及时的回复,可以到Django IRC channel寻求帮助。加入方法是在Freenode IRC network上加入#django。
上面那个链接,一看就是要穿越长城的, 如果能量不足,Django中国社区 :)
《The Django Book》是在Django1.0的基础来的,所以有很多的新特性并没有加入,特别是在模板和模型里边,所以本课程中的东西只是入门而已,请一定去翻看对应的django版本的官方文档,尽管他是英文的。
小结
Django是用Python实现的一个Web开发框架,它遵从MVC模式,能快速地开发Web应用。
Welcome to Django!的更多相关文章
- django测试开发-1.开始Hello django!
用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,本篇写一个简单的“hello django! ...
- python之Django学习笔记(三)---URL调度/URL路由
在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器
nginx+uWSGI+django+virtualenv+supervisor发布web服务器 导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以 ...
- 部署 Django
补充说明:关于项目部署,历来是开发和运维人员的痛点.造成部署困难的主要原因之一是大家的Linux环境不同,这包括发行版.解释器.插件.运行库.配置.版本级别等等太多太多的细节.因此,一个成功的部署案例 ...
- Django第一步
对于一个web框架,掌握了三部分的内容,就可以说是迈出了第一步. 1. 准备开发环境 2. 创建一个工程,并运行 3. 开发hello world应用 1. 准备环境 首先应该是安装python和dj ...
- 12,nginx+uWSGI+django+virtualenv+supervisor发布web服务器
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求) 基于wsgi运行的框架 ...
- 08 nginx+uWSGI+django+virtualenv+supervisor发布web服务器
一.为什么要用nginx,uwsgi? 1 首先nginx 是对外的服务接口,外部浏览器通过url访问nginx, 2nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静 ...
- nginx+uWSGI+django+virtualenv+supervisor发布web服务器流程
导论 WSGI是Web服务器网关接口.它是一个规范,描述了Web服务器如何与Web应用程序通信,以及Web应用程序如何链接在一起以处理一个请求,(接收请求,处理请求,响应请求)基于wsgi运行的框架有 ...
- 16 . PythonWeb框架之Django
Web框架简介 Web开发是Python语言应用领域的重要部分,也是目前最主要的Web开发语言之一,在其二十多年的历史中出现了数十种Web框架,比如Django.Tornado.Flask.Twist ...
随机推荐
- json 的循环输出
json不能用for-of循环,会报错 可以用for-in循环: var json = {'a':'apple','b':'banana','c':'orange','d':'pear'}; for( ...
- RobotFramework下的http接口自动化Get Response Status 关键字的使用
Get Response Status 关键字用来获取http请求返回的http状态码. 示例1:访问苏宁易购网站上的http推荐接口,使用Get Response Status 关键字来获取返回的h ...
- 移动端的silder,未封装,基于zepto的touch模块,有参照修改过touch的bug
<!--html模块--> <header class="appoin-head"> <ul> <li class="aa&qu ...
- 【LightOJ1259】Goldbach`s Conjecture(数论)
[LightOJ1259]Goldbach`s Conjecture(数论) 题面 Vjudge T组询问,每组询问是一个偶数n 验证哥德巴赫猜想 回答n=a+b 且a,b(a<=b)是质数的方 ...
- [NOI2006]神奇口袋
题面在这里 题意 开始时袋中有\(t\)种小球,第\(i\)种小球有\(t_i\)个,之后每次等概率取出一个球,第\(i\)次取球时观察这个球的颜色\(c_i\)放回并向袋中加入\(d\)个颜色为\( ...
- [BZOJ1024] [SCOI2009] 生日快乐 (搜索)
Description windy的生日到了,为了庆祝生日,他的朋友们帮他买了一个边长分别为 X 和 Y 的矩形蛋糕.现在包括windy,一共有 N 个人来分这块大蛋糕,要求每个人必须获得相同面积的蛋 ...
- gulp配置
/* gulp配置 */ /* gulp配置 */ var gulp = require('gulp'), concat = require('gulp-concat'), rename = requ ...
- python函数学习(一)
1.parse_known_args()和parse_args()函数 该函数为命令行解析函数,调用时需要import argparse(命令行选项.参数和子命令的解析器). 以下内容摘自python ...
- 【Unity3D与23种设计模式】中介者模式(Mediator)
GoF中定义: 定义一个接口来封装一群对象的互动行为 中介者通过移除对象之间的引用 以减少他们之间的耦合度 并且能改变它们之间的互动独立性 游戏做的越大,系统划分的也就越多 如事件系统,关卡系统,信息 ...
- 如何修改Jmeter配置使能支持更大并发
Jmeter做并发测试时,报错 java.lang.OutOfMemoryError:gc overhead limit exceeded. 原因是jmeter默认分配内存的参数很小,256M吧.故而 ...