﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-流浪的蜗牛-文章分类-python</title><link>http://www.blogjava.net/vagasnail/category/42603.html</link><description>读历史、看小说、写程序都是我所爱。</description><language>zh-cn</language><lastBuildDate>Fri, 06 Nov 2009 19:39:19 GMT</lastBuildDate><pubDate>Fri, 06 Nov 2009 19:39:19 GMT</pubDate><ttl>60</ttl><item><title>python入门</title><link>http://www.blogjava.net/vagasnail/articles/301140.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 12:50:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301140.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301140.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301140.html</trackback:ping><description><![CDATA[
		<p>1. Python 的主提示符( &gt;&gt;&gt; )和次提示符( ... )，主提示符是解释器告诉你它在等待你输入下一</p>
		<p>个语句，次提示符告诉你解释器正在等待你输入当前语句的其它部分。</p>
		<p>2. 语句和表达式（函数、算术表达式等）<br /> 语句使用关键字来组成命令，类似告诉解释器一个命令。你告诉Python 做什么，它就为你做什</p>
		<p>么，语句可以有输出，也可以没有输出。<br /> 表达式没有关键字。它们可以是使用数学运算符构成的算术表达式，也可以是使用括号调用的</p>
		<p>函数。它们可以接受用户输入，也可以不接受，有些有输出，有些则没有。<br />简单说，语句就是命令(必须使用关键字)，其它就是表达式（而表达式算术表达式或函数(指整个函数对</p>
		<p>象)）。</p>
		<p>3. 符号 &gt;&gt; 用来重定向输出<br />print 语句也是支持从定向的。可以将print语句输出流重定向到标志流，或者是文件上。<br />raw_input() 接受用户的输入<br />  <br />  4.  python语法规则<br />1)、Python 有两种除法运算符，单斜杠用作传统除法，<br />双斜杠用作浮点除法（对结果进行四舍五入）。传统除法是指如果两个操作数都是整数的话，它将执行</p>
		<p>是地板除(取比商小的最大整数)，而浮点除法是真正的除法，不管操作数是什么类型，浮点除法总是执</p>
		<p>行真正的除法。<br />还有一个乘方运算符， 双星号(**)。<br />2)、Python 也提供了逻辑运算符：<br />and  or  not<br />   3)、Python 不支持C 语言中的自增1 和自减1 运算。<br />4)、Python 支持五种基本数字类型，其中有三种是整数类型。<br />􀁺  * int (有符号整数)<br />􀁺   * long (长整数)<br />􀁺  * bool (布尔值)<br />􀁺   * float (浮点值)<br />* complex (复数)<br />事实上，Python 长整数仅受限于用户计算机的虚拟内存总数。类似于Java中的BigInteger<br />第六种数字类型， decimal， 用于十进制浮点数。类似于Java中的Decimal。<br /> <br />5. 字符串<br /> 加号( + )用于字符串连接运算，星号( * )则用于字符串重复。<br />字符串有其特有的索引规则：第一个字符的索引是 0，最后一个字符的索引是 – 1。</p>
		<p>6. 列表和元组<br /> 列表和元组有几处重要的区别：<br />      列表元素用中括号( [ ])包裹，元素的个数及元素的值可以改变。元组元素用小括号(())</p>
		<p>包裹，也可以不加括号，不可以更改（尽管他们的内容可以）。元组可以看成是只读的列表。</p>
		<p>7. 字典<br />字典是Python 中的映射数据类型，类似于Java中的Map。<br />几乎所有类型的Python 对象都可以用作键，不过一般还是以数字或者字符串最为常用。<br />值可以是任意类型的Python 对象，字典元素用大括号({ })包裹。</p>
		<p>8. 代码块及缩进对齐<br />代码块通过缩进对齐表达代码逻辑而不是使用大括号，因为没有了额外的字符，程序的可读性更高。而</p>
		<p>且缩进完全能够清楚地表达一个语句属于哪个代码块。当然，代码块也可以只有一个语句组成。<br />  <br />9. 条件及循环语句<br />1)、if语句<br />if expression:<br />if_suite<br />如果表达式的值非0 或者为布尔值True, 则代码组 if_suite 被执行; 否则就去执行下一条语句。 代码</p>
		<p>组是一个Python 术语， 它由一条或多条语句组成，表示一个子代码块。<br />Python 还支持 elif （意指 “else-if ”）语句。<br /> 新的条件式x = true_value if condition else false_value<br />如果要表示明确可以加上圆括号。</p>
		<p>   2)、while语句(略)<br />  <br />   3)、for语句和range()内建函数<br />Python 中的for 循环与传统的for 循环（计数器循环）不太一样， 它更象shell 脚本里的 foreach 迭</p>
		<p>代。<br />要使用的数值范围可能会经常变化，Python 提供了一个range([start]stop[step])内建函数来生成这种</p>
		<p>列表。它正好能满足我们的需要，接受一个数值范围，生成一个列表。通过使用range()函数就可以使</p>
		<p>python中的for循环和传统的计数循环一样的效果。<br />enumerate(list) 该函数同时循环遍历索引和元素。list: 被操作的列表或字符串。他将序列加上索引</p>
		<p>值变成元组tuple对。<br />10. 核心笔记：什么是属性？<br />属性是与数据有关的项目， 属性可以是简单的数据值， 也可以是可执行对象， 比如函数和方法。哪些</p>
		<p>对象拥有属性呢？ 很多。 类， 模块， 文件还有复数等等对象都拥有属性。我如何访问对象属性？ 使</p>
		<p>用句点属性标识法。 也就是说在对象名和属性名之间加一个句点： object.attribute。<br />  <br />11. 类和对象<br />所有名字开始和结束都有两个下划线的方法都是特殊方法。<br />当一个类实例被创建时， __init__() 方法会自动执行， 在类实例创建完毕后执行， 类似构建函数。</p>
		<p>__init__() 可以被当成构建函数， 不过不象其它语言中的构建函数， 它并不创建实例--它仅仅是你的</p>
		<p>对象创建后执行的第一个方法。它的目的是执行一些该对象的必要的初始化工作。通过创建自己的 </p>
		<p>__init__() 方法， 你可以覆盖默认的 __init__()方法（默认的方法什么也不做），从而能够修饰刚刚</p>
		<p>创建的对象。<br />创建一个类实例就像调用一个函数， 它们确实拥有一样的语法。它们都是可调用对象。<br />self.__class__.__name__ 变量的值。对一个实例来说， 这个变量表示实例化它的类的名字。</p>
		<p>（self.__class__引用实际的类，类似于Java中的Class对象）。</p>
		<p>12. 模块<br />模块是一种组织形式， 它将彼此有关系的Python 代码组织到一个个独立文件当中。模块可以包含可执</p>
		<p>行代码， 函数和类或者这些东西的组合。<br />当你创建了一个 Python 源文件，模块的名字就是不带 .py 后缀的文件名，你可以从另一个模块中使用 </p>
		<p>import 语句导入这个模块来使用。<br />不同于print 语句， write()不会自动在字符串后面添加换行符号。</p>
		<p>13.  一些实用的方法<br />dir([obj])  显示对象的属性，如果没有提供该参数，则显示全局变量的名字<br />help([obj]) 以一种整齐美观的形式，显示对象的文本字符串，如果没有提供任何参数，则会进入</p>
		<p>互助实帮助。<br />int(obj) 将一个对象转换为整数、<br />len(obj) 返回对象的长度<br />open(fn, mode)   以mode(‘r’ = 读， ‘w’ = 写)方式打开一个文件名为fn的文件<br />range([strart, ] stop [,step]) 返回一个整数列表。起始值为start，结束值为stop-1，start默认</p>
		<p>值为0，step默认值为1。<br />raw_input(str)   等待用户输入一个字符串，可以提供一个参数str用作提示信息。<br />str(obj) 将一个对象转换成字符串<br />type(obj) 返回对象的类型(返回值本身是一个type对象)</p>
		<p> </p>
<img src ="http://www.blogjava.net/vagasnail/aggbug/301140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 20:50 <a href="http://www.blogjava.net/vagasnail/articles/301140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python学习笔记二</title><link>http://www.blogjava.net/vagasnail/articles/301139.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301139.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301139.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301139.html</trackback:ping><description><![CDATA[
		<p>1. 关于内部函数和装饰器<br />在python中可以再函数内部定义函数<br />可以使用装饰器的概念，任何函数都可以作为装饰器，使用：<br />   def wfunc():<br /> Print “wrapped func”<br />@wfunc()<br />def foo():<br /> pass<br /> 如上面的代码那么在调用foo()函数的时候，就会先调用wfunc()函数，其实这个也就是我们</p>
		<p>Java程序员所说的AoP。<br /> def tt(fun):<br />    print 'Hello I am tt'<br />    return fun</p>
		<p>def ttt(fun):<br />    print "Hello I am ttt"<br />    return fun</p>
		<p>def tttt(fun):<br />    print "Hello I am tttt"<br />    return fun()<br />    <br />@tt(tttt)<br />@ttt<br />def foo():<br />   print 'Hello I am foo'</p>
		<p>foo = tt(tttt)(ttt(foo))</p>
		<p>2.  python解释器<br />所有的python程序都是在Python解释器中执行 python解释器是一个独立的进程，其实我们可以把整个</p>
		<p>python解释器看做服务器，而我们的程序就是写在客户端（各种编程工具），然后在服务器上运行。</p>
		<p>3. 闭包<br />如果在一个内部函数里，对在外部作用域(但不是在全局作用域）的<br />变量进行引用，那么内部函数就被认为是closure。定义在外部函数内的但由内部函数引用或者使用的变</p>
		<p>量被称为自由变量。</p>
		<p> </p>
		<p> </p>
		<p>4. 名字空间<br />如果说模块是按照逻辑来组织 Python代码的方法, 那么文件便是物理层上组织模块的方法。因此, 一个</p>
		<p>文件被看作是一个独立模块, 一个模块也可以被看作是一个文件。 模块的文件名就是模块的名字加上扩</p>
		<p>展名 .py 。<br />一个名称空间就是一个从名称到对象的关系映射集合。<br /> 解释器启动之后, 也可以访问这个搜索路径, 它会被保存在 sys 模块的 sys.path 变量里。可</p>
		<p>以使用sys.path .append()函数加入搜索路径。<br /> 解释器执行到这条语句, 如果在搜索路径中找到了指定的模块, 就会加载它。该过程遵循作用</p>
		<p>域原则, 如果在一个模块的顶层导入, 那么它的作用域就是全局的; 如果在函数中导入, 那么它的作用</p>
		<p>域是局部的。<br />使用自己想要的名字替换模块的原始名称。一个普遍的解决方案是把模块赋值给一个变量。当然这样很</p>
		<p>无聊，所以可以使用 as 关键字达到同样的效果。<br />Python 模块(.py, .pyc, or .pyo 文件)。<br />在python中也有包的概念，基本和Java相同，就不多说了。<br /></p>
<img src ="http://www.blogjava.net/vagasnail/aggbug/301139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 20:49 <a href="http://www.blogjava.net/vagasnail/articles/301139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python学习笔记一</title><link>http://www.blogjava.net/vagasnail/articles/301138.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301138.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301138.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301138.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301138.html</trackback:ping><description><![CDATA[
		<p>1. Python 的主提示符( &gt;&gt;&gt; )和次提示符( ... )，主提示符是解释器告诉你它在等待你输入下一</p>
		<p>个语句，次提示符告诉你解释器正在等待你输入当前语句的其它部分。</p>
		<p>2. 语句和表达式（函数、算术表达式等）<br /> 语句使用关键字来组成命令，类似告诉解释器一个命令。你告诉Python 做什么，它就为你做什</p>
		<p>么，语句可以有输出，也可以没有输出。<br /> 表达式没有关键字。它们可以是使用数学运算符构成的算术表达式，也可以是使用括号调用的</p>
		<p>函数。它们可以接受用户输入，也可以不接受，有些有输出，有些则没有。<br />简单说，语句就是命令(必须使用关键字)，其它就是表达式（而表达式算术表达式或函数(指整个函数对</p>
		<p>象)）。</p>
		<p>3. 符号 &gt;&gt; 用来重定向输出<br />print 语句也是支持从定向的。可以将print语句输出流重定向到标志流，或者是文件上。<br />raw_input() 接受用户的输入<br />  <br />  4.  python语法规则<br />1)、Python 有两种除法运算符，单斜杠用作传统除法，<br />双斜杠用作浮点除法（对结果进行四舍五入）。传统除法是指如果两个操作数都是整数的话，它将执行</p>
		<p>是地板除(取比商小的最大整数)，而浮点除法是真正的除法，不管操作数是什么类型，浮点除法总是执</p>
		<p>行真正的除法。<br />还有一个乘方运算符， 双星号(**)。<br />2)、Python 也提供了逻辑运算符：<br />and  or  not<br />   3)、Python 不支持C 语言中的自增1 和自减1 运算。<br />4)、Python 支持五种基本数字类型，其中有三种是整数类型。<br />􀁺  * int (有符号整数)<br />􀁺   * long (长整数)<br />􀁺  * bool (布尔值)<br />􀁺   * float (浮点值)<br />* complex (复数)<br />事实上，Python 长整数仅受限于用户计算机的虚拟内存总数。类似于Java中的BigInteger<br />第六种数字类型， decimal， 用于十进制浮点数。类似于Java中的Decimal。<br /> <br />5. 字符串<br /> 加号( + )用于字符串连接运算，星号( * )则用于字符串重复。<br />字符串有其特有的索引规则：第一个字符的索引是 0，最后一个字符的索引是 – 1。</p>
		<p>6. 列表和元组<br /> 列表和元组有几处重要的区别：<br />      列表元素用中括号( [ ])包裹，元素的个数及元素的值可以改变。元组元素用小括号(())</p>
		<p>包裹，也可以不加括号，不可以更改（尽管他们的内容可以）。元组可以看成是只读的列表。</p>
		<p>7. 字典<br />字典是Python 中的映射数据类型，类似于Java中的Map。<br />几乎所有类型的Python 对象都可以用作键，不过一般还是以数字或者字符串最为常用。<br />值可以是任意类型的Python 对象，字典元素用大括号({ })包裹。</p>
		<p>8. 代码块及缩进对齐<br />代码块通过缩进对齐表达代码逻辑而不是使用大括号，因为没有了额外的字符，程序的可读性更高。而</p>
		<p>且缩进完全能够清楚地表达一个语句属于哪个代码块。当然，代码块也可以只有一个语句组成。<br />  <br />9. 条件及循环语句<br />1)、if语句<br />if expression:<br />if_suite<br />如果表达式的值非0 或者为布尔值True, 则代码组 if_suite 被执行; 否则就去执行下一条语句。 代码</p>
		<p>组是一个Python 术语， 它由一条或多条语句组成，表示一个子代码块。<br />Python 还支持 elif （意指 “else-if ”）语句。<br /> 新的条件式x = true_value if condition else false_value<br />如果要表示明确可以加上圆括号。</p>
		<p>   2)、while语句(略)<br />  <br />   3)、for语句和range()内建函数<br />Python 中的for 循环与传统的for 循环（计数器循环）不太一样， 它更象shell 脚本里的 foreach 迭</p>
		<p>代。<br />要使用的数值范围可能会经常变化，Python 提供了一个range([start]stop[step])内建函数来生成这种</p>
		<p>列表。它正好能满足我们的需要，接受一个数值范围，生成一个列表。通过使用range()函数就可以使</p>
		<p>python中的for循环和传统的计数循环一样的效果。<br />enumerate(list) 该函数同时循环遍历索引和元素。list: 被操作的列表或字符串。他将序列加上索引</p>
		<p>值变成元组tuple对。<br />10. 核心笔记：什么是属性？<br />属性是与数据有关的项目， 属性可以是简单的数据值， 也可以是可执行对象， 比如函数和方法。哪些</p>
		<p>对象拥有属性呢？ 很多。 类， 模块， 文件还有复数等等对象都拥有属性。我如何访问对象属性？ 使</p>
		<p>用句点属性标识法。 也就是说在对象名和属性名之间加一个句点： object.attribute。<br />  <br />11. 类和对象<br />所有名字开始和结束都有两个下划线的方法都是特殊方法。<br />当一个类实例被创建时， __init__() 方法会自动执行， 在类实例创建完毕后执行， 类似构建函数。</p>
		<p>__init__() 可以被当成构建函数， 不过不象其它语言中的构建函数， 它并不创建实例--它仅仅是你的</p>
		<p>对象创建后执行的第一个方法。它的目的是执行一些该对象的必要的初始化工作。通过创建自己的 </p>
		<p>__init__() 方法， 你可以覆盖默认的 __init__()方法（默认的方法什么也不做），从而能够修饰刚刚</p>
		<p>创建的对象。<br />创建一个类实例就像调用一个函数， 它们确实拥有一样的语法。它们都是可调用对象。<br />self.__class__.__name__ 变量的值。对一个实例来说， 这个变量表示实例化它的类的名字。</p>
		<p>（self.__class__引用实际的类，类似于Java中的Class对象）。</p>
		<p>12. 模块<br />模块是一种组织形式， 它将彼此有关系的Python 代码组织到一个个独立文件当中。模块可以包含可执</p>
		<p>行代码， 函数和类或者这些东西的组合。<br />当你创建了一个 Python 源文件，模块的名字就是不带 .py 后缀的文件名，你可以从另一个模块中使用 </p>
		<p>import 语句导入这个模块来使用。<br />不同于print 语句， write()不会自动在字符串后面添加换行符号。</p>
		<p>13.  一些实用的方法<br />dir([obj])  显示对象的属性，如果没有提供该参数，则显示全局变量的名字<br />help([obj]) 以一种整齐美观的形式，显示对象的文本字符串，如果没有提供任何参数，则会进入</p>
		<p>互助实帮助。<br />int(obj) 将一个对象转换为整数、<br />len(obj) 返回对象的长度<br />open(fn, mode)   以mode(‘r’ = 读， ‘w’ = 写)方式打开一个文件名为fn的文件<br />range([strart, ] stop [,step]) 返回一个整数列表。起始值为start，结束值为stop-1，start默认</p>
		<p>值为0，step默认值为1。<br />raw_input(str)   等待用户输入一个字符串，可以提供一个参数str用作提示信息。<br />str(obj) 将一个对象转换成字符串<br />type(obj) 返回对象的类型(返回值本身是一个type对象)</p>
		<p> </p>
<img src ="http://www.blogjava.net/vagasnail/aggbug/301138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 20:49 <a href="http://www.blogjava.net/vagasnail/articles/301138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Django学习</title><link>http://www.blogjava.net/vagasnail/articles/301137.html</link><dc:creator>vagasnail</dc:creator><author>vagasnail</author><pubDate>Wed, 04 Nov 2009 12:46:00 GMT</pubDate><guid>http://www.blogjava.net/vagasnail/articles/301137.html</guid><wfw:comment>http://www.blogjava.net/vagasnail/comments/301137.html</wfw:comment><comments>http://www.blogjava.net/vagasnail/articles/301137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vagasnail/comments/commentRss/301137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vagasnail/services/trackbacks/301137.html</trackback:ping><description><![CDATA[
		<p>1. 安装Django：python setup.py install</p>
		<p>2.  django-admin.py：Django的管理脚本。<br />django-admin.py startproject newtest：创建一个新项目，这个项目下面可以保护N多WEB程序。</p>
		<p>3. 项目文件(自动生成)：<br />__init__.py <br />表示这是一个 Python 的包 <br />manage.py <br />提供简单化的 django-admin.py 命令，特别是可以自动进行 DJANGO_SETTINGS_MODULES 和 PYTHONPATH </p>
		<p>的处理，而没有这个命令，处理上面环境变量是件麻烦的事情 <br />settings.py <br />它是django的配置文件 <br />uls.py <br />url映射处理文件，</p>
		<p>4. manage.py runserver [port] 启动web server，可以指定端口，默认为8000。</p>
		<p>5. 正则表达式解析参数<br /> Django中到处都是正则，而且提交的参数也可以通过正则处理，比如<br />&lt;?P&lt;args&gt;…&gt; 将Group指定为args名，可以通过Match对象调用。Django中大量使用。</p>
		<p>6. request.POST, request.GET,以及通吃的request.REQUEST。</p>
		<p>7. Django开发顺序：</p>
		<p>8. render_to_response ，它可以直接调用模板并返回生成好的文本，直接返回它即可。它接收两个参</p>
		<p>数，第一个是模板的名字。它应该返回了一个HttpResponse对象，并拥有一个Context对象(变量环境操</p>
		<p>作)。而且传入的模板自动render了处理传入的dict的Context对象。</p>
		<p>9. 在 Django 模板中 {{}} 表示引用一个变量， {%%} 表示代码调用。</p>
		<p>10. 注意Context对象中的autoescape变量，它默认是True，会自动对Context中的数据进行转义</p>
		<p>(escape)。</p>
		<p>11. 创建Templates目录：<br /> 在项目下建立一个Templates目录，然后<br />修改settings.py</p>
		<p>TEMPLATE_DIRS = (<br />    # Put strings here, like "/home/html/django_templates".<br />    # Always use forward slashes, even on Windows.<br />    './templates',<br />)<br />Django 还支持在 App 中定义一个 templates 目录。这样 Django 在启动时会检查所有的 App 的 </p>
		<p>templates 目录，如果存在，则将路径放在 TEMPLATE_DIRS 之后，也就是项目的Templates之后。这样</p>
		<p>就方便定义模板路径了。</p>
		<p>12. django 中 session 是存放在数据库中的。</p>
		<p>13. 添加数据库：<br />修改settings.py<br />DATABASE_ENGINE = 'sqlite3'<br />DATABASE_NAME = './data.db'<br />DATABASE_USER = ''<br />DATABASE_PASSWORD = ''<br />DATABASE_HOST = ''<br />DATABASE_PORT = ''<br /> 然后，使用django-admin.py 或 或者其简化manage.py <br />比如： manage.py syncdb，来同步数据库，就会生成一个数据库文件。</p>
		<p>14. Django APP<br /> Model, Template, View 就合成了 MTV 这几个字母。 Model 是用来针对数据库，同时它可以用来自动</p>
		<p>生成管理界面， View 在前面我们一直都用它，用来处理请求和响应的相当于MVC框架中的 Controller </p>
		<p>的作用， Template 用来生成界面。<br />创建App<br />manage.py startapp appname <br />自动生成如下文件：<br />__init__.py <br />表示 wiki 目录是一个包。 <br />views.py <br />用来放它的 view 的代码。 <br />models.py <br />用来放 model 代码。<br />15. 安装App<br /> 修改settings.py<br /> INSTALLED_APPS = (<br />    'django.contrib.auth',<br />    'django.contrib.contenttypes',<br />    'django.contrib.sessions',<br />    'django.contrib.sites',<br />    'appname',<br />)</p>
		<p>16. Wiki 是 model 的名字，它需要从 models.Model 派生而来。采用ORM，无需关心底层的数据库 <br />17. 数据库操作：<br /> 对于数据库的记录有两种操纵方式，一种是集合方式，一种是对象方式。集合方式相当于表级</p>
		<p>操作，在新版的 0.92 中可以使用 model.objects 来处理。 objects 对象有一些集合方式的操作，如 </p>
		<p>all() 会返回全部记录， filter() 会根据条件返回部分记录。而象插入新记录则需要使用记录方式来</p>
		<p>操作，有时要直接使用 model 类。filter() 中使用的参数与一般的 db-api 是一样的，但如果是比较</p>
		<p>相等，可以为: pagename__exact=pagename 也可以简化为 pagename=pagename 。上面__后面是比较条</p>
		<p>件。<br />18. 可以为不同的App添加不同的template。只要将添加的App模板目录加到settings.py中。<br />19. admin 是 Django 提供的一个核心 app(既然是 app 就需要安装，一会就看到了)，它可以根据你的 </p>
		<p>model 来自动生成管理界面。</p>
		<p>20. 简单的命令 manage.py reset address，重置指定的数据表，也就是会drop掉旧表，然后生成新表</p>
		<p>，可以修改表结构，但是所有的数据会删除。<br />21. 修改setting.py<br />把 LANGUAGE_CODE 由 'en' 改为 'zh-cn' ， TIME_ZONE 建议改为 'CCT'<br />刷新下界面，admin管理app就可以变成中文界面。<br />22. Django中一个通用的view生成模块。django.views. generic. list_detail，给出常用的现实方案</p>
		<p>，而不需要我们自己编写view，来控制显示。具体参见，相应的模块说明。<br />23. include 可以方便移植，每个 app 都可以有独立的 urls.py ，然后可以与主 urls.py 合在一起使</p>
		<p>用。将app的urls.py来包含到指定的主urls.py中。<br />24. 使用 object_list() 需要的模板文件名为： app_label/model_name_list.html ，这是缺省要查找</p>
		<p>的模板名。<br />25. 永远记住不要在python中留不必要的空行或空格，那是程序错误的万恶之源。<br />26. 要想在django中取得模板，请用app+下划线+模板名格式来取<br />27. 实现排序，只要在model类中添加一个名叫Meta 内部类，并设置其ordering = [‘字段名’]，就会</p>
		<p>按指定的字段排序，’-’表示倒序。</p>
		<p>28. 实现分页，仍使用django内置的generic view 机制，在使用 generic view的 object_list 时，它</p>
		<p>会根据 URL Dispatch 中是否设置了 paginate_by 这个参数来决定是否使用分页机制。一会我们会看到</p>
		<p>在 urls.py 的这个参数。一旦设置了这个参数，则 object_list 会使用 Django 提供的一个分页处理</p>
		<p>器来实现分页。它会自动产生分页所用到的许多的变量，这里我们使用了 has_previous, previous, </p>
		<p>has_next, next 这四个变量，还有其它一些变量可以使用。<br />修改urls.py :    (r'^/?$', 'django.views.generic.list_detail.object_list',<br />        dict(paginate_by=10, **info_dict)),<br />这里使用10行记录分页，并把info_dict和paginate_by变量一起合成一个dict，注意dict和dict合并，</p>
		<p>必须使用可变参数**。</p>
		<p>29. 使用site_media：也即是指定放置多媒体文件的路径。<br /> 修改urls.py ，注意是project的urls.py，<br />(r'^site_media/(?P&lt;path&gt;.*)$', 'django.views.static.serve',<br />        {'document_root': settings.STATIC_PATH}),<br />django.views.static.serve，需要document_root参数，我们可以在settings.py中指定。那么我们的多</p>
		<p>媒体文件就放置在settings.py指定的STATIC_PATH目录中。<br />注意我们的settings.py文件的信息，可以通过 django.conf.setting来取得，他会先取得当前project</p>
		<p>的settings模块的信息也就是DJANGO_SETTINGS_MODULE环境变量指定的settings模块，当前project中可</p>
		<p>以从当前project中取得，如果你想在项目外读取该settings模块，需要指定环境变量</p>
		<p>DJANGO_SETTINGS_MODULE，而且要在path环境变量中加入当前project目录，然后是全局的</p>
		<p>django.conf.global_settings的信息。</p>
		<p>30. 搭建模板框架，我们可以建立一个基本模板，比如base.html，在这个模块中放置通用的东西，然后</p>
		<p>其它的模块扩展至他。<br />注意：{% block content %}content{% endblock %}其它的所有继承该模块的模块，新加的内容都必须</p>
		<p>写在content中。<br />扩展模块使用 extends ：比如：{% extends "基本模块" %}，注意必须写在子模块的开头。</p>
		<p>31. 给Django添加filter：<br /> 需要在app目录下面新建一个目录 templatetags，该目录放置扩展filter，还可以扩展 Tag ，</p>
		<p>还可以设置模板变量，还可以进行块处理等复杂的操作。<br /> 为了使这个文件成为一个包，需要添加__init__.py文件，为空就可。<br />然后添加一个filter文件，比如：change_gender.py，取得模板库，django.template. Library()，<br />然后将filer注册给这个库就好了，比如：</p>
		<p>register = django.template.Libary()，<br />然后register.filter(‘过滤器名’,过滤器方法对象)<br />或者使用装饰器，@register.filter(name=’过滤方法’)，装饰器，写在过滤方法上面，他将过滤方法</p>
		<p>作为一个参数传递给装饰器方法。</p>
		<p>32. 可以在模板开始处，使用{%load 过滤器%}，load使一个tag，来加载过滤器，他将会在response给</p>
		<p>客户端时调用。{% cycle mytr1,mytr2%}，这里的cycle也是一个tag，他将循环使用后面给定的css 类</p>
		<p>。</p>
		<p>33. 再要使用过滤器的地方使用管道，加上过滤器，管道标签’|’（UNIX系统中常用），后面为过滤器</p>
		<p>。</p>
		<p>34．一般对于template的修改或者url，view，model的修改都不需要重启服务器，而对于project的修改</p>
		<p>，或者setting.py文件的修改，都需要重启服务器。</p>
		<p>35. 设置一般用户，通过admin在admin管理程序中添加，一般自动使用MD5加密，当然你也可以使用其它</p>
		<p>的加密算法，也可以使用加密后填入密码框，当然这种加密算法必须是django所支持的。</p>
		<p>36. django.contrib.admin.views.decorators import staff_member_required <br />通过staff_member_required 这个装饰器，就可以让当前被装饰的请求处理方法，处理，如果没有登陆</p>
		<p>，而进入该方法，就会转到admin登陆界面。</p>
		<p>37. 注意在request对象中有一个user对象，它就是当前登录的用户。我们可以通过其控制用户的登录行</p>
		<p>为。例如在settings.py中设置一个UPLOAD_USER，然后在上传方法中处理，就可以控制用户的上传行为</p>
		<p>。</p>
		<p>38. 查询模块。name_icontains 是 Django 中过滤条件的写法。这里是说只要包含指定的字符的即可，</p>
		<p>而且不区分大小写。</p>
		<p>39. i18n，对于国际化的处理，这里不多说，因为我这里没遇到问题，不过要记住确认所有的编码统一</p>
		<p>，而且为国际统一编码，最好都用utf-8。</p>
		<p>40. 自定义Tag。首先，Tag必须是django.template.Node类型。然后在这个Node 调用它们的 render() </p>
		<p>方法，然后将输出结果拼接起来，也就是返回给客户端的结果。然后是注册到系统中，并使用注册方法</p>
		<p>。注意这个Tag所对应的处理类，应该放在在templateTags目录下，然后在模板中使用的时候，要加载这</p>
		<p>个Tag，也就是对应得处理模块。我想filter和Tag在实际上时同一种东西。</p>
		<p>总结：上面是我初学Django的总结，有很多不足。</p>
		<p>         ------   2009年09月</p>
		<p>14日 晚上21点<br /></p>
<img src ="http://www.blogjava.net/vagasnail/aggbug/301137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vagasnail/" target="_blank">vagasnail</a> 2009-11-04 20:46 <a href="http://www.blogjava.net/vagasnail/articles/301137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>