Web 后端 开发
后端程序主要工作就是 数据管理。
通常 包括数据的 存储
(包括 增加、删除、修改)和 查询
。
这听起来似乎很简单,其实有的业务流程非常复杂 (想想淘宝购物),有时一个购买操作,要涉及到很多逻辑处理。
而且,如果设计用户量非常大,需要响应 百万级以上 的客户访问, 就需要精心的设计架构,做好多服务分布式、集群式的处理大量的用户请求。
通常,后端的开发涉及到:
-
静态文件服务方案
前端开发出来的
HTML
、css
、js
文件存储在什么地方,使用什么的服务提供给前端浏览器访问。通常一个比较大型的网站, 静态文件往往会使用单独的服务器专门提供服务。
一部分特别消耗带宽的数据(比如视频、图片)会使用第三方的云服务厂商(比如阿里云的
cdn
和oss
服务)。 -
API
接口设计, 就是 定义 前端和后端交互接口规范。目前流行的是
REST API
风格的接口,但是需要我们设计具体的API请求和响应消息的具体内容。这个通常应该是架构师设计的, 但是往往这工作经常会落到后端工程师头上。实际上 很多公司里面,系统架构师 也会做后端开发的工作。
-
数据库存储方案,比如:选择什么样的数据库,包括 关系型和非关系型的数据库。
-
数据库表结构设计, 要能合理、高效的存储业务数据,这样才能 高效查询、修改各种关联性的数据。
-
为了提高性能, 需要决定使用怎样的 缓存服务 和 异步任务服务
-
还有 其它种种特殊的考虑,比如 要熟悉目前日益流行的云存储技术,将有的数据,如图片,视频等 合理存储在云端
-
有的系统还需要有 大数据分析的需求 要后端高效实现。
一、Django相关介绍
1、什么是Django
web框架,指为解决一个开放性的问题而设计的具有一定约束性的架构。
一堆类库文件 有组织
是由python编写的,采用MTV模型。
Django官网:https://www.djangoproject.com/
框架的好处:
-
快速开发
-
简单易用
其他常见web框架:flask
web.py
Tornado
2、应用场景
快速搭建web应用 提供数据接口(API
)
CMDB
二、安装部署应用
准备工作:
1、安装python环境 python3以上
2、安装开发工具IDE Pycharm
1、安装Django
1.1、版本的选择
LTS:是长版本支持,一般我们选择都会选择LTS版本的,因为官方支持时间较长。
1.2、安装并创建项目
pip install django
跳转到目录 创建应用 目录根据实际情况选择
此处django-admin
要设置环境变量
找到django-admin.exe
的位置,加入系统环境变量
如系统中有多个python版本,选择默认python位置
C:\Users\Mocking\AppData\Local\Programs\Python\Python38\Scripts\
django-admin startproject mydjango
2、目录结构
manage.py django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py
包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py
负责把URL模式映射到应用程序。
3、创建新应用
使用manage.py文件,创建应用。
python manage.py startapp app01
4、启动Django项目
python manage.py runserver
5、使用PyCharm打开项目
三、Django使用原理
1、MVT模型
- M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
- V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
- T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
2、请求流程
四、Django的请求和响应
1、快速实现
①定义路由 urls.py
②定义视图函数 views.py
③模型数据调用 创建表
④包含模板 加载模板 (html····)
1.1、路由定义
1.2、编写视图
1.3、浏览器访问
到这里,就完成了一个页面请求。
2、请求
https://docs.djangoproject.com/en/4.0/ref/request-response/
客户端请求服务器端携带的信息
属性:
HttpRequest.scheme
:请求的方式,即http
或者是https
HttpRequest.body
:请求的主体,返回的是一个字符串
HttpRequest.path
:请求的路径,这里的路径是指相对路径,也就是说一个登陆后台页面的请求:http://127.0.0.1:8000/admin 的路径是/admin
HttpRequest.method
:请求方式POST/GET
HttpRequest.encoding
:请求提交的数据的编码方式
HttpRequest.GET
:获取get
方式表单中或url
提交的数据
HttpRequest.POST
:获取post
方式表单中或url
提交的数据
HttpRequest.META
:获取的是一个标准的python
字典。它包含了所有的HTTP
请求信息方法:
HttpRequest.get_host()
:请求的地址
HttpRequest.get_port()
:请求的端口
HttpRequest.get_full_path()
:请求的完整路径,包括get
参数
下面是2个http请求消息的示例
GET /mgr/login.html HTTP/1.1
Host: www.sysmedia.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
POST /api/medicine HTTP/1.1
Host: www.sysmedia.com
User-Agent: Mozilla/6.0 (compatible; MSIE5.01; Windows NT)
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
name=qingmeisu&sn=099877883837&desc=qingmeisuyaopin
http请求消息由下面几个部分组成
请求行 request line
是http请求的第一行的内容,表示要操作什么资源,使用的 http协议版本是什么。
里面包含了3部分信息: 请求的方法,操作资源的地址, 协议的版本号
例如
GET /mgr/login.html HTTP/1.1
表示要 获取
资源, 资源的 地址
是 /mgr/login.html
, 使用的 协议
是 HTTP/1.1
而
POST /api/medicine HTTP/1.1
表示 添加
资源信息, 添加资源 到 地址 /api/medicine
, 使用的 协议
是 HTTP/1.1
GET、POST是请求的方法,表示这个动作的大体目的,是获取信息,还是提交信息,还是修改信息等等
常见的HTTP 请求方法包括:
-
GET
从服务器
获取
资源信息,这是一种最常见的请求。比如 要 从服务器 获取 网页资源、获取图片资源、获取用户信息数据等等。
-
POST,请求方法就应该是
添加
资源信息 到 服务器进行处理(例如提交表单或者上传文件)。比如 要 添加用户信息、上传图片数据 到服务器 等等
-
PUT
请求服务器
更新
资源信息 。比如 要 更新 用户姓名、地址 等等
-
DELETE
请求服务器
删除
资源信息 。比如 要 删除 某个用户、某个资源 等等
请求头 request headers
请求头是http请求行下面的 的内容,里面存放 一些 信息。
比如,请求发送的服务端域名是什么, 希望接收的响应消息使用什么语言,请求消息体的长度等等。
通常请求头 都有好多个,一个请求头 占据一行
单个请求头的 格式是: 名字: 值
HTTP协议规定了一些标准的请求头,点击查看MDN的描述
开发者,也可以在HTTP消息中 添加自己定义的请求头
消息体 message body
请求的url、请求头中 可以存放 一些数据信息, 但是 有些数据信息,往往需要 存放在消息体中。
特别是 POST、PUT等请求,添加、修改的数据信息 通常都是 存放在 请求消息体 中的。
如果 HTTP 请求 有 消息体, 协议规定 需要在 消息头和消息体 之间 插入一个空行, 隔开 它们。
请求消息体中保存了要提交给服务端的数据信息。
比如:客户端要上传一个文件给服务端,就可以通过HTTP请求发送文件数据给服务端。
文件的数据 就应该在请求的消息体中。
再比如:上面示例中 客户端要添加资源,资源的名称、编码、描述,就存放在请求消息体中。
WEB API 请求消息体 通常是某种格式的文本,常见的有
- Json
- Xml
- www-form-urlencoded
3、响应
服务器端返回给客户端的信息
属性:
HttpResponse.content
:响应内容
HttpResponse.status_code
:响应状态码
HttpResponse.content_type
:响应类型(默认是:text/html
)
下面是1个http响应消息的示例
HTTP/1.1 200 OK
Date: Thu, 19 Sep 2019 08:08:27 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
Content-Length: 37
X-Frame-Options: SAMEORIGIN
Vary: Cookie
{
"ret": 0, "retlist": [], "total": 0}
HTTP响应消息包含如下几个部分
状态行 status line
状态行在第一行,包含3个部分:
-
协议版本
上面的示例中,就是
HTTP/1.1
-
状态码
上面的示例中,就是
200
-
描述状态的短语
上面的示例中,就是
OK
我们重点来看一下状态码,它表示了 服务端对客户端请求的处理结果 。
状态码用3位的数字来表示,第一位 的 数字代表 处理结果的 大体类型,常见的有如下几种:
• 2xx
通常 表示请求消息 没有问题,而且 服务器 也正确处理了
最常见的就是 200
• 3xx
这是重定向响应,常见的值是 301,302, 表示客户端的这个请求的url地址已经改变了, 需要 客户端 重新发起一个 请求 到另外的一个url。
• 4xx
表示客户端请求有错误, 常见的值有:
400 Bad Request
表示客户端请求不符合接口要求,比如格式完全错误
401 Unauthorized
表示客户端需要先认证才能发送次请求
403 Forbidden
表示客