Python-初识Django1-笔记

一、什么是web应用

应用软件分cs(客户端与服务端),bs(浏览器与服务端)两种架构,web应用属于bs架构,b与s部署在不同的计算机上,并基于网络通信,所以说bs的本质也是套接字,其中b也就是浏览器无需我们开发,我们只需开发s端就可;

web应用的优点

  1. 不需客户端,只需浏览器就可;
  2. 耗费硬盘资源少;
  3. 客户无需更新,因为更新等操作都是在服务端进行的会自动传达到浏览器;
  4. 因在浏览器中运行,大多数情况下都可以跨平台通用;

缺点

  1. 强调浏览器的适用性,如果浏览器不支持特定功能,或者不支持某平台,导致不适用;
  2. 需要依靠互联网链接远程服务端的应用文件,连接出现问题时,应用会不能正常使用;
  3. 数据都存在服务端,可能会引起隐私数据安全等问题;

B/S架构

B/S架构即浏览器和服务器架构模式,是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构。

在这种架构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。

B/S架构是WEB兴起后的一种网络架构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。

浏览器通过Web Server同数据库进行数据交互。 这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

二、用Python写一个web应用

import socket
import time


def server1():
    soc = socket.socket()
    soc.bind(('127.0.0.1', 8080))
    soc.listen(5)
    while True:
        conn, addr = soc.accept()
        print(conn)
        data = conn.recv(2048)
        print(data)

        time1 = time.strftime("%Y-%m-%d %H:%M:%S")

        with open('index.html', 'r', encoding='utf-8') as f:
            data1 = f.read()
            data1 = data1.replace('@@@', time1)
            conn.send(('http//1.1 200 ok\r\n\r\n%s' % data1).encode('utf-8'))
            conn.close()


if __name__ == '__main__':
    server1()

index

index文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>@@@</h1>

<img src="lxx.png" alt="">

</body>
</html>

三、HTTP协议

3.1 HTTP协议简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

在这里插入图片描述

3.2 HTTP协议特性

  1. 它是基于TCP/IP协议之上的应用层协议;

  2. 基于请求-响应模式:
    HTTP协议规定,请求从客户端发出,最后服务端响应请求返回;也就是肯定从客户端开始建立通信的,服务端在没收到请求前不会响应;

  3. 无状态保存: HTTP是一种不保存状态,也就是无状态协议(stateless)协议,HTTP自身不对请求和响应之间的通信状态进行保存,也就是说在HTTP级别这个协议对于发送过的请求或响应不做持久化处理;
    在这里插入图片描述
    使用HTTP协议,每当有新的请求发送时,就会有对应的新响应产 生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计成 如此简单的。可是,随着Web的不断发展,因无状态而导致业务处理变得棘手 的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的 其他页面后,也需要能继续保持登录状态。针对这个实例,网站为了能 够掌握是谁送出的请求,需要保存用户的状态。HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能, 于是引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管 理状态了。

  4. 无连接
    无连接的含义是限制每次连接只处理一个请求,服务器处理完客户端请求,并收到客户的应答后,即断开连接,这种方使可以节省传输时间;

三、HTTP请求协议与响应协议

http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。
在这里插入图片描述

3.1 请求协议之请求格式

在这里插入图片描述
在这里插入图片描述

3.2 请求方式(get和post)

  1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的请求体中.
  2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
  3. GET与POST请求在服务端获取请求数据方式不同;
'''
GET请求
# 请求首行
GET / HTTP/1.1\r\n
# get请求后面的参数
GET /?name=lqz&age=18 HTTP/1.1\r\n
# 请求头
Host: 127.0.0.1:8008\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Cookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n'
# 请求体(get请求,请求体为空)    
'''
'''
POST请求
# 请求首行
POST /?name=lqz&age=18 HTTP/1.1\r\n
# 请求头
Host: 127.0.0.1:8008\r\nConnection: keep-alive\r\nContent-Length: 21\r\nCache-Control: max-age=0\r\nOrigin: http://127.0.0.1:8008\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nReferer: http://127.0.0.1:8008/?name=lqz&age=18\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n
# 请求体
name=lqz&password=123'

'''

3.3 响应协议之响应格式

在这里插入图片描述
在这里插入图片描述

3.4 响应状态码

状态码的用处是当客户端向服务端发送请求时,返回的请求结果,通过状态码用户可以知道服务器是否正常处理了请求还是出现问题等等,状态码如200 ok,以三位数字还原因组成,数字中的第一位指定了响应类别,后两位无分类,响应类别分五种如下图表;

在这里插入图片描述

四、URL简介

URL称为统一资源定位符,是对可以从互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址,互联网上每个资源都有唯一的URL,它包含的信息指出文件的位置以及浏览器怎么处理它;

格式:

协议://IP:端口(80)/路径?name=lqz&age=18
?之前的是请求路径,?之后的是请求数据部分

五、web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

5.1 三大web框架与wsgi协议

我们自定义框架功能大致可以分为以下几点;

功能1、socket收发消息,指的是server
功能2、根据不同的路径执行不同的处理逻辑/功能
功能3、返回动态页面(字符串的替换),如jinja2

在Python中我们可以使用别人开发的、功能更强大的Web框架,如django、tornado、flask等,三种区别如下;

#1、django框架
实现了上述功能123
django框架自定义了server(基于wsgiref+socketserver模块来实现),但这只是提供给开发测试使用的server,并不能在生产环境应用,生产环境部署django的server通常采用uwsgi
django自定义了视图系统,即实现了功能2
django自定义了模块系统,即实现了功能2
#2、tornado框架
实现了上述功能123
tornado框架自定义了server,是异步非阻塞的,效率很高,生产环境也可使用,考虑到高并发,通常选择该框架

#3、flask框架
只实现了上述功能2

5.2 wsgi协议

综上,我们得知一个Web应用的S端由server和application构成,服务器程序server负责接受HTTP请求、解析HTTP请求、发送HTTP响应等底层套接字通信的处理,都是苦力活,如果我们自己来写这些底层代码,还没开始写应用程序逻辑application呢,就得花个把月去读HTTP规范,所以我们通常直接使用别人开发好的server程序,比如wsgiref、uwsgi、或者框架自带的等等,我们则只需要把精力放在开发应用程序逻辑application上即可。因为我们在开发application时不希望接触到诸如TCP连接、HTTP原始请求和响应格式等底层套接字通信,所以需要在server与application之间建立一套统一的规范/接口,让我们专心用Python编写Web业务。
这个接口就是WSGI:Web Server Gateway Interface。
详见(了解即可):https://www.liaoxuefeng.com/wiki/897692888725344/923057027806560

其实wsgiref、uwsgi等服务器程序server都是遵循wsgi协议的,有了这套协议/标准,server与application的开发就完全解开了耦合,一批程序员可以专注于开发不同的server,一批程序员(就是我们自己)则专注于开发不同的application,只要二者都遵循wsgi协议,则开发的程序可以完美整合,这跟谈恋爱是一个道理,定好你对老婆的要求/标准,只要符合这个标准的女人都可以做你的老婆,反之也一样,所以,找到单身的原因没有

web框架的出现是为了让我们把精力更多地放在开发application上,有的web框架自己实现了高性能的server(比如tornado),有的web框架需要借助别人开发的高性能server=>uwsgi(比如django),之所以可以这么灵活,都要归功于wsgi协议

在开发过程中我们也无需关系wsgi协议,web框架都会按照wsgi协议为我们定制好application的基本功能,所以我们只需要关心最上层的应用程序的开发即可,有了web框架真是省了我们不少事;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值