Chapter 1 简介
Django:一款能够节约你的时间并且让开发乐趣横生的python web开发框架。
Web框架:将动态web开发中的一些通用开发步骤抽象后形成的组件或类库。
Chapter 2 开始Django
1 安装python
1.1 windows下python安装好后,配置windows环境变量
> 我的电脑-属性-高级系统设置-环境变量-系统变量
> 给Path变量添加python安装路径,如D:Python27
1.2 可在eclips下通过pydev组件进行python开发。
2 安装django (windows)
2.0 确保已装python
2.1 下载安装包,解压
2.2 cmd模式进入django目录,执行 python setup.py install
2.3 检查,打开python解释器
>>> import django
>>> django.VERSION
2.4 eclipse中也可添加django插件,方便开发。
3 安装数据库
3.1 这里选择mysql
3.2 推荐安装DB管理工具Navicat for MySQL
4 建立一个django工程
4.1 命令行方式:
代码语言:javascript复制# windows中,添加django管理工具脚本的环境变量 如:D:Program FilesDjango-1.3.1djangobin
cmd > django-admin.py startproject mysite
# 命令在当前目录创建一个 mysite 目录
# 此时mysite目录中包含4个文件
代码语言:javascript复制 mysite/
__init__.py # 让python把本目录当成一个开发包
manage.py # 命令行工具,可让你与django交互
settings.py # 配置文件(多读几遍该文件)
urls.py # url声明
4.2 eclipse 方式
# 建立一个以mystie命名的django工程即可 File - New -Project - Pydev - Django Project
4.3 运行 (django内置了一个测试用web server)
#运行 python manage.py runserver 命令
# 打开http://127.0.0.1:8000/
# 在eclipse中右键工程目录,run as - pydev django
Chapter 3 动态网页基础
0 怎么做一个 Django-powered 页面?
只需要写视图函数并用 URLconfs把它们和URLs对应起来。
1 视图文件views.py
视图函数(或 视图 ),是一个接受 Web 请求并返回 Web 响应的 Python 函数。
2 URLconf --urls.py
代码语言:javascript复制 # URLconf的本质是一个映射表,将web目录与视图函数对应起来。
# 对于一个url调用一个视图函数时要先保证已经import了该视图函数。
from django.conf.urls.defaults import *
from mysite.views import current_datetime
urlpatterns = patterns('',
(r'^time/$', current_datetime),
)
# url中的正则表达式
代码语言:javascript复制 . (dot) 任意字符
d 任意数字
[A-Z] 任意字符, A-Z (大写)
[a-z] 任意字符, a-z (小写)
[A-Za-z] 任意字符, a-z (不区分大小写)
匹配一个或更多 (例如, d 匹配一个或多个数字字符)
[^/] 不是/的任意字符
* 匹配0个或更多 (例如, d* 匹配0个或更多数字字符)
{1,3} 匹配1个到3个(包含)
chapter 4 Django模版系统 Template System
将python代码编写与html设计分离,让代码易于维护。
使用Django模板系统的基本规则:写模板,创建 Template 对象,创建 Context ,调用 render() 方法。
1. 模板系统基本知识
代码语言:javascript复制 #模板是一段添加了些许变量和模板标签的基础 HTML
变量: {{ variable}}
控制语句: {% if something %} {% endif %}
{% for item in list %} {% endfor %}
{% ifequal var currnetuser %}<h1>Welcome</h1>{% endifequal %}
过滤器: 如 {{ship_date|date:"F j, Y" }} (后续深入了解)
注释: {# hi #}
2 如何使用template
2.1 创建一个Template对象
Template 类就在 django.template 模块中
2.2 调用Template对象的render()方法并提供变量。
3 模版设计哲学
# 业务逻辑与表现逻辑分离
# 语法不受HTML/XML束缚
# 假定设计师精通HTML,假定设计师不是python程序猿
# 目标并不是发明一种变成语言
4 模版加载
通常模版被保存于磁盘文件中,为减少每次调用模版的冗余代码,Django提供了一种API。
代码语言:javascript复制 4.1,应告诉框架模版的保存位置。
setting.py中
TEMPLATE_DIRS=(
'/home/django/mysit/templates', # 可指定任意位置
推荐:
import os.path
TEMPLATE_DIRS=(
os.path.join(os.path.dirname(__file__),'templates').replace('\','/'),
)
# 该例python内部变量__file__被自动设为代码所在的模块文件名
4.2 建立模版文件
4.3 在视图文件中载入模版文件current_datatime.html
代码语言:javascript复制 django.template.loader.get_template()
或
from django.template.loader import get_tempalte
t=get_template('dateapp/current_datetime.html') # dateapp表示在模版目录templates中还有子目录
5 优化
代码语言:javascript复制 5.1 render_to_response
# 用一行代码来完成加载模版,填充context,返回httpresponse对象
如:render_to_response(template_file,context_dictionary)
from django.shotcuts import render_to_response
import datetime
def current_time(requset):
now=datetime.datetime.now()
return render_to_response('current_datetime.html',{'time':now})
5.2 locals()技巧
代码语言:javascript复制 函数中的变量和模版中命名相同,在render_to_response中使用local()方法填充模版。
time=datetime.datetime.now()
return render_to_response('current_datetime.html',locals())
6 模版继承
先构造一个基础模版框架,然后在其子模板中对它进行重载。
代码语言:javascript复制6.1 建立基础模版
base.html
<html>
{%block title%}{%endblock%}
</html>
注意:不可在同一模版中定义多个同名block
6.2 继承模版
代码语言:javascript复制 {% extends "base.html"%} # extend关键字用来声明继承模版
{%block title%}The current time{% endblock %}
Chatper 5 数据建模
1 MTV
Moder 模型:数据存取层
Template 模版: 表现层
View 视图: 业务逻辑层
2 models.py
代码语言:javascript复制 ##建表
from django.db import models
# Create your models here.
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province=models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
flag = models.BooleanField(u"是否标记", default=False)
def __str__(self):
return self.name
##插入
代码语言:javascript复制 p1 = Publisher(name='tim',address='street road',city='NY',
state_province='guangdong',country='U.S.A',
website='www.fankhu.com')
p1.save()
##修改
代码语言:javascript复制 p1.website='www.tim.com' #
##查询
代码语言:javascript复制 s1=Publisher.objects.filter(name='tim')
print s1.name,s1.address
s2=Publisher.objects.all()
for i in s2:
print i.name,i.country
##删除
代码语言:javascript复制 s2.delete()
##排除 & 排序
代码语言:javascript复制 ops_instance = Ops.objects.filter(biz__cc_id = biz_cc_id).exclude(status=0).order_by('-end_time')
Open_history.objects.exclude(status__in=[0,3]).exclude(process_code=1) #两个exclude表示 排除条件是与关系,如果exclude里有多条字段,则字段间是或的关系
Chatper 6 站点管理
1 取消注释:url.py中
代码语言:javascript复制 admin.autodiscover()
setting.py INSTALL_APPS中
django.contrib.auth
django.contrib.sessions
django.contrib.contenttypes
2 激活站点管理
代码语言:javascript复制 新建admin.py
from books.models import Publisher
from django.contrib import admin
admin.site.register(Publisher)
# 此时在admin界面就可以对数据库进行操作
Chapter 7 表单处理
1 在views.py中定义表单处理视图
代码语言:javascript复制 from django.db.models import Q
from django.shortcuts import render_to_response
from models import Book
...
def search(request): # request对象,浏览器发送过来的请求对象
query = request.GET.get('q','') # q html页面中定义的参数名
...
results = Book.objects.filter(qset).distinct() # 数据处理逻辑
return render_to_response("book/search.html",{ # template模板
"result": results,
"query": query,
})
2 技巧:在POST之后立即重定向
3 从模型创建表单
代码语言:javascript复制 #定义表单 forms.py
from django import forms
from models import Publisher
from django.forms import ModelForm
class PublisherForm(ModelForm):
class Meta:
model=Publisher
# views.py
from books.models import Publisher
from forms import PublisherForm
from django.template import RequestContext
from django.http import HttpResponseRedirect
def add_publisher(request):
if request.method == 'POST':
form = PublisherForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/time/')
else:
form =PublisherForm()
return render_to_response('add_publisher.html',{'form':form},
context_instance=RequestContext(request)) #CSRF设置,否则报错 ??
#视图函数add_publisher.html
代码语言:javascript复制 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang='en'>
<head>
<title>add_publisher</title>
</head>
<body>
<h1>Add publisher</h1>
<form action="." method="POST">
{% csrf_token %} # CSRF设置,否则报错
<table>
{{ form.as_table}}
</table>
<p><input type="submit" value="submit"></p>
</form>
</body>
</html>