Djangobook笔记

阅读hideto翻译的Django book做的记录

[b]第一个视图文件:[/b]

/**
这个文件应该放在哪里呢?答案是放在任何一个位置都可,只要它是在你的Python PATH下
Python PATH是一个你系统的目录列表,当你使用Python import语句时Python会查看这些目录
例如你的Python PATH设置成['', '/usr/lib/python2.4/site-packages', '/home/mycode']
如果你执行代码from foo import bar,Python将首先在当前目录下查找叫foo.py的模块
第一个Python PATH为空string,这表示当前目录
如果找不到foo.py,Python将尝试查找/usr/lib/python2.4/site-packages/foo.py
最后,如果foo.py还是找不到,Python将报ImportError
如果你有兴趣查看Python PATH,进入Python交互环境并输入import sys和print sys.path
一般情况下Django都会为我们设置好python path
*/

//首先从django.http模块import HttpResponse类
from django.http import HttpResponse
//从python标准库import datetime模块
import datetime

/**
定义视图方法:视图的名称是可以随便定义的
每个视图方法都使用HttpRequest对象作为自己的第一个参数
这个视图方法返回了一个包含当前日期和时间的HTML页面
*/
def current_datetime(request):
//计算当前日期,并存储在变量now中
now = datetime.datetime.now()
//使用Python的格式化string能力构建了一个HTML应答
//string里面的%s是一个占位符,string后面的百分号表示使用now变量的值代替%s
html = "It is now %s."%now
//视图返回一个包含生成的HTML的HttpResponse对象
//每个视图方法都会返回一个HttpResponse对象
return HttpResponse(html)



[b]url conf[/b]
/**
视图是如何被django找到,并工作的呢?关键就是url conf,这个文件就是django的url conf配置文件
这个配置是一个URL模式和对应的view函数的映射,这些函数会在请求某个符合特定模式的URL时被调用。
URLconf就是告诉Django,"对于这个URL,调用这些代码,对于那个URL,调用那些代码..."
import django.conf.urls.defaults模块的所有对象,包括一个叫patterns的方法
*/

from django.conf.urls.defaults import *

//必须引入current_datetime模块(模块名称与方法名称相同)
from mysite.views import current_datetime

# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

//调用patterns方法,patterns方法只有一个空string参数,其余的都被注释掉了,
//这意味着你的Django项目是空的,这让Django得知显示“It worked!”页面
urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),

# Uncomment the next line to enable admin documentation:
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),

# Uncomment the next line for to enable the admin:
# (r'^admin/(.*)', admin.site.root),
//定义一个映射,可以使用正则表达式定义url
//http://localhost:8000/now 即可看到效果
(r'^now/$', current_datetime),
)


[b]
django是如何通过实现url conf的呢?[/b]
1、当django服务启动的时候会加载mysite/settings.py文件,此文件中有关于django的配置
其中有一个配置叫ROOT_URLCONF,它告诉Django使用哪个Python模块作为当前站点的URL配置

2、当一个请求进来如/now/,Django载入URL配置,然后按顺序检查每个URL模式直到找到一个匹配的URL请求模式
然后Django调用那个模式匹配的方法,并传递一个HttpRequest对象作为第一个参数。一定是第一个参数。

3、视图方法负责返回一个HttpResponse对象


[b]优雅的url:[/b]

可以使用正则表达式定义url。
url中传递参数就是用()表示,django会将()的变量作为参数传递给这个url对应的方法
如:

url:(r'^now/(plus|minus)([2-9]|\d\d)hours/$', hour_offset),
函数:def hour_offset(request, plus_or_minus, offset):


第一个括号对应参数plus_or_minus,第二个括号对应参数offset

另外还遇到一个问题:
当在.py文件中写中文注释的时候,页面访问会报错!难道不支持中文注释吗?
Traceback (most recent call last):

File "D:\Python2.5.1\Lib\site-packages\django\core\servers\basehttp.py", line 277, in run
self.result = application(self.environ, self.start_response)

File "D:\Python2.5.1\Lib\site-packages\django\core\servers\basehttp.py", line 634, in __call__
return self.application(environ, start_response)

File "D:\Python2.5.1\Lib\site-packages\django\core\handlers\wsgi.py", line 217, in __call__
response = self.get_response(request)

File "D:\Python2.5.1\Lib\site-packages\django\core\handlers\base.py", line 68, in get_response
response = middleware_method(request)

File "D:\Python2.5.1\Lib\site-packages\django\middleware\common.py", line 57, in process_request
urlresolvers.resolve(request.path)

File "D:\Python2.5.1\Lib\site-packages\django\core\urlresolvers.py", line 299, in resolve
return get_resolver(urlconf).resolve(path)

File "D:\Python2.5.1\Lib\site-packages\django\core\urlresolvers.py", line 238, in resolve
for pattern in self.urlconf_module.urlpatterns:

File "D:\Python2.5.1\Lib\site-packages\django\core\urlresolvers.py", line 262, in _get_urlconf_module
raise ImproperlyConfigured, "Error while importing URLconf %r: %s" % (self.urlconf_name, e)

ImproperlyConfigured: Error while importing URLconf 'mysite.urls': Non-ASCII character '\xb5' in file D:\temp\mysite\..\mysite\urls.py on line 8, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details (urls.py, line 8)


---
[b]只要将.py保存为utf-8格式就不会有以上错误了[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值