Djnago-世界上最简单Django示例

Djnago-世界上最简单Django示例


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模块


要将以上视图绑定到网站的结构上,它需要与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)


wsgi应用


对于本地开发,尽管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)

你可能感兴趣的:(Python开发)