首页 > web框架

web框架

转载:https://www.cnblogs.com/huang-yc/p/9647815.html

本文为纯属个人学习笔记,如有疏漏错误之处望前辈指正!

1. web 应用

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

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

  WEB应用程序一般是B/S模式。Web应用程序首先是“应用程序”,和用标准的程序语言,如java,python等编写出来的程序没有什么本质上的不同。在网络编程的意义下,浏览器是一个socket客户端,服务器是一个socket服务端。

import socketdef handle_request(client):request_data = client.recv(1024)print("request_data: ",request_data)client.send("HTTP/1.1 200 OK

".encode("utf8"))client.send("

Hello, web!

".encode("utf8"))def main():sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('localhost',8000))sock.listen(5)while True:print("the server is waiting for client-connection....")connection, address = sock.accept()handle_request(connection)connection.close()if __name__ == '__main__':main()

 

2.web  框架

       Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。

  web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

 

3.wsgi 模块

       最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。

  如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。

  正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块。

Python 3.x
from wsgiref.simple_server import make_serverdef RunServer(environ, start_response):#environ客户发来的所有数据start_response('200 OK', [('Content-Type', 'text/html')])#start_response 封装要返回给客户的数据,响应头状态return [b'

Hello,web!

']#返回给用户的内容#b: 字符串转字节(Python2.x中无bite.if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print"Serving HTTP on port 8000...")httpd.serve_forever()

运行该程序,在网页中输入:127.0.0.1:8000,即可打印:

 

ps:字符串转字节的三种方式:

①b'ffffff";

②bytes('ffffff', encoding = 'utf8');

③'ffffff'.encoding('utf8');

 

示例1:

from wsgiref.simple_server import make_serverdef handle_index():return [b'

Hello,index!

']def handle_date():return [b'

Hello,date !

']def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])current_url = environ['PATH_INFO']if current_url =='/index':return handle_index()elif current_url == '/date':return handle_date()else:return [b'

404!

']if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()

在网页中输入:127.0.0.1:8000/date,即可打印

 

 

------有很多URL怎么办?

 示例2:

将URL存放于字典中:

from wsgiref.simple_server import make_serverdef handle_index():return [b'

Hello,index!

']def handle_date():return [b'

Hello,date !

']URL_DICT = {"/index": handle_index,"/date": handle_date, #可用正则表达式写虚拟的 } def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])current_url = environ['PATH_INFO']func = Noneif current_url in URL_DICT:func =URL_DICT[current_url]if func:return func()else:return [b'

404!

']if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()

 

 

示例3:

可将需要打印的信息存放于HTML中,通过读取HTML文件获取打印信息:

from wsgiref.simple_server import make_serverdef handle_index(): f = open("index.html", mode='rb')data = f.read()f.close()return [data, ]def handle_date():return [b'

Hello,date !

']URL_DICT = {"/index": handle_index,"/date": handle_date, } def RunServer(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])current_url = environ['PATH_INFO']func = Noneif current_url in URL_DICT:func =URL_DICT[current_url]if func:return func()else:return [b'

404!

']if __name__ == '__main__':httpd = make_server('', 8000, RunServer)print ("Serving HTTP on port 8000...")httpd.serve_forever()

index.html文件:

DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Titletitle>
head>
<body><h1>INDEXh1>
body>
html>

 

通过以上代码,当需要处理大量的重复的操作时,我们可以采取模板,或者将某一类文件放在同一个文件夹中,比如将模板文件放在Model文件夹中,将处理函数放在Controler文件夹中,将数据库文件等放在View文件夹中,这样有了MVC框架。

web框架  
  MVC框架ModelViewControler
 数据库模板文件业务处理
MTV框架ModelTemplateView
 数据库模板文件业务处理

 

 

 

 

 

 

 

 

 

 

 

注: Django是标准的MTV框架

 

转载于:https://www.cnblogs.com/bltstop/p/11166895.html

更多相关:

  • /*判断屏幕宽高比是否为16:9*/ function isScreen16to9() {return window.screen.height / window.screen.width === 9 / 16; }...

  • /*关闭、刷新、跳转、离开当前网页前提示*/ onbeforeunload = function () {return false; };  ...

  • let json = {/**判断JSON格式*/ isJSON: function (str) {if (typeof str == "string") {try {var obj = JSON.parse(str);if (typeof obj == "object" && obj) {return true;} else {...

  •   项目结构   index.js //必须要安装否则就别想运行了❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤ //npm i body-parser -D & cnpm i express & cnpm i node-xlsx & cnp...

  • 一、递归 函数    为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性      在函数中能用return的不要print 1、递归的最大深度997 def foo(n):print(n)n+=1foo(n) foo(1) 递归的最大深度 2、修改递归的最大深度     由此我们可以看出,未报错之前能看到的最大数...