Python自定义web框架、Jinja2

WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦。

python标准库提供的独立WSGI服务器称为wsgiref。

标准Web框架

#!/usr/bin/env python
#coding:utf-8
from wsgiref.simple_server import make_server

def RunServer(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
    return ‘<h1>Hello, web!</h1>‘
if __name__ == ‘__main__‘:
        httpd = make_server(‘‘, 8000, RunServer)
        print "Serving HTTP on port 8000..."
httpd.serve_forever()

  

自定义Web框架

from wsgiref.simple_server import make_server

def login():
    return ‘login‘

def index():
    data = open(‘index.html‘,‘r‘).read()
    return data

url = (
    (‘/login/‘,login),
(‘/index/‘,index),
)

def RunServer(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])

    geturl = environ[‘PATH_INFO‘]
    for item in url:
        if item[0] == geturl:
            return  item[1]()
    else:
        return ‘404‘

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

  

MVC和MTV       代码堆放的归类

  MVC:Model、View、Controller        
                    model存放数据操作,view存放html文件,controller负责逻辑处理

  MTV:Model、Template、View
                     model存放数据操作,Template存放html文件,View负责逻辑处理

Django是 MTV模式

模板渲染jinja2

from wsgiref.simple_server import make_server
import time
from jinja2 import Template
import sys
reload(sys)
sys.setdefaultencoding(‘utf8‘)    #//解决UnicodeDecodeError

def login():
    return ‘login‘

def index():
    data = open(‘index.html‘,‘r‘).read()
    current_time = time.strftime(‘%Y-%m-%d %H:%M:%S‘)
    template = Template(data)   #使用jinja2模板处理
    result = template.render(name=‘yangmv‘,
                             age=‘18‘,
                             current_time=current_time,
                             user_list=[‘wj‘,‘sb‘,],
                             num=1,
                             )

    return result.encode(‘utf-8‘)

url = (
    (‘/login/‘,login),
    (‘/index/‘,index),
)

def RunServer(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])

    geturl = environ[‘PATH_INFO‘]
    for item in url:
        if item[0] == geturl:
            return  item[1]()
    else:
        return ‘404‘

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

 

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <!--jinja2传值-->
    <h1>{{ name }}</h1>
    <h1>{{ age }}</h1>
    <h1>{{ current_time }}</h1>

    <!--jinja2实现for循环-->
    <ul>
        {% for item in user_list %}
            <li>{{item}}</li>
        {% endfor %}
    </ul>
    <!--jinja2实现if判断-->
    {% if num == 1 %}
        <h1>111</h1>
    {% else %}
        <h1>222</h1>
    {% endif %}
</body>
</html>

  

时间: 2024-10-02 07:06:25

Python自定义web框架、Jinja2的相关文章

python -- 自定义web框架

在学习自定义web框架之前我们对什么是web框架需要有个清晰的认识,本质上说,web框架就是一个socket Server. 目前常见的动态网站WEB框架前面有WSGI(eg:Django.Flask...)或者是自己写的SOCKET(Tornado),然后交给URL路由系统处理,然后交给某个函数或某个类,然后在模板(常用jinja2)里拿到模板然后把模板和从数据库取出的数据进行混合组成一个字符串然后返回给用户(python3在发送时要byte编码). 这里对WSGI举例说明一下: WSGI是用

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框架

对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦. 一.python标准库提供的独立WSGI服务器称为wsgiref 1 from wsgiref.simple_server import make_server 2 3 def Ru

自定义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)     client.send

自定义web框架(django)

Django基础了解知识 HTTP协议(超文本传输协议) HTTP协议 四大特性: 基于TCP/IP之上作用于应用层 基于请求响应 无状态 引申出cookie session token-- 无连接 长连接 websocket (HTTP协议的大补丁) 数据格式: 请求格式 请求首行(请求方式,协议版本等等) 请求头(一大堆K:V键值对) \r\n 或者是\n 总之就是加一个空行 请求体(真正的数据 发post请求的时候才有 如果是get请求不会有) 响应格式 响应首行 响应头 \r\n 或者是

Python之Web框架介绍

所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来 Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理 Python的Web框架分成了两类, 即包含socket也包含业务逻辑处理的(tornado) 不包含socket(框架本身通过第三方模块实现socket)只包含业务逻辑处理(django,Flask) WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具

Python之Web框架Django

Python之Web框架: Django 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 #web框架的基础结构,几乎所有开发者都是基于此基础结果进行扩展. 5 6 import socket 7 8 def handle_request(client): 9 buf = client.recv(1024) 10 clien

第二篇:Python高性能Web框架tornado源码剖析之待请求阶段

上篇<第一篇:Python高性能Web框架Tornado原理剖析>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestH

python 实现web框架simfish

python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供了简单的simple_server, wsgiref.simple_server.make_server(host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler) 官方提供的例子, from wsgiref