newfish
|
2.0/chapter10/#16 |
2009-10-22 16:02:33
|
但是,在之前有一件我们没提及到的是表示为<literal>ForeignKey</literal> 或 <literal>ManyToManyField</literal>的相互关联对象字段,它们的作用稍有不同
|
|
15325@qq.com
|
2.0/chapter03/#129 |
2009-10-22 16:02:05
|
(这是受配置文件setting中APPEND_SLASH项控制的,参见附件D。)
|
|
newfish
|
2.0/chapter10/#16 |
2009-10-22 16:01:45
|
但是,在之前有一件我们没提及到的是,表示为<literal>ForeignKey</literal> 或 <literal>ManyToManyField</literal>的相互关联对象字段的行为稍有不同
|
|
newfish
|
2.0/chapter10/#16 |
2009-10-22 16:01:15
|
但是,在之前有一件我们没提及到的表示为<literal>ForeignKey</literal> 或 <literal>ManyToManyField</literal>的相互关联对象字段的行为稍有不同
|
|
15325@qq.com
|
2.0/chapter03/#128 |
2009-10-22 16:00:12
|
然而,默认地,任何不匹配或尾部没有斜杠(/)的申请URL,将被重定向至尾部包含斜杠的相同字眼的URL。
|
|
newfish
|
2.0/chapter10/#13 |
2009-10-22 15:55:54
|
例如,要确定ID为50的书本的标题,我们这样做:
|
|
newfish
|
2.0/chapter10/#13 |
2009-10-22 15:54:23
|
例如,要确定ID为50的书本的标题,我们只需这样做:
|
|
newfish
|
2.0/chapter10/#12 |
2009-10-22 15:53:25
|
如我们在第5章的讲解,在数据库对象获取特定字段的值只需直接使用属性那么简单
|
|
15325@qq.com
|
2.0/chapter03/#127 |
2009-10-22 15:53:22
|
因为我们的URL模式要求尾部有一个斜杠(/),那个申请URL将不匹配。
|
|
15325@qq.com
|
2.0/chapter03/#126 |
2009-10-22 15:51:26
|
你可能会问:如果有人申请访问/hello(尾部没有斜杠/)会怎样。
|
|
gombiuda
|
2.0/chapter04/#329 |
2009-10-22 15:51:17
|
比如这样的代码是不合法的:
|
|
15325@qq.com
|
2.0/chapter03/#126 |
2009-10-22 15:51:03
|
你可能感到困惑:如果有人申请访问/hello(尾部没有斜杠/)会怎样。
|
|
15325@qq.com
|
2.0/chapter03/#124 |
2009-10-22 15:49:03
|
你大多数的URL模式会以^开始、以$结束,但是拥有复杂匹配的灵活性会更好。
|
|
newfish
|
2.0/chapter10/#9 |
2009-10-22 15:48:55
|
先让我们回忆一下在第五章里的关于书本(book)的数据模型
|
|
mitnk
|
2.0/chapter07/#85 |
2009-10-22 15:47:43
|
除了基本的元数据,HttpRequest对象还有两个属性包含了用户所提交的信息:
|
|
newfish
|
2.0/chapter10/#1 |
2009-10-22 15:46:04
|
数据模型高级进阶
|
|
newfish
|
2.0/chapter10/#7 |
2009-10-22 15:44:54
|
相关对象
|
|
newfish
|
2.0/chapter10/#5 |
2009-10-22 15:44:39
|
在这章里,我们将向你介绍Django在这方面的一些更高级功能
|
|
15325@qq.com
|
2.0/chapter03/#122 |
2009-10-22 15:44:25
|
如果我们用尾部不是$的模式'^hello/',那么任何以/hello/开头的URL将会匹配,例如:/hello/foo 和/hello/bar,而不仅仅是/hello/。类似地,如果我们忽略了尖号(^),即'hello/$',那么任何以hello/结尾的URL将会匹配,例如:/foo/bar/hello/。如果我们简单使用hello/,即没有^开头和$结尾,那么任何包含hello/的URL将会匹配,如:/foo/hello/bar。因此,我们使用这两个符号以确保只有/hello/匹配,不多也不少。
|
|
mitnk
|
2.0/chapter07/#83 |
2009-10-22 15:43:21
|
提交的数据信息
|
|
newfish
|
2.0/chapter10/#1 |
2009-10-22 15:42:27
|
高级数据模型
|
|
newfish
|
2.0/chapter10/#4 |
2009-10-22 15:42:12
|
在第5章里,我们介绍了Django的数据层如何定义数据模型以及如何使用数据库API来创建、检索、更新以及删除记录
|
|
mitnk
|
2.0/chapter07/#81 |
2009-10-22 15:41:39
|
也可以试着把前面提到的 request.path 方法或 HttpRequest 对象的其它方法加进去。
|
|
newfish
|
2.0/chapter10/#1 |
2009-10-22 15:39:53
|
|
高级数据模型
|
mitnk
|
2.0/chapter07/#80 |
2009-10-22 15:35:27
|
做为一个练习,看你自己能不能把上面这个view函数改用Django模板系统来实现,而不是上面这样来手动输入HTML代码。
|
|
15325@qq.com
|
2.0/chapter03/#118 |
2009-10-22 15:29:20
|
模式包含了一个尖号(^)和一个美元符号($)。这些都是正则表达式符号,并且有特定的含义:
|
|
mitnk
|
2.0/chapter07/#77 |
2009-10-22 15:27:14
|
这个view函数可能是这样的:
|
|
15325@qq.com
|
2.0/chapter03/#115 |
2009-10-22 15:27:12
|
Django在检查URL模式前,移除每一个申请的URL开头的斜杠(/)。
|
|
15325@qq.com
|
2.0/chapter03/#116 |
2009-10-22 15:26:53
|
这意味着我们为/hello/写URL模式不用包含斜杠(/)。(刚开始,这样可能看起来不直观,但这样的要求简化了许多工作,如URL模式内嵌,我们将在第八章谈及。)
|
|
mitnk
|
2.0/chapter07/#76 |
2009-10-22 15:26:34
|
我们鼓励你动手写一个简单的view函数来显示 request.META 的所有数据,这样你就知道里面有什么了。
|
|
mitnk
|
2.0/chapter07/#73 |
2009-10-22 15:23:55
|
(HTTP header信息是由用户的浏览器所提交的、不应该给予信任的“额外”数据,因此你总是应该好好设计你的应用以便当一个特定的Header数据不存在时,给出一个优雅的回应。)你应该用 try/except 语句,或者用Python字典的 get() 方法来处理这些“可能不存在的键”:
|
|
15325@qq.com
|
2.0/chapter03/#115 |
2009-10-22 15:20:05
|
Django在检查URLpatterns前,移除每一个申请的URL开头的斜杠(/)。
|
|
15325@qq.com
|
2.0/chapter03/#113 |
2009-10-22 15:15:54
|
这就是为什么:
|
|
15325@qq.com
|
2.0/chapter03/#112 |
2009-10-22 15:15:35
|
虽然我们想匹配地址/hello/,但是模式看上去与这有点差别。
|
|
15325@qq.com
|
2.0/chapter03/#112 |
2009-10-22 15:15:22
|
虽然我们想匹配地址/hello/,但是模式看上去与这有点差别:
|
|
mitnk
|
2.0/chapter07/#72 |
2009-10-22 15:14:58
|
注意,因为 request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。
|
|
mitnk
|
2.0/chapter07/#72 |
2009-10-22 15:14:31
|
注意,request.META 是一个普通的Python字典,因此当你试图访问一个不存在的键时,会触发一个KeyError异常。
|
|
15325@qq.com
|
2.0/chapter03/#111 |
2009-10-22 15:13:57
|
讨论一下URLpattern的语法是值得的,因为它不是显而易见的。
|
|
mitnk
|
2.0/chapter07/#61 |
2009-10-22 15:12:04
|
这个字典中几个常见的键值有:
|
|
mitnk
|
2.0/chapter07/#61 |
2009-10-22 15:11:44
|
这个字典中几个常见的键值是:
|
|
15325@qq.com
|
2.0/chapter03/#105 |
2009-10-22 15:11:43
|
如果你想看Python搜索路径的值,运行Python交互解释器,然后输入:
|
|
mitnk
|
2.0/chapter07/#60 |
2009-10-22 15:10:37
|
注意,Header信息的完整列表取决于用户所发送的Header信息和服务器端设置的Header信息。
|
|
15325@qq.com
|
2.0/chapter03/#94 |
2009-10-22 15:09:18
|
接下来,我们为urlpatterns加上一行:
('^hello/$', hello),
这行被称作URLpattern,它是一个Python的元组。元组中第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。
|
|
15325@qq.com
|
2.0/chapter03/#92 |
2009-10-22 14:52:32
|
(这假设mysite/views.py在你的Python搜索路径上。关于搜索路径的解释,请参照下文。)
|
|
15325@qq.com
|
2.0/chapter03/#87 |
2009-10-22 14:47:12
|
如果你喜欢的话,你可以保留那些行。)
|
|
15325@qq.com
|
2.0/chapter03/#86 |
2009-10-22 14:46:27
|
请留意:为了简洁,我们移除了注释代码。
|
|
15325@qq.com
|
2.0/chapter03/#79 |
2009-10-22 14:44:13
|
(注:那是上一节中Django怎么知道显示欢迎页面的原因。
|
|
15325@qq.com
|
2.0/chapter03/#74 |
2009-10-22 14:29:19
|
(这个字符串可以被用来表示一个视图函数的通用前缀。具体我们将在第八章里面介绍。)
|
|
15325@qq.com
|
2.0/chapter03/#71 |
2009-10-22 14:27:44
|
这包含了一个patterns函数。
|
|
15325@qq.com
|
2.0/chapter03/#70 |
2009-10-22 14:26:39
|
第一行导入django.conf.urls.defaults下的所有模块,它们是Django URLconf的基本构造。
|
|