DjangoBook笔记-1
#!/usr/bin/env python # -*- coding:utf-8 -*- """Django学习记录 目前学习范本为:http://djangobook.py3k.cn/2.0 """ ## engine start: 2010-4-12 1. 安装 安装过程方法略,不同系统平台下方式各异 简单的方法是使用easy_install 检查安装效果 import django print django.VERSION 2. 创建项目 python django-admin.py startproject mysite # mysite替换成自己的项目名 创建好项目后会建立以项目名命名的文件夹,文件夹结构: mysite/ __init__.py manage.py # manage.py help 查看帮助 settings.py # 项目配置、DB设置等 urls.py # url映射配置 上面创建项目后即可组成一个最简单的发布服务形式 3. 运行开发服务器 内建webserver启动方式: python manage.py runserver 添加其他参数 python manage.py runserver 8080 # 8080端口 python manage.py runserver 192.168.8.33:8080 4. 创建页面视图 创建一个views.py文件(潜规则名称),用以进行页面内容的展示。 from django.http import HttpResponse def hello(request): # 每个函数视图最少有一个request return HttpResponse("hello django world") 5. 配置url 在settings.py中 ROOT_URLCONF = "mysite.urls" 指明了通过url.py文件来进行url的配置和查找 默认的url.py内容结构(排除注释): from django.conf.urls.defaults import * urlpatterns = patterns("", ) 要添加前面的hello视图,需要引入并配置 引入函数: from mysite.views import hello 在patterns中添加映射: urlpatterns = patterns("", ("^hello/$", hello), # url地址使用了正则式,另外注意括号后面添加逗号 ) 这时再runserver的话,通过访问 http://localhost:8080/hello/ 便可得到我们的结果 url中正则表达式的配置又是一门学问,可以进行动态url的配置 url配置中还有include用法,在subapp中会用到 6. shell 启动交互命令环境的方式: python manage.py shell 在该环境下默认引入了当前项目的配置 7. 模板系统 7.1 模板基础 变量 {{ item }} 控制结构 {% if value is True %} ... {% else %} # 没有 elif 标签 ... {% endif %} {% for item in item_list %} ... {% endfor %} for循环中有一个 forloop 模板变量 forloop.counter # 当前循环执行次数 forloop.counter0 # 循环从0开始计数 forloop.first # 布尔值,判断是否为首次执行 forloop.last forloop.parentloop # 当前循环上级循环forloop {% ifequal %} # 等值判断 ... {% else %} ... {% endifequal %} 注释 {# ... #} 过滤器 {{ name|lower }} {{ my_list|first|upper }} {{ bio|truncatewords:"30" }} {{ put_date|date:"F j, Y" }} 管道用法还不是很明白,以后再参看unix文章进行了解 7.2 使用模板 引入模板模块 from django import template 详细引用 from django.template import Template, Context, ... 在settings.py中配置模板文档位置 TEMPLATE_DIRS = ( "/home/django/mysite/templates", # 一样后面有逗号 ) 跨平台通吃的配置方式,模板位于templates文件夹中: import os.path TEMPLATE_DIRS = ( os.path.join(os.path.dirname(__file__), "templates").replace("\\","/"), ) 在视图view.py中指定模板文件 from django.template.loader import get_template def current_datetime(request): now = datetime.datetime.now() t = get_template("current_datetime.html") html = t.render(Context({"current_date": now})) return HttpResponse(html) 使用简化的render_to_response()方法 上面的方案繁琐,django提供简化的方式,完整的视图定义: from django.shortcuts import render_to_response from datetime import datetime def current_datetime(request): now = datetime.now() return render_to_response("current_datetime.html", {"current_date": now}) render_to_response第一个参数为模板文件,第二个参数为传值字典 render_to_response使用的模板可以多级调用 render_to_response("datetime/current_datetime.html", locals()) 7.3 模板高级 包含机制 {% include %} 可以在模板文件中使用该标签来包含其他文件的内容,如 {% include "nav.html" %} 继承机制 {% extends %} 编制base.html来实现基础框架,通过{% extends "base.html" %}来扩展 扩展的依据是覆盖机制,需要通过{% block %}来实现 块级定义 {% block %} 将模板中某一组聚集成一个block块,在继承的时候可以直接重写该block 如:{% block title %}home{% endblock %}{% block body %}test...{% endblock %}