IMG_0961.jpg
概述
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。
一个吉他手引起的IT潮流
环境
- MAC OS 苹果系统
- Python3 安装Python
- Django 安装Django——
pip3 install django
- Visual Studio Code 编译器
一、最小Django项目——Hello World
这里最小的意思,是指抛开复杂的Django框架,保留最基本的Django设置,python命令运行Web服务,并显示——Hello World。
Web需要页面来显示对应内容;而页面需要网址,使得可用浏览器访问不同页面;再加上基本的Django设置,就可以开启web 服务了。
- Django setting——基本Django设置
- View——网页显示
- URL——网址设置
- 开启Web——runserver
第一步,新建hello.py
文件,代码如下:
第二步,执行命令行 python hello.py runserver
import sys
# 设置: Django设置详细说明了从数据库和缓存链接、国际化特性、静态和上传资源等方方面面。简化的settings
from django.conf import settings
settings.configure(
DEBUG=True,
SECRET_KEY='SECRETKEY',
ROOT_URLCONF=__name__,
MIDDLEWARE_CLASSES=(
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
),
)
# View:Django 是一个 模型-模版-视图 MTV 框架。视图部分负责信息数据的表示——Web页面。
from django.http import HttpResponse
def index(request):
return HttpResponse('<a href="\log">Hello World</a>')
def log(request):
return HttpResponse('log page <a href="http://127.0.0.1:8000/">home</a>')
# URL: 要把视图绑定到Web上,需要将它与URL相关联——网址。
from django.conf.urls import url
urlpatterns = (
url(r'^log', log),
url(r'^$', index), # url()后记得添加逗号,否则报错
)
# python的文件有两种使用的方法,第一是直接作为脚本执行,第二是import到其他的python脚本中被调用(模块重用)执行。
# if __name__ == 'main':表示作为脚本执行
# 参考:https://blog.csdn.net/zhusongziye/article/details/79505803
if __name__ == '__main__':
""" Python 是没有 runserver 命令的,需要通过django库识别 runserver 命令,并开启web服务. """
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
# 打开终端 cd到当前路径,执行下面命令行,开启Web服务
# xxxx$ python hello.py runserver
# 浏览器打开 http://127.0.0.1:8000/ 即可看到效果
二、改进
WSGI 应用
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受, 它已基本达成它的可移植性方面的目标。
WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。
以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。
WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的[[CGI]]标准而设计的。
# WSGI Web服务器网管接口
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
一、 pip 安装 Gunicorn pip3 install gunicorn==19.3.0
二、 使用 gunicorn 替代 runserver 来运行web gunicorn hello --log-file=-
附加配置
关于Django settings的DEBUG、 SECRET_KEY、 ALLOWED_HOSTS属性配置。
from django.conf import settings
import os
# DEBUG参数
DEBUG = os.environ.get('debug', 'on') == 'on'
# SECRET_KEY参数
SECRET_KEY = os.environ.get('secret_key', os.urandom(32))
# ALLOWED_HOSTS是为了限定请求中的host值,以防止黑客构造包来发送请求。只有在列表中的host才能访问。
ALLOWED_HOSTS = os.environ.get('allowed_host', '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',
),
)
可复用模版
- 新建
project_name
文件夹,并在文件夹下新建文件project_name.py
。将hello.py
文件代码复制粘贴到project_name.py
。 -
project_name.py
代码中的SECRET_KEY = os.environ.get('secret_key', os.urandom(32))
替换成SECRET_KEY = os.environ.get('secret_key', '{{ secret_key }}')
- 通过
startproject
使用模版:$ django-admin.py startproject foo --template=project_name
,自动创建foo
文件夹,文件夹下包含foo.py
文件(代码同project_name.py
)。