您的位置:首页 > 编程语言 > Go语言

Django学习笔记

2011-09-19 21:33 211 查看
Django Web编程思路
global setting

生成项目project

初始化配置settings.py

生成应用模块app

安装app至project

app setting

编写models.py

定义urls.py

将app urls加入project urls配置

编写views.py

编写相应的template

run server

启动项目,浏览器访问

Check Environment

Python2.6

Django http:// www.djangoproject.com/download

Config PYTHONPATH /etc/environment

Start Project

$django-admin.py startproject mysite


生成项目文件

manage.py 文件基本就是 django-admin.py 的复制,只是加多了检查当前目录 settings.py文件是否存在,不存在就退出.

settings.py: 文件当中就是把 django/conf/global_settings.py 文件当中的信息抽取出来,最终 django.conf.settings 模块会合并当前工程的 settings 和 global_settings 的所有设置,如果有相同的设置名称,会以前工程的 settings 的为准, 需要注意:所有的设置名称的字母都必须全部大写, django 只认大写的设置,不然就视而不见.

urls.py:负责 url 的解析分配的,使用了正则表达式的方式来匹配 url,从而决定应该调用哪个页面显示函数来显示,函数参数是什么等等

URL控制器urls.py

然后我们在修改一下 urls.py 的文件,增加一行 (r'^$', 'views.index'),其中 r'^$'这个正则表达式就是表示匹配一个空字符串,多一个空格都不行,因为一开始^就结束$嘛!

然后后面的'views.index'表示调用 views 模块的 index 函数

说明:

默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。 (这是受配置文件setting中APPEND_SLASH项控制的)

Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。 这意味着我们为/hello/写URL模式不用包含斜杠(/)。

另外需要注意的是,我们把hello视图函数作为一个对象传递,而不是调用它。 这是 Python (及其它动态语言的) 的一个重要特性: 函数是一级对象(first-class objects), 也就是说你可以像传递其它变量一样传递它们。

另外一个重点,正则表达式字符串的开头字母“r”。 它告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)

视图文件views.py

views.py中定义的视图函数至少有一个参数,且第一个参数必须固定是 django/http/__init__.py 当中定义的 HttpRequest 这个 class 的子类,至于是哪个子类就不一定了。该类函数必须返回一个 HttpResponse 类型的结果。

模板文件template

语法说明:

{{ var }} 输出变量的取模板标签

{% if bool %} 块标签

{{var_date|date,'Fj,Y'}}过滤器(**转换变量输出格式的方式,过滤器是用管道符(|)来调用的**),shipdate通过管道转换哦date类型,后面定义输出格式

一旦你创建一个 Template 对象,你可以用 context 来传递数据给它。 一个context是一系列变量和它们值的集合。调用 Template 对象 的 render() 方法并传递context来填充模板.

这就是使用Django模板系统的基本规则: 写模板,创建 Template 对象,创建 Context , 调用 render() 方法。

深度变量的查找:

模板系统能够非常简洁地处理更加复杂的数据结构,例如list、dictionary和自定义的对象。__在 Django 模板中遍历复杂数据结构的关键是句点字符 (.)__。

如果{% include %}标签指定的模板没找到,Django将会在下面两个处理方法中选择一个:

如果 DEBUG 设置为 True ,你将会在 Django 错误信息页面看到 TemplateDoesNotExist 异常。

如果 DEBUG 设置为 False ,该标签不会引发错误信息,在标签位置不显示任何东西。

数据模型models.py

用于写针对django 自带的面向对象数据库的数据模型的,数据模型可以通过 syncdb 命令来产生相应的物理数据库表

Start Project

$python manage.py runserver  0.0.0.0:8000


访问:http://localhost:8000/

Start App

$django-admin.py startapp appname


一个项目可以包涵多个模块,Django把每个模块当作一个app,不同的app模块关注不同的业务,且每个app都有很大程序上的独立性,可以很好的实现代码重用。

生成应用文件

models.py:用于写针对django 自带的面向对象数据库的数据模型的,数据模型可以通过 syncdb 命令来产生相应的物理数据库表

views.py:用于页面显示或者说页面控制的

生成数据表

$python manage.py syncdb


将项目中所有model定义映射到数据表,即ORM:对象关系模型 syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并 不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。

$python manage.py app info


查看要生成的数据表信息

$python manage.py validate


validate 命令检查你的模型的语法和逻辑是否正确。 如果一切正常,你会看到 0 errors found 消息。如果出 错,请检查你输入的模型代码。 错误输出会给出非常有用的错误信息来帮助你修正你的模型。

$python manage.py sqlall app


输出创建一个app下的model数据表的sql信息,并不实际创建数据表 数据表名称:app_model

注意:

想要应用定义的数据模型自动映射到数据库中,需要在settings.py中 INSTALLED_APPS 安装相应的应用

Django为每个表格自动添加加了一个 id 主键, 你可以重新设置它。

按约定,Django添加 "_id" 后缀到外键字段名。 你猜对了,这个同样是可以自定义的。

外键是用 REFERENCES 语句明确定义的

Django 问题解决

1.Django 环境变量设置

PATH = ${django_home}/bin;
PYTHONPATH = ${django_project_path}
DJANGO_SETTINGS_MODULE = mysite.settings


mysite是project name

Django Python Shell

$python manage.py shell


进入有Django配置的shell,可以不设置Django环境变量 在启动解释器之前,它告诉Django使用哪个设置文件。

Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪个配置文件,这些系统将不能工作。

原理:Django会搜索环境变量DJANGO_SETTINGS_MODULE,它被设置在settings.py中,当运行manage.py中,它会自动加载settings.py

字符编码

t.render(c)返回的值是一个Unicode对象,不是普通的Python字符串。 你可以通过字符串前的u来区分。

在框架中,Django会一直使用Unicode对象而不是普通的字符串。 Template中不允许使用负数列表索引。 像 {{ items.‐1 }} 这样的模板变量将会引发`` TemplateSyntaxError``

句点查找规则可概括为:

字典类型查找 (比如 foo["bar"] )

属性查找 (比如 foo.bar )

方法调用 (比如 foo.bar() ) 仅在方法无需传入参数时,其调用才有效。 否则,系统将会转移到下一个查找类型(列表索引查找)。

列表类型索引查找 (比如 foo[bar] )

模板系统不会执行任何以该方式进行标记的方法。 接上面的例子,如果模板文件里包含了{{ account.delete }} ,对象又具有 delete() 方法,而且delete() 有alters_data=True 这个属性,那么在 模板载入时, delete()方法将不会被执行。 它将静静地错误退出。

处理无效变量

默认情况下,如果一个变量不存在,模板系统会把它展示为空字符串,不做任何事情来表示失败。

模板系统不会执行任何以该方式进行标记的方法。

接上面的例子,如果模板文件里包含了{{ account.delete }} ,对象又具有 delete() 方法,而且delete() 有alters_data=True 这个属性,那么在模板载入时, delete()方法将不会被执行。 它将静静地错误退出。

Django MVC

Django 紧紧地遵循这种 MVC 模式,可以称得上是一种 MVC 框架。 以下是 Django 中 M、V 和 C 各自的含义:

M ,数据存取部分,由django数据库层处理

V ,选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理。

C ,根据用户输入委派视图的部分,由 Django 框架根据 URLconf 设置,对给定 URL 调用适当的Python 函数。 由于 C 由框架自行处理,而 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),**Django 也被称为 MTV 框架 。

总结一下

进来的请求转入/hello/.

Django通过在ROOT_URLCONF配置来决定根URLconf.

Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。

如果找到匹配,将调用相应的视图函数

视图函数返回一个HttpResponse

Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: