zoukankan      html  css  js  c++  java
  • 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 RunServer(environ, start_response):
     4     start_response('200 OK', [('Content-Type', 'text/html')])
     5     return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]
     6 
     7 if __name__ == '__main__':
     8     httpd = make_server('10.88.5.131', 8000, RunServer)
     9     print("Serving HTTP on port 8000...")
    10     httpd.serve_forever()

    运行后结果为:

    二、自定义web框架

    通过python标准库提供的wsgiref模块开发一个自己的Web框架

     1 #!/usr/bin/env python
     2 #-*- coding:utf-8 -*-
     3 
     4 from wsgiref.simple_server import make_server
     5 
     6 def f1():
     7     f = open("index.html")
     8     data = f.read()
     9     f.close()
    10     #让返回的信息跟数据库的信息替换(动态 )
    11     import time
    12     db_str = str(time.time())
    13     data = data.replace("((x))",db_str)
    14     #jinja2模板给你提供更复杂的替换
    15     return data
    16 
    17 def f2():
    18     f = open("login.html")
    19     data = f.read()
    20     f.close()
    21     from jinja2 import Template
    22     template = Template(data)
    23     #接受值,进行特殊的替换
    24     ret = template.render(name="koka",user_list=["asd","qwe"])
    25     return ret.encode("utf-8")
    26 
    27 #1 定义一个字典,上面定义函数
    28 routers = {
    29     '/index/':f1,
    30     '/login/':f2,
    31 }
    32 
    33 def RunServer(environ, start_response):
    34     #environ封装用户相关的所有信息
    35     #environ["PATH_INFO"] 读取用户请求的url
    36     start_response('200 OK', [('Content-Type', 'text/html')])
    37     #根据url的不同,执行不同的函数,返回不同的字符串
    38     request_url = environ['PATH_INFO']
    39     #print environ #这里可以通过断点来查看它都封装了什么数据
    40 
    41         #如果用户请求的url和咱们定义的url匹配
    42         if request_url in routers.keys():
    43             func_name = routers[request_url]()
    44             ret = func_name()
    45             return ret
    46         else:
    47             return '404'
    48 
    49 if __name__ == '__main__':
    50     httpd = make_server('', 8000, RunServer)
    51     print "Serving HTTP on port 8000..."
    52     httpd.serve_forever()

    模板引擎:

     1 <!DOCTYPE html>
     2 <html>
     3 <head lang="en">
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <h1>Hello</h1>
     9     <div style="style="color:red;font-size:50px;">
    10           World --- ((x))
    11     </div>
    12 </body>
    13 </html>
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6         <link rel="stylesheet" href="/static/css/commons.css">
     7 </head>
     8 <body>
     9     <h1>Home</h1>
    10     <h2>{{ name }}</h2>
    11     <h2>{{ age }}</h2>
    12     <ul>
    13     {% for item in user_list %}
    14         <li>{{ item }}</li>
    15     {% endfor %}
    16     </ul>
    17 </body>
    18 </html>
  • 相关阅读:
    二维码生成库phpqrcode使用小结
    微信扫码支付开发小结
    Xcode下开发c静态库for ios CPU架构 静态库合并
    Android.mk的用法和基础
    Android.mk介绍
    查看与修改网关,DNS
    WebRTC编译系统之GYP,gn和ninja
    sed awk文本处理教程
    有哪些自媒体平台?
    camke使用例程
  • 原文地址:https://www.cnblogs.com/huan-ge/p/7223396.html
Copyright © 2011-2022 走看看