概述 - 初识 Django
Django
是一个开放源代码的 Web 应用框架,由 Python
写成。采用了 MTV 的框架模式,即模型 M,视图 V 和模版 T。
有趣的是,这套框架是以比利时的吉普赛爵士吉他手 Django Reinhardt
来命名的。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是 CMS(内容管理系统)
软件,并于 2005 年 7 月在 BSD 许可证下发布。所以使用了 Django 后我们会发现,其“集成管理后台”、“模板页面”等设计思想偏向于帮助人们快速实现一个 CMS
(毕竟其前身就是一个CMS,并从中抽象而得之)。
Django
的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以 “插件” 形式服务于整个框架,Django 有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得 Django 具有很强的可扩展性。它还强调快速开发和 DRY (Do Not Repeat Yourself)
原则。Django 框架的核心组件有:
- 用于创建模型的对象关系映射;
- 为最终用户设计较好的管理界面;
- URL 设计;
- 设计者友好的模板语言;
- 缓存系统
也因为其良好的设计与简单、快速的特点,常用于快速构造中大型内部系统。
1 Django 特点
1.1 优点
- 提供管理后台,能够快速开发
- 复用度高,设计、使用上遵循 DRY 原则
- 易于扩展复用的中间件
- 内置安全框架
- 丰富的第三方类库及庞大的用户群、活跃的社区
1.2 缺点
- 单体应用,不易并行开发、单点扩展
- 不适合小项目
- 不适合高并发的 to c 互联网项目
2 环境搭建
2.1 python 环境与 python 发行版本
Python
需要运行时解释,自然运行 python
程序时少不了带上 python
解释器以及 python
程序引用的一些模块包,标准 python
解释器里已经附带了一些通用包,可以直接使用,比如 os
,sys
之类的。当我们需要使用一些标准 python
中没有的包时,我们就需要安装需要的模块。
由于 python
的这些特点,在我们的实际开发使用过程中,自然就避免不了带来一些麻烦困扰。本机上运行的所有 python
程序依赖模块统一安装在一起,工程多了,依赖模块包多了,变成一个超大依赖仓库,当某个工程需要移到其它机器上运行时,将整个超大依赖仓库一起转移?当我们在开发不同工程时用到不同版本的 python
时,需要不同的 python
环境,修改系统变量切换 python
环境?
这个时候是否发现 python
的世界要一团糟了,当然这些方法都不可取,这个时候就产生了一些Python 的集成发行版本,内置了常用的依赖及环境管理,使开发者不用再担心环境问题一键搭建好所需的开发环境。
2.2 Anaconda
Anaconda
是一个开源的 Python 发行版本,其包含了 conda、Python 等 180 多个科学包及其依赖项,使用这个发行版本能极大的方便我们进行环境的搭建,因为很多东西其已经包含进去了。
Conda
其中 Conda
是一个开源的包管理 & 环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换。
Conda
与pip
有 python
基础的同学肯定知道 pip
这个官方的包管理工具,而 Conda
是一个能力在其之上的更强大的包管理工具,她不仅可以安装包和管理包依赖,还可以创建 隔离环境
– 这样可以管理不同版本的 python
包依赖。
2.3 Conda 简易使用
2.3.1 Conda 版本与更新
1 | # 查看版本 |
2.3.2 Conda 包管理
1 | # 查看一个未安装的包在 Anaconda 库中是否存在 |
2.3.3 Conda 环境管理
使用 Conda 可以很轻松地管理 python
环境甚至对当前环境进行导出
1 | conda create -n your_env_name package_name python=X.X (2.7、3.6 等) |
使用 Conda 创建环境后,你可以在这个环境里各种乱玩不用心疼,搞坏了删除重新建立就 OK 了。
- 删除与激活环境
1 | # 激活环境 |
- 复制与导入环境
使用环境管理还有个好处,就是当你要迁移工作区时,你不需要重新配置一遍环境,可以将已建好的环境整个 copy 过来:
1 | # 复制 1 个环境 |
2.4 vsCode 配置 python
开发环境
安装插件:python
、django
、django template
2.5 安装与运行 Django
2.5.1 安装 django 依赖包
1 | conda install django |
2.5.2 创建一个项目
1 | django-admin startproject schoolSystem |
2.5.3 运行项目
1 | python manage.py migrate |
创建并启动项目后,基于地址localhost:8000/
就可以访问项目首页,而访问localhost:8000/admin
(即在根目录上加admin
路径),可访问项目的后台管理页面(所以前面介绍时也说了其基于 CMS 发展的特点,确实对开发类CMS网站非常友好)。
需要注意的是,这样运行起来的是一个开发环境的项目,用于开发的服务器在需要的情况下会对每一次的访问请求重新载入一遍 Python 代码。所以你不需要为了让修改的代码生效而频繁的重新启动服务器。
3 运行第一个简单项目
首先我们来看看基于上面步骤创建的基本项目结构
3.1 项目基础结构
1 | . |
3.2 创建 Django 应用
一个 Django 项目中包含一系列配置和应用,这些在一起共同构成一个完整的 Web 应用或网站。这样做便于运用优秀的软件工程实践。
我们常会将 web 应用分解为多个小应用,在项目目录中使用 startapp
命令创建 Django 应用,比如我们现在创建一个《教务管理系统》,我们先创建最基础的学生管理模块及欢迎页,先创建模块:
1 | python manage.py startapp student |
模块目录结构如下:
1 | └── student |
3.3 网络请求响应模型
Server端程序基本都逃不开简单的网络请求响应模型,客户端发起请求(Request),服务器接收这个请求对之进行解析并处理。
这个处理就是根据请求的标识,与服务器内部的路由配置,将请求转给对应的控制器
(Django 中稳之为 View
)处理。
处理完后,响应以响应流的形式返回给客户端。
1 | ┌─────────────┐ |
3.3.1 配置路由
在项目主目录中,需要配置根路由:
1 | from django.contrib import admin |
这里会将路径中以 student
开头的请求转发给 student
模块的 urls 路由配制文件(使用 include()
函数,可将请求转发给子路由);
然后配置student
模块中的路由文件:
1 | from django.urls import path |
这里最终将请求路由给 views.py
这个视图文件处理:
3.3.2 视图处理函数
在上面的 url模式文件,将请求转给 views.py 这个视图文件处理,具体是转给了视图文件的 views.index() 函数:
1 | from django.http import HttpResponse |
这个函数很简单,框架将请求封装好成为一个请求对象,再返回一个响应对象。就如同我们上面的数据流图一样,将整个流程抽象成输入请求、输出响应。
3.3.3 运行项目
最后,我们敲入命令运行项目:
1 | python manage.py runserver 0.0.0.0:8080 |
访问 localhost:8080/student
即可看到 "Hello, student!"
文本,说明我们的 demo 运行成功了。
访问 localhost:8080/admin
即可看到进入后台,输入我们之前创建的管理账号及密码即可进入后台管理系统了。