一.下载Django
如果电脑没安装 python,点击这里。然后从这里下载 Django 稳定版本。
或者执行命令下载 Django 最新版本:
git clone https://github.com/django/django.git
这里我用的是 Mac 自带的 python2.7
,下载是最新版本的 Django
后发现 python2.7
版本需要升级,但是注意,对 iOS 开发者来说,最好不要升级 python2.7
到 python3
,因为 Xcode
只支持最稳定版的 python2.7
脚本。所以这里我下载的 Django
版本是 1.6.1
。
二.安装Django
cd Django
sudo python setup.py. install
Python 默认在 /Library/Python/2.7
中,那么无论如何你在哪里安装完 DJango
,都会在 /Library/Python/2.7/site-packages
中生成一个 django
的文件夹。如果要删除 django
,只需要把该目录下的 django
文件夹删除即可。
三.测试LocalHost是否成功
sudo mkdir ~/Djangodemo
/*创建一个用于测试Localhost的网站样例*/
sudo django-admin.py startproject testLocalHost
cd testLocalHost
python manage.py runserver
浏览器打开 http://localhost:8000,结果如下图显示:
说明:django-admin.py在我们安装完Django之后除了在site-packages中生成django文件夹之外(里面都是一些DJango命令的一些文件和代码),在/usr/local/bin/中也生成了一个名为django-admin.py的链接,这样无论你在何种路径下都可以直接调用django-admin.py文件了。在Win下我们称这个过程为:加入到环境变量。
四.文件结构
1.创建 mysite 工程
删除原来的 LocalHost 工程,创建 mysite 工程,执行命令:
$ mkdir mysite
$ django-admin.py startporject mysite
此时的目录结构如下:
mysite/
mysite/
__init__.py
settings.py
urls.py
manage.py
2.manage.py
作用:
- 把该工程的包加入了 sys.path ;以后你可以直接在你的代码中引用该工程中其他的包。
- 加载 DJANGO_SETTINGS_MODULE ,指明该工程的配置文件是 mysite/settings.py。
- 最主要的是它包裹了 django-admin.py 的一些函数,让你可以通过它来操作整个工程。
3.__init__.py
严格意义上讲 __init__.py
不属于 DJango 的范畴,而是 Python 语言的一种习惯,经常为空文件。主要是告诉工程这是一个包(Package),防止不经意间因为包名为诸如 String
之类的字符串而引起的混乱,当然你也可以在里面加一些初始化的函数,但不在我们的讨论之列。
4.settings.py
此前我们提到了 manage.py
的第二件工作便是指定了它是工程的配置文件,那它配置了些什么呢?代码量在其他几个文件中属于比较多的,有一百行的样子,主要设置了关于数据库,后台管理等配置,等到我们要用的时候再详细说明。
5.urls.py
它负责把客户的请求翻译成函数调用。是重要要掌握的文件。
- DJango 通过 settings.py 中指定的 URLconf 参数找到对应的 urls.py 文件,此例中正好为我们的这个文件。
- DJango 在 urls.py 中找到 urlpatterns 变量。
- DJango 收到一个客户地址请求,我们不妨设为 localhost。
- DJango 在 urlpatterns 中顺序遍历正则式,找到第一个匹配,调用该正则式对应的函数。
- 该函数返回客户端所请求的内容。
对开发者来说,真正需要关心的是如何完成正则表达式和对应函数的对应。 如下面例子:
1 2 3 |
|
说明:其中url里面左半部分是正则式,右半部分是函数调用。r说明是raw匹配,表明正则表达式要求每个字符都必须被匹配,是一个可选项,如果不能理解可以省略。^表示匹配开始,$表示匹配结束。所以这个正则表达式匹配了空字符,正好符合地址为localhost的客户请求(DJango收到的请求会自动省略域名,即localhost,即真正的请求字符串为空)。右侧表明腰调用名为hello的app的views.py文件的home函数。
6.增加 hello app
刚才我们在url匹配的时候调用了home函数,此时我们就开始创建它:
python manage.py startapp hello
这样我们在manage.py同级目录下生成了hello目录,进入hello目录其他文件都不用管,也不需要理解,直接打开views.py编辑成如下样子:
from django.http import HttpResponse
def home(request):
return HttpResponse("Hello World")
启动服务器。其实hello相当于是一个app应用被添加进了mysite工程,当特定的请求到来时通过url匹配调用相应app下的views.py中的函数来达到不同的显示效果。
五.Django-URL解析和匹配
1.patterns() 函数
patterns 函数的的原型:
patterns(prefix, pattern_description, ...)
其中 prefix
表示函数调用的前缀,而 pattern_description
则是一系列的元组。举例说明prefix
的作用:
urlpatterns = patterns("hello.views",
url(r'^$', 'home'),
)
上例和上例的执行效果一样,都表明了 hello app
下的 views
文件里的 home
函数。注意:前缀末尾不必包含“.”;另外因为 python
函数规定参数不能多于 255 个,因此如果你的映射关系很多,可以利用诸如: urlpatterns += patterns(…)
这种形式累加。
2.url()函数
url 函数的原型:
1
|
|
其中后三项是可选项,在我们的例子中:regex=”r’^$'”
; view=”hello.views.home”
;name
项给该 url
命名,这在未来通过 name
反向确定 url
有很大的作用;kwargs
则传递额外的参数;prefix
和此前的 prefix
作用一致,不过只适用这一条 url
。
3.通过url传递信息
DJango 在通过 url
传递参数时有两种方式,一种通过位置,一种通过关键词。我们先看第一种,改此前的映射关系如下:
1
|
|
修改 hello/views.py
,增加两行代码如下:
def home(request, year='0000', month='00'):
return HttpResponse("Hello World "+year+" "+month)
这样当用户请求 locahost:8000/2015/5
时候,相当于在调用 home(request, ‘2015’, ’5’)
,注意此时 year
和 month
的相对关系,因为参数传递是基于位置信息的,第一个是4个数字是年,第二个2个数字是月。
下面是第二种,即关键词方式,我们修改两个文件如下:
#mysite/urls.py
url(r'^(?P<year>\d{4})/(?P<month>\d{2})$', 'hello.views.home'),
#hello/views.py
#注意year和month的位置
def home(request, month='00', year='0000'):
return HttpResponse("Hello World "+year+" "+month)
</month></year>