Django的核心是Python框架,用于处理HTTP请求和返回HTTP输出,还提供处
理HTTP请求的常用工具,如渲染HTML,分析表单数据,和保持持久会话状态。
利用startproject命令启动Django项目,只是创建一些文件和目录而已,并非启
动Django项目所必需的,对于大型的项目,开发者得益于这条命令所提供的代码
startproject的妙处
创建一个为根目录URL(‘/’)提供服务的视图,Django是一个MTV(model,template,view)框架,
视图部分通常查看HTTP给出的请求,对此创建响应方法如下:
#hello.py
#!/usr/bin/env python
#coding=utf-8
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello World!!!')
ps:对于生产项目来说,此代码应存在于应用程序内的view.py文件中,这是一种约定
要将以上视图绑定到网站的结构上,它需要与URL模块相关联。Django通过正则表达式和可调用的参数相匹配,与视图的url进行关联。如下代码则是将典型的view.py和urls.py文件合并起来的应用
#hello.py
#!/usr/bin/env python
# coding=utf-8
from django.http import HttpResponse
from django.conf.urls import url
def index(request):
return HttpResponse('Hello World!!!')
urlpatterns = (
url(r'^$',index),
)
Django的配置包含了数据库,缓存连接,国际化特性,静态和上传资源等如下配置DEBUG,以及根目录
ROOT__URLCONF为当前目录(urlpatterns会以此为基准),SECRET_KEY设为固定(生产环境不
能固定设置,必须要生成一个用于默认会话和跨站点请求防伪CSRF保护随机密钥),典型的Django代码会
带有manage.py文件,此命令用来运行如创建数据表,启动开发服务器等多个命令,对于manage.py
中相关启动的代码,添加到如下代码中
#hello.py
#!/usr/bin/env python
# coding=utf-8
from django.http import HttpResponse
from django.conf.urls import url
from django.conf import settings
import sys
settings.configure(
DEBUG=True,
SECRET_KEY='thesecret',
ROOT_URLCONF=__name__,
MIDDLEWARE_CLASSES=(
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
),
)
def index(request):
return HttpResponse('Hello World!!!')
urlpatterns = (
url(r'^$',index),
)
if __name__=='__main__':
from django.core.management import execute_from_command_line
execut_from_command_line(sys.argv)
对于本地开发,尽管runserver的启动部分提供了诸如自动代码重载等许多有用的工具,但并不适合产品的部署安全性,wsgi是一份有关web服务器如何与Django一类的应用框架通信的规范,由PEP333定制 ,如今有许多使用WSGI规范的WEB服务器包括Apache下的mod_wsgi,Gunicon,uWSGI,CherryPy,Tornado和Chaussette,每个服务器都需要使用一个正确定义的WSGI应用。Django通过get_wsgi_application提供了一个用于创建这个应用的简单接口,代码如下(将其包含进hello.py)
......
from django.core.wsgi import get_wsgi_application
......
application = get_wsgi_application()
......
ALLOWED_HOSTS:验证HTTP HOST的头标值,是一个可接受服务的HOST值的列表
DEBUG:在环境变量中默认是开启的,这里需要关闭,在linux下可以通过expert指令设置,win下可以用set指令
SECRET_KEY:每次应用载入需要随机生成
import os
import sys
DEBUG = os.environ.get('DEBUG','on') == 'on'
SECRET_KEY = os.environ.get('SECRET_KEY',os.urandom(32))
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS','localhost').split(',')
settings.configure(
DEBUG=DEBUG,
SECRET_KEY=SECRET_KEY,
ALLOWED_HOSTS=ALLOWED_HOSTS,
ROOT_URLCONF=__name__,
MIDDLEWARE_CLASSES=(
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
),
)
ps:如果将DEBUG置为off若没有ALLOWED_HOSTS设置将会出现如下情况
[root@ChangerLee MinDjango]# export DEBUG=off
[root@ChangerLee MinDjango]# python hello.py runserver
CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.
Django的startproject指令可以用来模版创建布局,模版可以是zip文件也可以是目录,目录下的源文件都会被制成模版,制作过程中,project_name,project_directory,secret_key和docs_version作为上下文传递,因此源文件的这些相关部分可以用变量替换,如下:
SECRET_KEY = os.environ.get('SECRET_KEY','{{ secret_key }}'
root@ChangerLee Python]# ls
MinDjango
[root@ChangerLee Python]# tree MinDjango/
MinDjango/
└── hello.py
0 directories, 1 file
[root@ChangerLee Python]# django-admin.py startproject Demo --template=MinDjango
[root@ChangerLee Python]# ls
DBlog Demo MinDjango
[root@ChangerLee Python]# cd Demo/
[root@ChangerLee Demo]# ls
hello.py
[root@ChangerLee Demo]# cat hello.py
模版生成的源文件如下:
#!/usr/bin/env python
# coding=utf-8
from django.http import HttpResponse
from django.conf.urls import url
from django.core.wsgi import get_wsgi_application
from django.conf import settings
import os
import sys
DEBUG = os.environ.get('DEBUG','on') == 'on'
SECRET_KEY = os.environ.get('SECRET_KEY','ohgwuw3asb%%n0k*6f73wwdho%sp9h8trsihu!pc-ko))
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS','localhost').split(',')
settings.configure(
DEBUG=DEBUG,
SECRET_KEY=SECRET_KEY,
ALLOWED_HOSTS=ALLOWED_HOSTS,
ROOT_URLCONF=__name__,
MIDDLEWARE_CLASSES=(
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
),
)
def index(request):
return HttpResponse('Hello World!!!')
urlpatterns = (
url(r'^$',index),
)
application = get_wsgi_application()
if __name__=='__main__':
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
#!/usr/bin/env python
# coding=utf-8
from django.http import HttpResponse
from django.conf.urls import url
from django.core.wsgi import get_wsgi_application
from django.conf import settings
import os
import sys
DEBUG = os.environ.get('DEBUG','on') == 'on'
SECRET_KEY = SECRET_KEY = os.environ.get('SECRET_KEY',os.urandom(32))
ALLOWED_HOSTS = os.environ.get('ALLOWED_HOSTS','localhost').split(',')
settings.configure(
DEBUG=DEBUG,
SECRET_KEY=SECRET_KEY,
ALLOWED_HOSTS=ALLOWED_HOSTS,
ROOT_URLCONF=__name__,
MIDDLEWARE_CLASSES=(
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
),
)
def index(request):
return HttpResponse('Hello World!!!')
urlpatterns = (
url(r'^$',index),
)
application = get_wsgi_application()
if __name__=='__main__':
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)