一、什么是web框架?

  框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单的说,就是你用别人搭建好的舞台来做表演。

  对于所有的web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端。

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

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

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

  

from wsgiref.simple_server import make_server

def foo1(request):
    f=open("alex.html","rb")
    data = f.read()
    f.close()
    return [data]

def foo2(request):
    f = open("amos.html", "rb")
    data = f.read()
    f.close()
    return [data]

def login(request):
    f = open("login.html", "rb")
    data = f.read()
    f.close()
    return [data]

def reg(request):
    f = open("reg.html", "rb")
    data = f.read()
    f.close()
    return [data]

def auth(request):
    print("+++++",request)

    user_union,pwd_union=request.get("QUERY_STRING").split("&")
    _,user=user_union.split("=")
    _,pwd=pwd_union.split("=")

    if user =='amos' and pwd == '123':
        return ["登陆成功".encode()]
    else:
        return [b'user or pwd is wrong']

def routers():

    URLpattern = (
        ('/login',login),
        ('/auth',auth),
        ('/alex',foo1),
        ('/amos',foo2),
        ('/reg',reg),
    )

    return  URLpattern


def application(environ,start_response):
    # environ里打包了所有的请求信息
    path=environ.get("PATH_INFO")
    print(path)
    start_response('200 OK',[('Content-Type','text/html;charset=utf8')]) #返回头信息,可以写多个键值对

    urlpattern=routers()
    func=None

    for item in urlpattern:
        if path==item[0]:
            func=item[1]
            break

    if func:
        return func(environ)
    else:
        return [b'404']
    # if path=="/amos":
    #     f=open("amos.html","rb")
    #     data=f.read()
    #     f.close()
    #     return [data]
    # elif path=='/alex':
    #     f = open("alex.html", "rb")
    #     data = f.read()
    #     f.close()
    #     return [data]
    # else:
    #     return [b'<h1>404</h1>']


t=make_server("",8080,application) #实例化对象

t.serve_forever()
自己编写简单框架

相关文章: