web程序是基于B/S架构的软件
软件的架构: C/S 和 B/S
Client客户端/Server服务端: 客户需要在自己的电脑/手机[设备终端]下载客户端, 启动了客户端以后就自动和服务端进行了通信, 通信以后,那么可以享受到 服务端提供的资源/数据或者服务.
酷狗,大型网络游戏.
Browser浏览器/Server服务端, 是一种特殊的C/S.
客户端只需要下载安装一个浏览器,不再需要针对不同的服务端去下载对应的客户端.
所有的客户端都直接运行在浏览器里面作为网页展示出来.
服务端直接与浏览器进行通信, 用户通过网页调用浏览器的资源发起http/webSocket请求服务端的数据/资源或者服务.
http协议
HyperText Transfer Protocol
超文本传输协议, 实现了客户端和浏览器的一种简单的请求-响应模式的通信.http协议是构建于tcp协议之上.
早期发布比较成熟的是http1.0版本,目前最新是2.0版本.
http的特点
-
基于请求和响应模式,
服务端是不能够主动链接客户端,推送信息的.
必须只能由客户端发起请求,服务端才能响应客户端的.
客户端但凡有所请求,服务器必有所回应.
-
一种无状态的协议
-
短连接,1.1版本以后可以通过配置修改成为长链接.
http的组成
http协议有请求和响应格式:
请求[request]
请求有三部分组成: 请求行,请求头和请求体,请求头和请求体之间必须有一个空行!!!请求体比不是必须的.
请求行 request-line method path version
请求头 request-header Host: 域名
Content-Type: 值
请求体 request-body username=xiaoming&password=123456
method : 请求方法/请求类型
get 获取数据
post 添加数据/上传数据
put 修改数据[修改全部数据]
patch 修改数据[修改部分数据]
delete 删除数据
get和delete是没有请求体的!!!
path: 请求的资源所在的路径地址
例如: /index.html
一个基于http的完整url地址:
协议://域名(IP):端口/路径?查询字符串#锚点
Protocol://domain:port/path?query_params#hash
http://www.luffycitiy.com/course/1.html?cid=1&page=2#question
https://www.luffycitiy.com/course/1?cid=1&page=2#question
version: 本次请求中使用的http协议版本
格式:
GET /index.html HTTP/1.1
Host和Content-Type: http请求中的请求头信息
GET /index.html HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
响应[response]
格式:
响应行 version status message
响应头 Location: 域名
Content-Type: 值
Content-Length: 值
响应体 一般是html文本或者json数据
status: http响应状态码
状态码一般由三个数字构成,表示整个http请求和响应过程中的处理结果.
常见的状态码
1xx 表示本次请求还在继续当中.链接没有被中断
101 链接持续中
2xx 表示本次请求和响应已经成功结束
200 ok,双方合作愉快
201 created,服务端创建数据或者文件成功了
204 no content, 服务端成功删除了数据或者文件
3xx 重定向
301 永久重定向
302 临时重定向
304 命中缓存
4xx 客户端请求发生错误了
400 bad request 请求参数有误
401 forbidden 客户端没有得到访问页面的授权[没有授权,未登录]
403 forbidden 客户端无法访问页面[没有权限]
404 not found 找不到页面
5xx 服务端响应发生错误了
500 服务器内部错误
502 网关故障
507 服务端调用第三方存储的时候出错了.
message: http响应信息,上面举例中的 ok , not content.
域名[Domain]
IP协议: xxx.xxx.xxx.xxx 每个数值的取值范围: 0-255
每个人的电脑都会有一个到多个域名:
lo网卡: 回环网卡, IP地址: 127.0.0.1
network: 192.168.0.2
IP太难记了,所以就有了域名.
域名需要和IP进行一对一的绑定.所以一般我们访问一个域名的时候,程序都会对域名进行解析成IP地址.程序本身是不具备把域名转换成IP的能力的.具备域名解析成IP能力的程序是DNS服务器.
DNS服务器,专门记录了域名和IP地址的映射关系.
DNS解析可以在用户电脑本身进行解析,也可以由路由进行解析,还可以通过专门专业的DNS服务器进行解析.
DNS服务器一般有顶级的,二级的,三级...
其中顶级DNS在全球范围有11台.
jd.com # 顶级域名, 正常情况下购买的域名 域名.域名商
www.jd.com # 二级域名
image.bold.baidu.com # 三级域名
web程序的组合
django框架
工作中一般开发web项目,往往有实力的公司,自己从0开发一个web 程序.但是如果公司要追求开发效率和开发时间,这时候,就会考虑使用已经开源的成熟的web框架.
web框架: 一个半成品网站项目,这项目,我们如果下载安装,则项目的目录结构已经固定的,里面默认提供大量给我们开发者开发项目用的类库或者功能.
python中常用的web框架: django, flask 和 ternado
轻量级的框架: flask, ternado
重量级的框架: django
django目前最新是3.x版本, 目前比较流行的2.1, 同时并存的版本2.0,2.2和1.10
django2.2
django学习工具
1. 官网: http://www.djangoproject.com 官方文档[中文]: https://docs.djangoproject.com/zh-hans/2.0/ 离线手册: https://media.djangoproject.com/docs/django-docs-2.0-zh-hans.zip 2. django社区 http://www.python88.com/ 3. pycharm 内容提示, 常用的查看代码的方式[类结构图, 单点调试]
django的快速入门
django是一个开源的重量级web框架.基于MVT设计模式开发的.
注意: django2.0以后的版本不支持python2.7以下版本.
快速安装使用
pip3 install django==2.2 -i https://pypi.douban.com/simple
基于django搭建一个web应用.
在本地安装完成django框架以后,系统环境中就会内置一个django-admin
命令,开发者可以借助这个命令快速生成django项目.
django-admin startproject 项目目录名 -p python3
django-admin startproject 项目目录名
例如:我们在当前桌面下创建一个名为demo的项目
cd ~/Desktop
django-admin startproject demo -p python3
终端输入命令:
效果:
有了项目了以后,我们可以通过django的manage.py文件调用在django内部的测试服务器来运行django项目.
cd demo python3 manage.py runserver # 注意,我们当前电脑中安装的python3所以使用python3 # 默认情况下,python在启动测试服务器,绑定域名是127.0.0.1,端口是8000 # 如果要改成别的端口或者修改成绑定别的域名,则需要在runserver 域名:端口 # python3 manage.py runserve 127.0.0.1:5555
访问效果:
上面的界面表示我们已经成功安装了django并且启动了项目项目.
一般项目开发我们都会使用虚拟环境来运行项目.
所以虚拟环境,就是为了保证项目能够在同一个电脑,和不同项目的第三方模块进行隔离使用的技术.
虚拟环境
我们需要使用虚拟环境,我们必须先安装虚拟环境到本地系统中才能够使用到.
# 安装虚拟环境的核心模块 pip3 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple # virtualenv提供的方便开发者操作虚拟环境的命令集合 pip3 install virtualenvwrapper -i https://pypi.tuna.tsinghua.edu.cn/simple pip3 install virtualenvwrapper-win # window兼容
虚拟环境的操作命令
workon Enter键 列出当前系统中所有已经创建虚拟环境 workon 虚拟环境名称 使用/进入指定名称的虚拟环境中 # 例如: 我们已经有了一个demo虚拟环境,则使用demo环境中的模块则可以 # workon demo mkvirtualenv 虚拟环境名称 创建一个指定名称的虚拟环境 # 1. 创建一个目录在 用户家目录/.virtualenvs/ # 2. 根据我们命令中的要求,复制一份python解析到虚拟环境目录中 # 3. 我们可以通过终端左边的小括号来识别当前我们是否使用了虚拟环境. # 例如: # (demo) moluo@ubuntu:~/.virtualenvs/demo/bin$ mkvirtualenv 虚拟环境名称 -p python3 指定使用python3的解析器来创建虚拟环境 deactivate 退出当前虚拟环境 # 例如: # (demo) moluo@ubuntu:~/.virtualenvs/demo/bin$ deactivate # moluo@ubuntu:~/.virtualenvs/demo/bin$ rmvirtualenv 虚拟环境名称 删除一个指定名称的虚拟环境 pip list # 列出当前python解析器中安装了的模块包列表 pip freeze # 列出当前python解析器中锁定/冻结的模块包列表 pip freeze > requirements.txt # 把当前环境中安装所有模块版本冻结并记录到requirements.txt文件中 pip install -r requirements.txt # 使用递归来执行安装requirements.txt冻结的模块对应的版本.
理论上,我们会为每一个项目都会单独搭建一个虚拟环境.方便我们将来区分每一个项目所以来的模块包和对应的版本.