Django——WEB应用程序(手写程序),HTTP协议,BS CS架构

1、web应用程序

1 what:用浏览器访问的应用程序
2 优势:
    -不须要客户端
    -更新直接在服务端更新,客户端感知不到
    -跨平台性好(go语言是跨平台编译)
    ps:平台编译 好比:能够在win平台编译出linux下的可执行文件
3 缺点:
    -强调浏览器的适用性(即兼容性)
    -用户的数据都保存在软件厂商那边
    

2、bs、cs架构

1 bs:浏览器---服务端   (本质仍是cs)  web开发是bs架构
2 cs:客户端---服务端

3、本身写一个web应用,并实现动态页面

知识补充:html

  静态页面&动态页面python

  #静态页面:静态的html,内容不会改变,每次访问看到的数据都同样
  #动态页面:页面的数据会发生变化,每次访问看到的可能都不同(数据来源多是数据库)

客户端是浏览器,服务端本身写(python)
#main.py
# 1 写一个web应用的服务端,经过浏览器(客户端),来访问

import socket

server = socket.socket()

# server.bind(('127.0.0.1', 8080))
server.bind(('192.168.43.99', 8081))
server.listen(5)

while True:
    conn, addr = server.accept()
    # 接收浏览器传过来的数据
    data = conn.recv(1024)
    print(data)
    # 返回给浏览器数据(不符合http协议)
    # conn.send(b'hello world')
    # (1)返回数据符合http协议
    # conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world')

    #(2) 返回符合html格式的数据
    # conn.send('HTTP/1.1 200 ok \r\n\r\n <h1>title</h1>'.encode('utf-8'))

    # (3)返回一个html页面,打开文件,转成二进制,send一下
    # with open('index.html','r',encoding='utf-8') as f:
    #     data1=f.read()
    #把返回的数据拼起来
    # response='HTTP/1.1 200 ok \r\n\r\n %s'%data1
    # conn.send(response.encode('utf-8'))

    ## (4)实现动态页面(静态页面,动态页面)
    # 在index.html中写一个特殊标记,使用python的变量去替换这个特殊标记
    import time
    ctime=time.time()  # 多是数据库查询出来的
    with open('index.html','r',encoding='utf-8') as f:
        data1=f.read().replace('{{time}}',str(ctime))
    response='HTTP/1.1 200 ok \r\n\r\n %s'%data1
    conn.send(response.encode('utf-8'))

    conn.close()


#index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{time}}
<br>
<br>

<img height="100" width="100" src="a.jpg" alt="">
</body>
</html>

4、http协议

具体参照博客:  linux

    HTTP协议之请求方法,响应头信息,状态码web

    https://www.cnblogs.com/guojieying/p/13651818.html数据库

1 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网服务器与本地浏览器之间传输超文本的传送协议
2 应用层的协议
3 http协议特性(记一下)
    -1 基于tcp/ip之上的应用层协议
    -2 基于请求-响应模式
    -3 无状态保存
    -4 无链接



4  请求协议(浏览器发出来的)(记住)
三部分:请求首行,请求头,请求体

'''
# 请求首行(以第一个\r\n区分的),
# 请求方式:GET  请求地址:/lqz/handsome   协议:http   版本:1.1版本
GET /lqz/handsome HTTP/1.1\r\n

# 请求头(key:value形式)
Host: 192.168.11.211:8080\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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n'

# \r\n\r\n  下面的是请求体的内容

'''


5 响应协议

'''
# 响应首行  响应协议和版本:HTTP/1.1  响应的状态码和标志:200 ok  
HTTP/1.1 200 ok \r\
# 响应头(key:value形式)
key:value
key:valu
\r\n\r\n
# 响应体:在浏览器里看到的东西(浏览器能把下面的html渲染成好看的样子)

<!DOCTYPE html>
<html lang="en">
<h1>hello</h1>
</html>
'''

6 响应状态码
    -1xx:请求正在处理(用户通常看不到)        
    -2xx:请求成功(200-3xx:重定向(301  302)访问一个地址,转到另外一个地址
    -4xx:客户端错误(404,403-5xx:服务端错误(5027 url:统一资源定位符
    # 格式
    http://127.0.0.1:8080/order.html
    ftp://xxx
    协议://IP:端口(80)/路径?name=lqz&age=18
    统一资源定位符是能够从互联网上访问资源的一种方式,协议就是资源的地址
相关文章
相关标签/搜索