Django学习:第一天(世界最小的Django项目)

IMG_0961.jpg

概述


Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。

一个吉他手引起的IT潮流

环境

一、最小Django项目——Hello World


这里最小的意思,是指抛开复杂的Django框架,保留最基本的Django设置,python命令运行Web服务,并显示——Hello World

Web需要页面来显示对应内容;而页面需要网址,使得可用浏览器访问不同页面;再加上基本的Django设置,就可以开启web 服务了。
  1. Django setting——基本Django设置
  2. View——网页显示
  3. URL——网址设置
  4. 开启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的DEBUGSECRET_KEYALLOWED_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',
    ),
)

可复用模版

  1. 新建project_name文件夹,并在文件夹下新建文件project_name.py。将hello.py文件代码复制粘贴到project_name.py
  2. project_name.py代码中的SECRET_KEY = os.environ.get('secret_key', os.urandom(32))替换成SECRET_KEY = os.environ.get('secret_key', '{{ secret_key }}')
  3. 通过startproject使用模版:$ django-admin.py startproject foo --template=project_name,自动创建foo文件夹,文件夹下包含foo.py文件(代码同project_name.py)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。