l 复习回顾
l Django框架的优势
n MVC处理模式
n MVT处理模式
l Django项目快速入门——Hello World
n Django项目的搭建
n Django项目结构以及第一个视图的开发
n Django项目子应用模块以及应用模块第一个视图的开发
l Django文件结构、项目结构
l 项目小案例开发
l Django的整体结构[学习技能点]
1. 复习回顾
a. 什么是web?什么是web软件?什么是web开发? web指代的是网络的意思 web软件指代的就是网络软件的意思,更多的指代的是网站 web开发指代的就是通过编程的方式,实现包含各种数据处理功能的网站的过程! |
b. 什么是网络通信协议?HTTP和HTTPS分别是什么协议?有什么区别? 网络通信协议:是一种数据在网络传输过程中的约定,是数据传输双方约定的数据传输的排列和格式 HTTP是一种超文本传输协议,通过传输HTML数据来实现HTML超文本标记语言处理的数据,更多的应用使用在网站中 HTTPS是一种通过SSL数字证书提供了数据通信安全通道的HTTP协议,是一种安全的HTTP协议,通过数据非对称加密的方式实现了安全通道的处理。 相对来说,HTTPS比HTTP传输的数据更加的有安全性和保障性! |
c. wsgi是什么?web接口是什么? wsgi:web server gateway interface-web服务网关接口,也是一种通信协议 web接口:web应用程序中和外界进行数据交互的通道,通常情况下,web应用程序通过web接口向外界输出数据;外界通过接口绑定的url地址来调用接口获取数据 |
d. python中怎么实现web接口,通过什么方式处理? python通过内置的实现了wsgi的服务器,来创建服务器并将一个普通函数绑定为web接口函数,通过这个函数实现了web应用程序和外界的数据交互 内置的wsgi服务器,是通过wsgiref.simple_server.make_server()来进行创建并绑定接口函数的!通过serve_forever()函数启动服务器并提供监听端口提供服务的! |
e. python 进行web开发的优势?[扩展] web软件开发,当之无愧的王者是java,快速开发经常使用Php;但是这是因为python还没有出现;随着硬件发展已经达到一定的高度,编程语言的处理效率相对于硬件处理效率来说,时间的差异已经非常小!在这样的现状下,不同的编程语言在web开发领域比拼的就是开发效率,在开发效率来说~一个完整的web软件,以使用java开发的周期为标准[java开发使用了1年、php开发使用8个月、使用python开发3个月] python进行web开发的效率是相当高的,但是对于web软件来说,开发效率只是整个软件成本的一部分 考虑到整个软件结构的完整性和健壮性,以及功能扩展性、可维护性,java开发是首选语言。 只是考虑软件的完整性和健壮性,php是首选语言 考虑的更多的是成本和维护性,python是首选语言! 发展现状:更多的公司已经不需要考虑编程语言本身的处理速率,同时现在很多软件的扩展性并不是非常的必要,更多的考虑软件开发的速度和出现问题之后的维护成本,所以在现有状态下,python web开始流行! |
PS:补充~python是因为什么而流行的!
人工智能~概念->落地 转变过程!大型IT公司已经开发研发人工智能相关领域技术
python可以和其他语言进行无缝的交互,在人工智能方向的开发成本是最低的!
普通公司~概念->储备人工智能开发人才[python~(运维、爬虫、web、[科学计算..])]
2. Django概述
python在进行web开发过程中,如果直接使用底层操作~开发难度较大的同时,开发过程非常繁琐!
在实际使用时,python通常通过框架(framework)来完成高效率的开发
python中模块和框架有什么区别? 模块~pygame\hashlib\..:模块指代的是大量函数的一个集合 框架~Django\Torando\Flask\..:框架指代的各种模块的集合以及封装了大量的流程处理 |
实际操作时,python使用的web框架有很多,比较流行的
Django
Flask
Tornado
Web.py
等等more..
l Django框架的优势
Django是一个python web框架,主要用于进行高效率的web软件开发而衍生出来一个python组件
Django前世今世……新闻出版集团~内部内容非常多,需要有组织的管理,最直接的手段就是通过软件进行管理——决定了自己通过python开发一套适用于自己公司的内容管理系统!~ Django ~
08年Django开源发布[免费(free)、开源(opensource)],但是无人理会!
java web | php web占据了主要市场!
12/13:前端开发开始逐步火爆
12/13年移动端开始流行[各种android/ios手机、平板等等]
android工程师、ios工程师非常的受欢迎!
技术陷阱:同样一套程序~如果支持所有终端[前端/android/ios]
降低成本:找出一个技术,可以同时适应多个终端——HTML5
14~16:前端开发工程师,出现了飙升局面
维持了一年半的时间,趋于稳定——健康的发展态势
16年:alphaGO 围棋大战——奠定了人工智能落地的基石!
人工智能:模仿人的学习能力,并不是代表具有智能智慧!
人工智能——人和机器的结合!
人工智能——开发——语言——各种语言!
python成为了人工智能首选语言
16年——python开始造势的一年
各个公司开始研发python相关技术
运维、爬虫、web、科学计算……目的:人工智能
17~python web :Django、Tornado、Flask..
Django是使用python进行web开发的一个高效开发框架,具有以下优势: l 非常高效的web应用搭建 l 非常高效的web功能处理 l 完善的ORM操作[程序中的数据和数据库中的数据的对应(增删改查)关系] l 非常强大的表单处理 l 非常强大的网页模板视图[网页、模板语法(视图)] l 非常强大的路由功能[url地址和处理函数之间的映射(对应)关系] l 硬件性能突破缓存处理 l more.. |
3. Django的使用
l 首先,安装Django
# 安装django的方式,和安装普通模块的方式相同 pip install django |
pip:python install package
l 检测安装是否成功
django-admin --version |
>>> import django >>> print(django.get_version()) |
l 使用django创建web项目
django-admin startproject |
django-admin startproject mysite |
创建好的项目文件结构
|-- mysite/ # 项目文件夹[根目录] |-- mysite/ # 根项目(主项目) |-- __init__.py # 模块文件 |-- urls.py # 路由文件[url地址和处理函数进行对应] |-- settings.py # 项目的设置配置文件 |-- wsgi.py # 实现了wsgi网关协议的模块 |-- manage.py # 项目的命令管理模块[不需要修改,直接使用] |
启动并访问项目
# 在项目根目录下运行如下命令 python manage.py runserver |
如果出现如下提示信息,表示项目(使用内置服务器)正常启动 You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations f or app(s): admin, auth, contenttypes, sessions. Run 'python manage.py migrate' to apply them. November 28, 2017 - 10:59:25 Django version 1.11.7, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK. |
打开浏览器,访问http://localhost:8000
PS1:启动的项目,显示的是英文,转换成中文显示 mysite/mysite/settings.py LANGUAGE_CODE=’en_us’à ‘zh_Hans’ |
PS2:Django项目的启动,默认使用了8000端口 自定义启动端口 python manage.py runserver |
PS3:web项目发布之后目标:数据共享——允许其他人访问我们的网站 指定ip地址和端口,允许通过网络地址访问 python manage.py runserver 注意:首先在mysite/mysite/settgins.py配置文件中,修改如下配置 ALLOWSED_HOST=[“*”,] 其次在启动项目时,通过如下命令启动 python manage.py runserver 0.0.0.0:8000 |
PS4:我们通过python manage.py..这样的方式,是通过内置的测试服务器启动并发布项目的,适用于开发! 当项目开发完成,实际部署上线时,要将web项目部署到独立的服务器上[以后] |
l 创建第一个视图页面
首先在mysite/mysite/目录下,创建一个views.py视图模块
from django.http import HttpResponse def index(request): return HttpResponse(“...”) |
其次在mysite/mysite/urls.py路由文件中,添加url地址和处理函数之间的对应关系
from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ url(r“^admin/”, admin.urls), url(r”^index/$”, views.index, name=’index’) ] |
详细分析
Django是模块化管理文件的,所以不同功能的代码存放在不同的py文件中 路由相关:urls.py 设置相关:settgins.py 页面视图:views.py |
网页视图开发: 导入了一个响应对象模块:django.http.HttpResponse 可以通过响应对象模块,给浏览器返回数据 def index(request): return HttpResponse(“..”) |
路由模块:urls.py 什么是路由?路由就是从现实生活中的路由器抽象出来的一个概念,表示的url地址和对应的处理函数之间的对应[映射]关系 >>> 路由器:ip地址[请求路径]à 路由器à 个人PC[资源] >>> 路由:url请求路径à 路由à 处理函数 路由:一种映射,一种对应,表示的是一种绑定关系 类比昨天的内容——网管接口的存在——控制器——分发请求 from django.conf.urls import url[路由对象:可以绑定一组对应关系] urlpatterns = [ # 将第一个参数路径和第二个参数处理函数绑定在一起 # 请求第一个路径的时候->调用第二个参数[处理函数] # 第三个参数《就是给这个路由对象命名》 url(r’^login/$’, views.login, name=’login’), ] |
上午复习回顾
l Django概述:Django的发展历程
n Django的优势[重要]
l Django安装
n 模块[module]和框架[framework]区别?
n pip / easy_install
l Django的项目创建
n django-admin startproject
n 项目文件结构[创建好的项目,每个文件都有什么用途]
l 项目视图函数
n 根项目——视图处理模块views.py
n 视图处理函数定义
l 项目路由操作
n 根项目——路由模块urls.py
n 路由对象url(path, func, name)
PM课程:从一个故事开始……
l 创建Django项目[伴随着创建Django项目,会自动创建根项目]
n django-admin startproject myweb
n myweb/ 项目根目录
u myweb/ 根项目
u manager.py 命令模块
l 进入项目根目录执行命令创建子模块应用
n django-admin startapp myblog
n myweb/ 项目根目录
u myblog/ 子模块应用[子项目]
u myweb/ 根项目
u manage.py 命令模块
Django项目文件结构 |-- myweb/ 项目根目录 |-- myweb/ 项目根项目 |-- __init__.py |-- settings.py 配置文件 |-- urls.py 主路由文件 |-- views.py 根项目视图模块 |-- wsgi.py |-- myblog/ 项目子模块应用[子项目] |-- admin.py 后台数据注册模块 |-- app.py 子项目描述模块 |-- urls.py 子路由文件,需要包含到主路由中使用 |-- views.py 子项目视图模块 |-- models.py 子项目中的类型定义模块 |-- manage.py 命令模块 |
项目结构: 通过根项目来管理各个子项目模块,实现项目功能的可伸缩性操作 软件的开发原则 |
MVC:是一种传统的流程处理模式,是一种编程思想,主要由数据模型Model、控制器Controller以及视图View组成的一个完成流程处理模式,首先由和用户直接交互展示的视图View可以发起请求,由控制器Controller进行请求的分发,调用制定的数据处理函数对数据Model进行增删改查操作,完成一个功能的完整处理过程!
核心部分是控制器,主要实现视图和数据模型之间的数据交互的!
Django在发展的过程中,为了达到非常高效率的网站结构搭建,提供给开发人员一个干净整洁的项目结构,让开发人员更多的精力集中在功能开发上、而不是技术实现上,所以Django对于常规的MVC处理模式进行了升级——MVT处理模式
Django是实现了MVT处理模式的高效率开发的web框架 |
MVT处理模式,是在MVC处理模式上,升级得到的一种更加符合实际项目开发流程的处理思路;在这种处理模式中,将功能比较单一的控制器Controller部分,封装成了路由!
由路由来完成请求的分发操作[路由是通过配置实现的]
编程——是为了更好的解决现实生活中的问题,编程~目标->高度还原生活
生活中的各种问题,都是编程的实际体现,编程中遇到的各种编程方式,都是生活中的处理思路的还原
MVC和MVT就是这样还原出来的!
衍生的分层编程思想:代码在操作的过程中,根据不同的功能出现了分层,上层代码可以调用下层代码的函数,下层代码只能返回数据给上层代码,不能跨层调用,同层之间可以互相平行调用!
小结:
MVC处理模式|编程思想
MVT处理模式|编程思想
分层
目标:
l 理解并总结Django的开发优势
l 理解并总结Django项目的文件结构和项目结构
l 掌握Django项目和子模块应用的创建
n 掌握根项目视图的开发
n 掌握子模块视图的开发
n 掌握路由的操作
l 理解MVC和MVT编程思想
n 扩展:了解代码分层思想
l 扩展:了解虚拟开发环境的搭建和使用以及它的意义!
扩展内容:虚拟开发环境
某A君,入职HW公司;从事python开发
l 场景1:项目组~同时在开发py2和py3的项目,需要临时切换到不同的python开发环境下进行对应的项目开发
n 解决方案1:python2命令表示py2环境;python3命令表示py3环境,使用的时候通过执行不同的命令来切换不同的python开发环境【缺陷:某些第三方模块封装的代码中,自动调用执行的是python命令】
n 解决方案2:通过软件工具,来控制当前系统中使用的python命令是哪个python环境[python2或者python3]à pyenv软件
l 场景2:项目组~使用的统一的python开发环境——python3
n 但是:同时维护开发着django1.8版本的项目和django1.11版本的项目
n 解决方案:通过软件创建一个虚拟环境[局部环境],指定某个项目使用某个特殊的第三方模块——virtualenv
virtualenv虚拟环境的使用
l 安装
pip install virtualenv # virtual environment |
l 在指定的文件夹中,创建一个虚拟环境
项目文件夹结构 |-- worker/ |-- django_1_8/ # 文件夹存放的django1.8的项目 |-- django_1_11/ # 文件夹存放的django1.11的项目 |
# 进入django_1_11/目录 cd worker/django_1_11/ # 创建一个虚拟环境 virtualenv d_1_11 # 进入虚拟环境 ./d_1_11/Scripts/activate |
# 进入django_1_8/目录 cd worker/django_1_8/ # 创建一个虚拟环境 virtualenv d_1_8 # 进入虚拟环境 ./d_1_8/Scripts/activate |