wsgiref模块与jinja2模块编写web框架

wsgiref模块

from wsgiref.simple_server import make_server
# wsgiref本身就是个web框架,提供了一些固定的功能(请求和响应信息的封装,不需要我们自己写原生的socket了也不需要咱们自己来完成请求信息的提取了,提取起来很方便)
#函数名字随便起
def application(environ, start_response):
    '''
    :param environ: 是全部加工好的请求信息,加工成了一个字典,通过字典取值的方式就能拿到很多你想要拿到的信息
    :param start_response: 帮你封装响应信息的(响应行和响应头),注意下面的参数
    :return:
    '''
    start_response('200 OK', [('Content-Type', 'text/html'),('k1','v1')])
    print(environ)
    print(environ['PATH_INFO']) #获取的是请求路径
    #输入地址127.0.0.1:8000,这个打印的是'/',输入的是127.0.0.1:8000/index,打印结果是'/index'
    return [b'<h1>Hello, web!</h1>']

#和socketserver那个模块很像
httpd = make_server('127.0.0.1', 8080, application)

print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()

jinja2字符串替换

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>个人介绍</h1>
<ul>
    //jinja2的替换格式,对列表可以进行循环取值
    {% for i in hobby %}
    <li>{{ i }}</li>
    {% endfor %}
</ul>
</body>
</html>
#*************************
#python代码
from jinja2 import Template
def home(conn):
    # {% for i in hobby %}
    # <li>{{ i }}</li>
    # {% endfor %}
    with open('08jinja2test.html', 'r',encoding='utf-8') as f:
        data = f.read()
    t = Template(data)
    ret = t.render({'hobby':['金钱','女人','金鑫']})//对HTMl进行替换
    conn.send(ret.encode('utf-8'))
    conn.close()

jinja2和wsgire框架编写

import socket, time
from wsgiref.simple_server import make_server
from jinja2 import Template

# 客户端通过根路径访问时,服务端返回HTML页面
def home(conn):
    with open('test.html', 'r', encoding='utf-8')as f:
        new = str(time.time())
        s = f.read()
        # 将获取的动态时间替换掉HTML页面中的时间,达到动态返回页面的效果
        t = Template(s)
        ret = t.render({'hobby':['张达','猪繁育','力争']})
        return ret.encode('utf-8')
# 当客户端通过CSS路径访问的时候,服务端返回CSS文件
def style(conn):
    with open('style.css', 'rb')as f:
        return f.read()
# 当客户端通过JS路径访问的时候,服务端返回CSS文件
def index(conn):
    with open('test.js', 'rb')as f:
        return f.read()
# 当客户端通过请求索要图片的时候,服务端返回图片
def png(conn):
    with open('1.jpg', 'rb')as f:
        return f.read()
# 当客户端发送请求索要,ico文件的时候,返回ioc文件
def ico(conn):
    with open('wechat.ico', 'rb')as f:
        return f.read()
def ind(conn):
    with open('index.html', 'rb')as f:
        return f.read()
# 定义一个路径和文件的对应列表,节省代码,
urlList = [('/', home), ('/style.css', style), ('/test.js', index), ('/wechat.ico', ico), ('/index', ind),
           ('/1.jpg', png)]

def app(envion,start_sponse):
    #返回HTTP请求行
    start_sponse('200 ok',[])
    #获取请求路径
    path=envion['PATH_INFO']
    ret=None
    for i in urlList:
        if path==i[0]:
            ret=i[1](1)
            break
    if ret:
        return [ret]
    else:
        return [b'404']
httpd=make_server('127.0.0.1',8896,app)
httpd.serve_forever()

'''**************************************************'''
#前端代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <link rel="stylesheet" href="style.css">
    <link rel="icon" href="http://www.jd.com/favicon.ico">
    <script src="test.js"></script>
    <style>
        img{
            width: 500px;
            height: 200px;
        }
    </style>
</head>
<body>
    #循环读取hobby的数据
    {% for i in hobby %}
    <h1 id="d1">欢迎猪繁育在{{i}}来到繁育基地</h1>
    {% endfor %}
    #申明结束
    <a href="/index">你大太阳</a>
    <img src="1.jpg" alt="">
</body>
</html>

原文地址:https://www.cnblogs.com/luckinlee/p/11622195.html

时间: 2024-08-10 17:27:58

wsgiref模块与jinja2模块编写web框架的相关文章

python 编写Web框架

在正式开始Web开发前,我们需要编写一个Web框架. aiohttp已经是一个Web框架了,为什么我们还需要自己封装一个? 原因是从使用者的角度来说,aiohttp相对比较底层,编写一个URL的处理函数需要这么几步: 第一步,编写一个用@asyncio.coroutine装饰的函数: @asyncio.coroutine def handle_url_xxx(request): pass 第二步,传入的参数需要自己从request中获取: url_param = request.match_in

Day 5 - 编写Web框架

代码地址 https://github.com/michaelliao/awesome-python3-webapp/blob/day-05/www/coroweb.py 参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字参数和关键字参数. 先看懂整体框架,再看详细实现 1.coroweb.py在client请求开始返回func(*args, **kw),然后编写func(*args,**kw)处理 #比如get('/index')(func(*args, **kw)) 2.midd

python/web框架

web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8    import socket    def handle_request(client):     buf = client.recv(1024)     clien

【Python之路】第十五篇--Web框架

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven")

Python之路【第十五篇】:Web框架

Python之路[第十五篇]:Web框架 Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8   import socket   def handle_request(client):     buf = client.recv(10

初识Web框架

一.Web框架本质 Python的Web框架分为两类: 通过socket自己写程序,自己处理请求: 基于Wsgi(Web Server Gateway Interface:Web服务网关接口),处理请求. ?众所周知,对于所有的Web应用而言,本质上其实就是一个socket服务端,用户浏览器其实就是一个socket客户端. 1.Socket实现Web框架的本质 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

python学习笔记十五 web框架

python Web程序 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. Python的WEB框架分为两类: 自己写socket,自己处理请求 基于wsgi(Web Server Gateway Interface WEB服务网关接口,实现socket功能),自己处理请求 如图示: 自己写的web框架 #!/usr/bin/env python #coding:utf-8 import socket def handle_req

Python自动化运维之26、Django系列-Web框架本质

一.Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven"

Python之Web框架

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven")