1、Django是一个与python结合的web开发框架,采用模型-视图-控制器(MVC)设计模式
MVC 设计模式,一个简单的实例通常包含(models.py,views.py, urls.py) 和html模板文件
models.py文件主要用一个 Python 类来描述数据表。 称为 模型(model)。 运用这个类,你可以通过简单的 Python 的代码来创建、检索、更新、删除 数据库中的记录而无需写一条又一条的SQL语句。
views.py文件包含了页面的业务逻辑。
urls.py指出了什么样的 URL 调用什么的视图。
html 模板,它描述了这个页面的设计是如何的。 使用带基本逻辑声明的模板语言,如{% for book in book_list %}
2、视图和url
视图:一个视图就是Python写的函数集合,也可以理解是处理逻辑的一段代码。
每一个视图 总是以一个 HttpRequest 对象作为 它的第一个参数
一个简单的view例子如下
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world")
URLconf(即 urls.py),本质是 URL 模式以及要为该 URL 模式调用的视图函数之间
的映射表,告知Django,哪个url调用哪段代码,一个简单的urls例子如下
from django.conf.urls.defaults import *
from mysite.views import hello
urlpatterns = patterns('',('^hello/$', hello),)
一个客户端的web请求过程,后台的工作如下
1. 进来的请求转入/hello/.
2. Django通过在settings.py的ROOT_URLCONF配置来决定根URLconf.
3. Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
4. 如果找到匹配,将调用相应的视图函数
5. 视图函数返回一个HttpResponse
6. Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
3、模板
模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文档。
一个简单的模板例子
<html>
<head><title>Ordering notice</title></head>
<body>
<h1>Ordering notice</h1>
<p>Dear {{ person_name }},</p>
<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>
<p>Here are the items you've ordered:</p>
djangobook.py3k.cn/2.0/chapter04/ 1/25
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% if ordered_warranty %}
<p>Your warranty information will be included in the packaging.</p>
{% else %}
<p>You didn't order a warranty, so you're on your own when
the products inevitably stop working.</p>
{% endif %}
<p>Sincerely,<br />{{ company }}</p>
</body>
</html>
用两个大括号括起来的文字(例如 {{ person_name }} )称为 变量(variable)
被大括号和百分号包围的文本(例如 {% if ordered_warranty %})是 模板标签(template tag),模板标签分为for标签( {% for item in item_list %} )和if 标签({% if ordered_warranty %} )一
注意:{% if %}标签不允许在同一个标签中同时使用 and和 or,因为逻辑上可能模糊的,一定要用 {% endif %}关闭每一个 {% if %}标签
在每个`` {% for %}``循环里有一个称为`` forloop`` 的模板变量。这个变量有一些提示循环进度信息的属性
forloop.counter(forloop.counter0):循环次数计数器,前者从1开始计数,后者从0开始
forloop.revcounter(forloop.revcounter0:记录循环剩余循环次数,前者最后值为1,后者为0
forloop.first:bool值类型,第一次执行被置为""
forloop.last:最后一次执行被置为true
forloop.panrentloop 外层循环的forloop对象
一个简单传递值到模板的例子
>>> from django.template import Context, Template
>>> t = Template('My name is {{ name }}.')
>>> c = Context({'name': 'Stephane'})//Context和字典很类似,用来给模板中所有的变量赋值
>>> t.render(c)//返回的值是一个Unicode对象
u'My name is Stephane.'
一个模板与视图结合的例子
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime
def current_datetime(request):
now = datetime.datetime.now()
t = get_template('current_datetime.html')
html = t.render(Context({'current_date': now}))
return HttpResponse(html)
一个使用rende_to_response()的实现模板与视图结合例子
from django.shortcuts import render_to_response
import datetime
def current_datetime(request):
current_date = datetime.datetime.now()
return render_to_response('current_datetime.html', locals())
//内建函数 locals()。它返回的字典对所有局部变量的名称与值进行映射
我自己也小试牛刀了下
view代码如下
#!/usr/bin/python
# -*- coding: utf-8 -*-
#coding=utf-8
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
from django.shortcuts import render_to_response
import datetime
def hello(request):
return HttpResponse("Hello world")
def first(request):
ship_date = datetime.datetime.now()
person_name='邹柳云'
item_list=('西瓜','火龙果','蛋挞')
ordered_warranty='true'
company='上海锐战'
print locals()
return render_to_response('template.html', locals())
url代码如下
from django.conf.urls import *
from mysite.views import hello,first
urlpatterns = patterns('',
('^hello/$', hello),
('^first/$', first),
)
template如下
<html>
<head><title>Ordering notice</title></head>
<body>
<h1>Ordering notice</h1>
<p>Dear {{ person_name }},</p>
<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>
<p>Here are the items you've ordered:</p>
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% if ordered_warranty %}
<p>Your warranty information will be included in the packaging.</p>
{% else %}
<p>You didn't order a warranty, so you're on your own when
the products inevitably stop working.</p>
{% endif %}
<p>Sincerely,<br />{{ company }}</p>
</body>
</html>
最终web显示如下
python manage.py runserver 0.0.0.0:8000 #开启web服务
讲完上面的内容,接下来讲讲各种模型啦