Django是Python下的一款网络服务器框架。Python下有许多款不同的框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。虽然Django之于Python,达不到Rail之于Ruby的一统江湖的地位,但Django无疑也是Python在网络应用方面的一位主将。
向昆汀的致敬,“被解放的姜戈”
Django意外的和昆汀的电影重名。这大大提高了Django的知名度。另外利用电影,宣传了这个奇怪的词的发音。
下面是姜戈的初体验。
安装Django
启动计算机中的Python,尝试载入Django模块。如果可以成功载入,那么说明Django已经安装好:
1 2 |
import django print(django.VERSION) |
如果Django还没有安装,可以在命令行,尝试使用pip安装:
1 |
sudo pip install django |
或者使用easy_install:
1 |
sudo easy_install django |
黑夜中,姜戈和镣铐说再见。
启动
使用下面的命令创建项目:
1 |
django-admin.py startproject mysite |
在当前目录下,将生成mysite文件夹。其文件树结构如下:
1 2 3 4 5 6 7 8 9 |
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 directory, 5 files |
进入mysite,启动服务器:
1 |
python manage.py runserver 8000 |
上面的8000为端口号。如果不说明,那么端口号默认为8000。
打开浏览器,访问http://127.0.0.1:8000,可以看到服务器已经在运行:
虽然有一个能跑的服务器,但什么内容都没有。
“赏金?猎人?” 姜戈满脸困惑。
第一个网页
在http协议中可以看到,网络服务器是“请求-回应”的工作模式。客户向URL发送请求,服务器根据请求,开动后厨,并最终为客人上菜。Django采用的MVC结构,即点单、厨房、储藏室分离。
我们需要一个指挥员,将URL对应分配给某个对象处理,这需要在mysite/mysite下的urls.py设定。Python会根据该程序,将URL请求分给某个厨师。
1 2 3 4 5 6 7 8 9 |
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 directory, 5 files |
将urls.py修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'mysite.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), url(r'^$', 'mysite.views.first_page'), ) |
我们添加了最后一行。它将根目录的URL分配给一个对象进行处理,这个对象是mysite.views.first_page。
用以处理HTTP请求的这一对象还不存在,我们在mysite/mysite下创建views.py,并在其中定义first_page函数:
向昆汀的致敬,“被解放的姜戈”
Django意外的和昆汀的电影重名。这大大提高了Django的知名度。另外利用电影,宣传了这个奇怪的词的发音。
下面是姜戈的初体验。
安装Django
启动计算机中的Python,尝试载入Django模块。如果可以成功载入,那么说明Django已经安装好:
1 2 |
import django print(django.VERSION) |
如果Django还没有安装,可以在命令行,尝试使用pip安装:
1 |
sudo pip install django |
或者使用easy_install:
1 |
sudo easy_install django |
黑夜中,姜戈和镣铐说再见。
启动
使用下面的命令创建项目:
1 |
django-admin.py startproject mysite |
在当前目录下,将生成mysite文件夹。其文件树结构如下:
1 2 3 4 5 6 7 8 9 |
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 directory, 5 files |
进入mysite,启动服务器:
1 |
python manage.py runserver 8000 |
上面的8000为端口号。如果不说明,那么端口号默认为8000。
打开浏览器,访问http://127.0.0.1:8000,可以看到服务器已经在运行:
虽然有一个能跑的服务器,但什么内容都没有。
“赏金?猎人?” 姜戈满脸困惑。
第一个网页
在http协议中可以看到,网络服务器是“请求-回应”的工作模式。客户向URL发送请求,服务器根据请求,开动后厨,并最终为客人上菜。Django采用的MVC结构,即点单、厨房、储藏室分离。
我们需要一个指挥员,将URL对应分配给某个对象处理,这需要在mysite/mysite下的urls.py设定。Python会根据该程序,将URL请求分给某个厨师。
1 2 3 4 5 6 7 8 9 |
mysite ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 directory, 5 files |
将urls.py修改为:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'mysite.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), url(r'^$', 'mysite.views.first_page'), ) |
我们添加了最后一行。它将根目录的URL分配给一个对象进行处理,这个对象是mysite.views.first_page。
用以处理HTTP请求的这一对象还不存在,我们在mysite/mysite下创建views.py,并在其中定义first_page函数: