Django介绍、工程搭建、配置、静态文件与路由

Django介绍、工程搭建、配置、静态文件与路由

1. Web应用程序处理流程

  • 客户端:发起HTTP请求,接收HTTP响应。

    例如:浏览器、ajax请求、爬虫程序(模拟浏览器请求)、app

  • 服务器程序:接收HTTP请求报文、解析HTTP请求报文、构造HTTP响应报文、返回HTTP响应报文

    例如:Gunicorn 、uwsgi

  • 框架程序:–HTTP请求对象(request)—中间层(flask中是请求钩子)—具体视图处理、业务处理(模板、表单、数据库)—中间层(flask中是请求钩子)—HTTP响应对象(response)

    例如:Flask、Django、Tornado,框架自带的开发服务器并发处理能力不高,所以上线部署需要部署在Gunicorn或uwsgi服务器
    Django介绍、工程搭建、配置、静态文件与路由_第1张图片

2. Django特点

  • 2.1重量级**:Django原生提供了众多的功能组件,让开发更简便快速

    • 提供项目工程管理的自动化脚本工具
    • 数据库ORM支持(对象关系映射,英语:Object Relational Mapping)
    • 模板
    • 表单
    • Admin管理站点
    • 文件管理
    • 认证权限
    • session机制
    • 缓存
  • 2.2 MVT:

    • M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
    • V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
    • T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
      Django介绍、工程搭建、配置、静态文件与路由_第2张图片

3.安装虚拟环境和Django、创建工程和子应用

  • 3.1 安装虚拟环境

    mkvirtualenv django_py3_1.11 -p python3
    
  • 3.2 安装Django

    pip install django==1.11.11
    
  • 3.3 创建工程

    django-admin startproject 工程名称
    
  • 3.4 工程目录说明
    Django介绍、工程搭建、配置、静态文件与路由_第3张图片

    • settings.py 是项目的整体配置文件。

    • urls.py 是项目的URL配置文件。

    • wsgi.py 是项目与WSGI兼容的Web服务器入口。

    • manage.py 是项目管理文件,通过它管理项目。

  • 3.5 创建子应用

    python manage.py startapp 子应用名称
    

Django介绍、工程搭建、配置、静态文件与路由_第4张图片

  • 3.6 子应用目录说明

    • admin.py 文件跟网站的后台管理站点配置相关。

    • apps.py 文件用于配置当前子应用的相关信息。

    • migrations 目录用于存放数据库迁移历史文件。

    • models.py 文件用户保存数据库模型类。

    • tests.py 文件用于开发测试用例,编写单元测试。

    • views.py 文件用于编写Web应用视图代码。

      from django.http import HttpResponse
      
      def index(request):
          """
          index视图
          :param request: 包含了请求信息的请求对象
          :return: 响应对象
          """
          return HttpResponse("hello the world!")
      
      • 视图函数的第一个传入参数必须定义,用于接收Django构造的包含了请求数据的HttpReqeust对象,通常名为request

      • 视图函数的返回值必须为一个响应对象,不能像Flask一样直接返回一个字符串,可以将要返回的字符串数据放到一个HTTPResponse对象中。

  • 3.7 运行开发服务器

    python manage.py runserver ip:端口
    

Django介绍、工程搭建、配置、静态文件与路由_第5张图片
Django介绍、工程搭建、配置、静态文件与路由_第6张图片

4.注册安装子应用

  • 4.1 在工程配置文件【settings.py】中,【INSTALLED_APPS】列表保存了工程中已经注册安装的子应用,在后面添加:‘子应用名称.apps.(子应用apps里面的类名)’,例如:‘users.apps.UsersConfig’,类似于模块导入格式。
    Django介绍、工程搭建、配置、静态文件与路由_第7张图片

  • 4.2 在子应用中添加【urls.py】文件,用于保存该应用的路由,在【urls.py】文件中定义子应用的路由信息。例如:
    Django介绍、工程搭建、配置、静态文件与路由_第8张图片

    from django.conf.urls import url
    
    from . import views
    
    # urlpatterns是被django自动识别的路由列表变量
    urlpatterns = [
        # 每个路由信息都需要使用url函数来构造
        # url(路径, 视图)
        url(r'^index/$', views.index),
    ]
    
  • 4.3 在工程总路由的【urls.py】中添加子应用的路由数据。

    from django.conf.urls import url, include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),  # django默认包含的
    
        # r'^users/' 决定了子应用的所有路由都以/users/开头,相当于flask蓝图中的【prefix】前缀
        # 使用【include】来将子应用子应用里的全部路由包含进工程路由中
        url(r'^users/', include('users.urls')),
        
        # include函数除了可以传递字符串之外,也可以直接传递应用的urls模块
        url(r'^users/', include(users.urls)),  # 添加应用的路由
    ]
    

5.配置、静态文件与路由

1.BASE_DIR

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径。

2.DEBUG

调试模式,创建工程后初始值为True,即默认工作在调试模式下。

部署线上运行的Django不要运行在调式模式下,记得修改DEBUG=False

3.本地语言与时区(设置中文简体、亚太上海时区)

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

4.静态文件

  • STATICFILES_DIRS 存放查找静态文件的目录

  • STATIC_URL 访问静态文件的URL前缀

示例:

1) 在项目根目录下创建static_files目录来保存静态文件。

2) 在demo/settings.py中修改静态文件的两个参数为

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_files'),
]

3)此时在static_files添加的任何静态文件都可以使用网址 /static/文件在static_files中的路径 来访问了。

例如,我们向static_files目录中添加一个index.html文件,在浏览器中就可以使用127.0.0.1:8000/static/index.html来访问。

或者我们在static_files目录中添加了一个子目录和文件goods/detail.html,在浏览器中就可以使用127.0.0.1:8000/static/goods/detail.html来访问。

注意:

Django 仅在调试模式下(DEBUG=True)能对外提供静态文件。

当DEBUG=False工作在生产模式时,Django不再对外提供静态文件,需要是用collectstatic命令来收集静态文件并交由其他静态文件服务器来提供

5.路由说明

Django介绍、工程搭建、配置、静态文件与路由_第9张图片

5.1 路由定义位置

Django的主要路由信息定义在工程同名目录下的urls.py文件中,该文件是Django解析路由的入口。

每个子应用为了保持相对独立,可以在各个子应用中定义属于自己的urls.py来保存该应用的路由。然后用主路由文件包含各应用的子路由数据。

除了上述方式外,也可将工程的全部路由信息都定义在主路由文件中,子应用不再设置urls.py

5.2 路由解析顺序

Django在接收到一个请求时,从主路由文件中的【urlpatterns】列表中以【由上至下】的顺序查找对应路由规则,如果发现规则为【include】包含,则再进入被包含的【urls】中的【urlpatterns】列表【由上至下】进行查询。

5.3路由命名与reverse反解析(逆向)

在定义路由的时候,可以为路由命名,方便查找特定视图的具体路径信息。

  1. 在使用include函数定义路由时,可以使用namespace参数定义路由的命名空间,如
url(r'^users/', include('users.urls', namespace='users')),

命名空间表示,凡是users.urls中定义的路由,均属于namespace指明的users名下。

  1. 在定义普通路由时,可以使用name参数指明路由的名字,如
urlpatterns = [
    url(r'^index/$', views.index, name='index'),
    url(r'^say', views.say, name='say'),
]

5.4 reverse反解析

使用reverse函数,可以根据路由名称,返回具体的路径,如:

from django.core.urlresolvers import reverse  # 注意导包路径

def index(request):
    return HttpResponse("hello the world!")

def say(request):
    url = reverse('users:index')  # 返回 /users/index/
    print(url)
    return HttpResponse('say')
  • 对于未指明namespace的,reverse(路由name)
  • 对于指明namespace的,reverse(命名空间namespace:路由name)

5.5 路径结尾斜线/的说明

Django中定义路由时,通常以斜线/结尾,其好处是用户访问不以斜线/结尾的相同路径时,Django会把用户重定向到以斜线/结尾的路径上,而不会返回404不存在。如

urlpatterns = [
    url(r'^index/$', views.index, name='index'),
]

用户访问 index 或者 index/ 网址,均能访问到index视图。

说明:

虽然路由结尾带/能带来上述好处,但是却违背了HTTP中URL表示资源位置路径的设计理念。

是否结尾带/以所属公司定义风格为准。

6 APP应用配置

在每个应用目录中都包含了apps.py文件,用于保存该应用的相关信息。

在创建应用时,Django会向apps.py文件中写入一个该应用的配置类,如

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'

我们将此类添加到工程settings.py中的INSTALLED_APPS列表中,表明注册安装具备此配置属性的应用。

  • AppConfig.name 属性表示这个配置类是加载到哪个应用的,每个配置类必须包含此属性,默认自动生成。

  • AppConfig.verbose_name 属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示,如

    from django.apps import AppConfig
    
    class UsersConfig(AppConfig):
        name = 'users'
        verbose_name = '用户管理'
    

你可能感兴趣的:(Django框架,Django基础介绍,工程搭建,配置,静态文件与路由)