Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt,他是一个吉普赛人,主要以演奏吉它为主,还演奏太小提琴等。因为Django在近年来的迅速发展,应用愈来愈普遍,被著名IT开发杂志SDTimes评选为2013SDTimes100,位列"API、库和框架"分类第6位,被认为是该领域的佼佼者。html
Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件能够很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至能够很方便的开发出本身的工具包。这使得Django具备很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原则。python
对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。web
有一种程序设计模式叫MVC,其核心思想是分工、解耦,让不一样的代码块之间下降耦合,加强代码的可扩展性和可移植性,实现向后兼容。shell
MVC的全拼为Model-View-Controller,最先由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式,是为了将传统的输入(input)、处理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的。随着标准输入输出设备的出现,开发人员只须要将精力集中在业务逻辑的分析与实现上。后来被推荐为Oracle旗下Sun公司Java EE平台的设计模式,而且受到愈来愈多的使用ColdFusion和PHP的开发者的欢迎。如今虽然再也不使用原来的分工方式,可是这种分工的思想被沿用下来,普遍应用于软件工程中,是一种典型而且应用普遍的软件架构模式。后来,MVC的思想被应用在了Web开发方面,被称为Web MVC框架。数据库
注:差别就在于黑线黑箭头标识出来的部分django
mkvirtualenv django_py3_1.11 -p python3
注意须要联网设计模式
使用django 1.11.11版本,注意须要联网浏览器
pip install django==1.11.11
# 虚拟环境 mkvirtualenv # 建立虚拟环境 rmvirtualenv # 删除虚拟环境 workon # 进入虚拟环境、查看全部虚拟环境 deactivate # 退出虚拟环境 # pip pip install # 安装依赖包 pip uninstall # 卸载依赖包 pip list # 查看已安装的依赖包 pip freeze # 冻结当前环境的依赖包
在使用Flask框架时,项目工程目录的组织与建立是须要咱们本身手动建立完成的。缓存
在django中,项目工程目录能够借助django提供的命令帮助咱们建立。服务器
建立工程的命令为:
django-admin startproject 工程名称
例如:想要在桌面的code目录中建立一个名为demo的项目工程,可执行以下命令:
cd ~/Desktop/code django-admin startproject demo
执行后,会多出一个新目录名为demo,此即为新建立的工程目录。
查看建立的工程目录,结构以下
在开发阶段,为了可以快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。
运行服务器命令以下:
python manage.py runserver ip:端口 或: python manage.py runserver
能够不写IP和端口,默认IP是127.0.0.1,默认端口为8000。
启动后可见以下信息:
在浏览器中输入网址“127.0.0.1:8000”即可看到效果。
在Web应用中,一般有一些业务功能模块是在不一样的项目中均可以复用的,故在开发中一般将工程项目拆分为不一样的子功能模块,各功能模块间能够保持相对的独立,在其余工程项目中须要用到某个特定功能模块时,能够将该模块代码总体复制过去,达到复用。
在Flask框架中也有相似子功能应用模块的概念,即蓝图Blueprint。
Django的视图编写是放在子应用中的。
在django中,建立子应用模块目录仍然能够经过命令来操做,即:
python manage.py startapp 子应用名称
manage.py 为上述建立工程时自动生成的管理文件。
例如,在刚才建立的demo工程中,想要建立一个用户users子应用模块,可执行:
cd ~/Desktop/code/demo python manage.py startapp users
执行后,能够看到工程目录中多出了一个名为users的子目录。
查看此时的工程目录,结构以下:
建立出来的子应用目录文件虽然被放到了工程项目目录中,可是django工程并不能当即直接使用该子应用,须要注册安装后才能使用。
在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS以下:
注册安装一个子应用的方法,便是将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。
例如,将刚建立的users子应用添加到工程中,可在INSTALLED_APPS列表中添加'users.apps.UsersConfig'。
同Flask框架同样,Django也用视图来编写Web应用的业务逻辑。
Django的视图是定义在子应用的views.py中的。
打开刚建立的users模块,在views.py中编写视图代码。
from django.http import HttpResponse def index(request): """ index视图 :param request: 包含了请求信息的请求对象 :return: 响应对象 """ return HttpResponse("hello the world!")
说明:
from django.conf.urls import url from . import views # urlpatterns是被django自动识别的路由列表变量 urlpatterns = [ # 每一个路由信息都须要使用url函数来构造 # url(路径, 视图) url(r'^index/$', views.index), ]
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), # django默认包含的 # 添加 url(r'^users/', include('users.urls')), ]
include函数除了能够传递字符串以外,也能够直接传递应用的urls模块,如
from django.conf.urls import url, include from django.contrib import admin import users.urls # 先导入应用的urls模块 urlpatterns = [ url(r'^admin/', admin.site.urls), # url(r'^users/', include('users.urls')), url(r'^users/', include(users.urls)), # 添加应用的路由 ]
从新启动django程序
python manage.py runserver
在浏览器中输入网址127.0.0.1:8000/users/index/ 可看到返回的信息