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 %}

 

posted @ 2010-04-13 11:14  听风  阅读(843)  评论(0编辑  收藏  举报