Web应用和Web框架

更新日期: 2019-06-13 阅读: 3.4k 标签: web

一、Web应用

1、什么是Web应用?
Web应用程序是一种可以通过Web访问的应用程序,特点是用户很容易访问,只需要有浏览器即可,不需要安装其他软件。


2、Web应用程序的模式

应用程序有两种模式,即C/S、B/S两种,C/S是客户端/服务器端程序,这类程序一般独立运行;而B/S就是浏览器端/服务器端应用程序,这类应用程序一般借助谷歌,火狐等浏览器来运行。Web应用程序一般是B/S模式。在网络编程的意义下,浏览器是一个socket客户端,服务器是一个socket服务端。


3、实例

import socket   # 导入模块

def handle_request(client):
    request_data = client.recv(1024)  # 接收数据
    print(‘request data:‘,request_data)
    client.send(‘HTTP/1.1 200 OK\r\n\r\n‘.encode(‘utf8‘))  # 发送请求
    client.send("<h1 style=‘color:blue‘>Hello world</h1>".encode(‘utf8‘)) 


def main():
    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 实例化
    sock.bind((‘localhost‘,8800)) # 指定连接的服务器及端口
    sock.listen(5)  # 监听

    while True:
        print(‘waiting....‘)
        connection,address = sock.accept()  # 收到数据
        handle_request(connection)  #处理连接
        connection.close()  # 关闭连接

if __name__ == ‘__main__‘:
    main()

 

二、Web框架

1、什么是Web框架?

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。


2、Web框架的特点

大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法,并且实现了许多功能,开发人员使用框架提供的方法可以更快完成自己的业务逻辑,快速开发web应用,避免反复造轮子,节省了许多时间和精力,大大提高了开发的效率。

 

三、wsgiref模块

(1)wsgi协议

wsgi协议简单理解,就是wsgi server调用wsgi application接口的约定,即当有个请求到达wsgi server时,wsgi server通过调用wsgi application提供的接口来处理这个请求。


(2)wsgiref模块

wsgiref模块是由server和handler组成,server用于监听端口,接收请求;handler用于处理请求。


(3)wsgiref简单示例

#!/usr/bin/env python3
#!-*- coding:utf-8-*-
# write by cc

from wsgiref.simple_server import make_server

def application(environ,start_response):
    # environ : 按照http协议解析数据,解析后的数据格式为字典
    # start_response : 按照http协议的格式组装数据
    print(environ,type(environ)) # <class ‘dict‘>
    # return [b"<h1>Hello Web</h1>"] # 返回的格式必须是列表,内容必须是二进制数据
    path = environ.get("PATH_INFO")  # 获取当前路径
    start_response(‘200 Ok‘,[(‘Content_Type‘,‘text/html‘)]) #
    if path == ‘/index‘:
        with open(‘index.html‘,‘r‘) as f:
            data = f.read()
    elif path == ‘/login‘:
        with open(‘login.html‘,‘r‘) as f:
            data = f.read()

    return [data.encode(‘utf-8‘)]

‘‘‘
 environ = {‘ALLUSERSPROFILE‘: ‘C:\\ProgramData‘, ‘APPDATA‘: ‘C:\\Users\\CC9102\\AppData\\Roaming‘, ‘COMMONPROGRAMFILES‘: ‘C:\\Program Files\\Common Files‘, ‘COMMONPROGRAMFILES(X86)‘: ‘C:\\Program Files (x86)\\Common Files‘, ‘COMMONPROGRAMW6432‘: ‘C:\\Program Files\\Common Files‘, ‘COMPUTERNAME‘: ‘DESKTOP-3UMV17V‘, ‘COMSPEC‘: ‘C:\\Windows\\system32\\cmd.exe‘, ‘DRIVERDATA‘: ‘C:\\Windows\\System32\\Drivers\\DriverData‘, ‘FPS_BROWSER_APP_PROFILE_STRING‘: ‘Internet Explorer‘, ‘FPS_BROWSER_USER_PROFILE_STRING‘: ‘Default‘, ‘HOMEDRIVE‘: ‘C:‘, ‘HOMEPATH‘: ‘\\Users\\CC9102‘, ‘LOCALAPPDATA‘: ‘C:\\Users\\CC9102\\AppData\\Local‘, ‘LOGONSERVER‘: ‘\\\\DESKTOP-3UMV17V‘, ‘NUMBER_OF_PROCESSORS‘: ‘4‘, ‘ONEDRIVE‘: ‘C:\\Users\\CC9102\\OneDrive‘, ‘ONEDRIVECONSUMER‘: ‘C:\\Users\\CC9102\\OneDrive‘, ‘OS‘: ‘Windows_NT‘, ‘PATH‘: ‘D:\\python37\\;D:\\python37\\Scripts\\;D:\\python27\\;D:\\python27\\Scripts;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Windows\\System32\\OpenSSH\\;D:\\UltraEdit;D:\\Calibre\\;C:\\Users\\CC9102\\AppData\\Local\\Microsoft\\WindowsApps;D:\\Bandizip\\‘, ‘PATHEXT‘: ‘.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW‘, ‘PROCESSOR_ARCHITECTURE‘: ‘AMD64‘, ‘PROCESSOR_IDENTIFIER‘: ‘Intel64 Family 6 Model 61 Stepping 4, GenuineIntel‘, ‘PROCESSOR_LEVEL‘: ‘6‘, ‘PROCESSOR_REVISION‘: ‘3d04‘, ‘PROGRAMDATA‘: ‘C:\\ProgramData‘, ‘PROGRAMFILES‘: ‘C:\\Program Files‘, ‘PROGRAMFILES(X86)‘: ‘C:\\Program Files (x86)‘, ‘PROGRAMW6432‘: ‘C:\\Program Files‘, ‘PSMODULEPATH‘: ‘C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules‘, ‘PUBLIC‘: ‘C:\\Users\\Public‘, ‘PYCHARM_HOSTED‘: ‘1‘, ‘PYTHONIOENCODING‘: ‘UTF-8‘, ‘PYTHONPATH‘: ‘E:\\PyCharmFiles‘, ‘PYTHONUNBUFFERED‘: ‘1‘, ‘SESSIONNAME‘: ‘Console‘, ‘SYSTEMDRIVE‘: ‘C:‘, ‘SYSTEMROOT‘: ‘C:\\Windows‘, ‘TEMP‘: ‘C:\\Users\\CC9102\\AppData\\Local\\Temp‘, ‘TMP‘: ‘C:\\Users\\CC9102\\AppData\\Local\\Temp‘, ‘USERdomAIN‘: ‘DESKTOP-3UMV17V‘, ‘USERDOMAIN_ROAMINGPROFILE‘: ‘DESKTOP-3UMV17V‘, ‘USERNAME‘: ‘CC9102‘, ‘USERPROFILE‘: ‘C:\\Users\\CC9102‘, ‘WINDIR‘: ‘C:\\Windows‘, ‘SERVER_NAME‘: ‘DESKTOP-3UMV17V.DHCP HOST‘, ‘GATEWAY_INTERFACE‘: ‘CGI/1.1‘, ‘SERVER_PORT‘: ‘8080‘, ‘REMOTE_HOST‘: ‘‘, ‘CONTENT_LENGTH‘: ‘‘, ‘SCRIPT_NAME‘: ‘‘, ‘SERVER_PROTOCOL‘: ‘HTTP/1.1‘, ‘SERVER_SOFTWARE‘: ‘WSGIServer/0.2‘, ‘REQUEST_METHOD‘: ‘GET‘, ‘PATH_INFO‘: ‘/‘, ‘QUERY_STRING‘: ‘‘, ‘REMOTE_ADDR‘: ‘127.0.0.1‘, ‘CONTENT_TYPE‘: ‘text/plain‘, ‘HTTP_HOST‘: ‘127.0.0.1:8080‘, ‘HTTP_CONNECTION‘: ‘keep-alive‘, ‘HTTP_CACHE_CONTROL‘: ‘max-age=0‘, ‘HTTP_UPGRADE_INSECURE_REQUESTS‘: ‘1‘, ‘HTTP_USER_AGENT‘: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.134 Safari/537.36 Vivaldi/2.5.1525.40‘, ‘HTTP_ACCEPT‘: ‘text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3‘, ‘HTTP_ACCEPT_ENCODING‘: ‘gzip, deflate, br‘, ‘HTTP_ACCEPT_LANGUAGE‘: ‘zh-CN,zh;q=0.9‘, ‘wsgi.input‘: <_io.BufferedReader name=468>, ‘wsgi.errors‘: <_io.TextIOWrapper name=‘<stderr>‘ mode=‘w‘ encoding=‘UTF-8‘>, ‘wsgi.version‘: (1, 0), ‘wsgi.run_once‘: False, ‘wsgi.url_scheme‘: ‘http‘, ‘wsgi.multithread‘: True, ‘wsgi.multiprocess‘: False, ‘wsgi.file_wrapper‘: <class ‘wsgiref.util.FileWrapper‘>} <class ‘dict‘>

 ‘PATH_INFO‘: ‘/‘, ‘QUERY_STRING‘: ‘‘, ‘REMOTE_ADDR‘: ‘127.0.0.1‘,
 ‘CONTENT_TYPE‘: ‘text/plain‘,
 ‘HTTP_HOST‘: ‘127.0.0.1:8080‘,
 ‘HTTP_CONNECTION‘: ‘keep-alive‘, 
‘‘‘


# 封装socket(实例化一个socket对象,并传入参数)
httped = make_server("",8080,application)

# 等待用户连接,相当于 conn,addr = sock.accept(),用户连接后自动调用application方法
httped.serve_forever()


这个实例程序的过程就是这样几步:

第一步,写一个Web应用(application),即wsgiref application,除了函数,也可以是类(flask),参数为 environ和start_response;
第二步,通过封装socket,创建一个httped服务器,并监听8080端口(可随机指定,不与其他程序端口冲突即可),等待用户连接;
第三步,当有客户端请求时,在浏览器显示Hello, web字符串。

注意两点:

第一点:environ为一个字典,保存系统变量以及请求相关属性,例如请求路径,请求参数,请求方法等等;start_response为函数,设置response的状态码和header,然后application函数的返回值为response的body。

第二点:response状态码设置为200时,表示请求成功,在headers添加返回数据类型为text/html,以及返回的response body为[b‘<h1>Hello web</h1>‘],返回的数据必须为二进制字符串。


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/3695

相关推荐

web页面弹出遮罩层,通过js或css禁止蒙层底部页面跟随滚动

通过js或css禁止蒙层底部页面跟随滚动:pc端推荐给body添加样式overflow: hidden;height: 100%;移动端利用移动端的touch事件,来阻止默认行为,若应用场景是全平台我们要阻止页面滚动,那么何不将其固定在视窗(即position: fixed),这样它就无法滚动了,当蒙层关闭时再释放。

原生js判断用户是否操作了web页面

用户是否操作了web页面,我们可以在一定时间内根据用户是否触发了某些事件进行判断。比如用户是否点击,是否按键,是否移动了鼠标等

前端开发,页面加载速度性能优化,如何提高web页面加载速度

通过技术的角度,来探讨如何提高网页加载速度的方法和技巧,一个网站速度的访问快慢将直接影响到用户体验,对于我们开发来说是应该解决的。

Web标准

Web标准不是某一个标准,而是由W3C和其他标准化组织制定的一系列标准的集合。主要包括结构(Structure)、表现(Presentation)和行为(Behavior)三个方面。

web开发,关于XSS的介绍和案例分析

XSS攻击的全称Cross Site Scripting(跨站脚本攻击),为了避免和样式表CSS混淆而简写为XSS。XSS恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

无障碍 Web

Accessibility在 Web 发展的初期,人们习惯把它翻译成无障碍,因为它主要考虑如何让残障人士更容易地访问 Web 内容。诸如有行动障碍的人难以完成需要用鼠标进行的精确手部动作,他们更多的需要靠键盘;

Atag - Web Components 最佳实践

上一次社区中谈论起 Web Components 已经可以追溯到三四年前了,彼时 Web Components 仍处于不稳定的草案阶段,Polymer 的出世使大家似乎看到了新一代的前端技术,但直到今天,在今年五月 Google I/O 发布 Polymer 3 之后

Web 前端中的增强现实(AR)开发技术

增强现实(以下简称 AR)浪潮正滚滚而来,Web 浏览器作为人们最唾手可得的人机交互终端,正在大力发展 AR 技术。AR 可以简单的理解为一种实时将虚拟图像叠加在现实场景中的技术

Web认证_介绍Web开发中几种常用的认证机制

如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制及优缺点。

关于渐进式 Web 应用,你应该知道的一切

渐进式 Web 应用是利用现代浏览器的特性,可以添加到主屏幕上,表现得像原生应用程序一样的 Web 应用程序。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!