web应用

一 什么是web应用

Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件

应用程序有两种模式C/S、B/S。C/S是客户端/服务器端程序,也就是说这类程序一般独立运行。而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助IE等浏览器来运行。WEB应用程序一般是B/S模式。

本质上:浏览器是一个socket客户端,服务器是一个socket服务端


二 基于socket写一个web应用

主要步骤如下:

WEB应用(网站):
    浏览器(socket客户端):
        02. www.cnblogs.com(42.121.252.58,80)
            sk.socket()
            sk.connect((42.121.252.58,80))
            
            sk.send('你好 web')
        05. 接受
        06. 连接断开
        
        
    博客园(socket服务端):
        01. 监听ip和端口
            while True:
                用户 = 等待用户连接
                03. 收到'你好 web'
                04. 响应: ''
                用户断开
自己写的网站
    a. socket服务端
    b. 根据URL的不同返回不同的内容
        路由系统:
            URL --> 视图函数
    c. 字符串返回给用户
        模板引擎渲染:
            HTML充当模板(特殊字符替换)
            自己创造任意数据
        返回字符串
用户在页面上看到的内容”字符串“(看到页面效果,由于浏览器解析)


web框架的分类:

 WEB框架:
    框架种类:
        01 a,b,c                  --> Tornado
        02 [第三方a],b,c           -->wsgrief(服务端 内置的)->Django
        03 [第三方a],b,[第三方c]   --> flask,(c用的jinja2)
    另一种分类:
        Django框架(web。。。)
        其他
py如下:
import socket
    def server_run():
        sk = socket.socket()
        sk = socket.bind(('127.0.0.1',8080))
        sk = socket.listen(5)
        while True:
            conn,addr = sk.accept()
            #有人来连接了
            #获取用户发送的数据
            data = conn.recv(1024)
            print(data)
            # 1. 直接在send里写,发送给客户端
            # 响应头 + 响应体(已经遵规则了)
            conn.send(b'HTTP/1.1 200 OK\r\n\r\n")<h1>hello web</h1><img     src="https://baidu.com/se44rr4r5r5k.jpg"></img>')
            # 2. 打开一个html文件,发送给客户端
            with open('index.html','r',encoding='utf-8') as f:
                data = f.read()
            conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))

            # 3. 动态网页,字符串替换
            import datetime
            now = datetime.datetime.now().strftime('%Y-%m-%d %X')
            with open('index.html','r',encoding='utf-8') as f:
                data = f.read()
            data = data.replace('@@time@@',now)
            conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
            conn.close() 

if __name__ == '__main__':
    server_run()
index.html 文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>@@time@@</h2>

<img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg" alt="">
</body>
</html>
posted @ 2018-09-04 21:02  Shinonon  阅读(133)  评论(0编辑  收藏  举报