zoukankan      html  css  js  c++  java
  • wsgire模块的用法:升级版的django推导2

    from wsgiref.simple_server import make_server
    # from urls import url
    # from views import *
    from jinja2 import Template
    import pymysql
    import time


    def index(env):
    return 'index'


    def reg(env):
    return 'reg'


    def login(env):
    return 'login'


    def error(env):
    return '404'


    def xxx(env):
    return 'xxx'


    def get_time(env):
    with open('templates/show_time.html','r',encoding='utf-8') as f:
    data = f.read()
    current_time = time.strftime('%Y-%m-%d %X')
    res = data.replace('sadklsajdkljsakld',current_time)
    return res


    def get_user(env):
    user_dict = {'username':'jason','password':'123','hobby':[1,2]}
    with open('templates/get_user.html','r',encoding='utf-8') as f:
    data = f.read()
    tmp = Template(data) # 实例化产生对象
    res = tmp.render(data = user_dict) # 将user_dict传递给前端页面 前端页面用过变量名data就能够拿到user_dict字典
    return res


    def get_data(env):
    conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'root',
    password = '123',
    database = 'day19',
    charset = 'utf8',
    autocommit = True
    )
    cursor = conn.cursor(pymysql.cursors.DictCursor)
    cursor.execute('select * from userinfo')
    res = cursor.fetchall()
    with open('templates/get_data.html','r',encoding='utf8') as f:
    data = f.read()
    tmp = Template(data)
    res1 = tmp.render(user_list = res) # [{},{},{}]
    return res1


    url = [
    ('/index',index),
    ('/reg',reg),
    ('/login',login),
    ('/xxx',xxx),

    ('/get_time',get_time),
    ('/get_user',get_user),
    ('/get_data',get_data)
    ]


    def run(env,response):
    response('200 OK', []) # 固定格式 不需掌握
    print(env) # 将http格式的数据处理完毕 形成一个字典给你调用

    current_path = env.get('PATH_INFO')
    func = None
    for url_tuple in url:
    if current_path == url_tuple[0]:
    func = url_tuple[1] # 如果路由匹配上了 就回去对应的函数
    break
    if func:
    res = func(env)
    else:
    res = error(env)
    return [res.encode('utf-8')]


    if __name__ == '__main__':
    server = make_server('127.0.0.1',8080,run)
    """
    这个语句会一直监听这个IP的这个端口,一旦有请求来连接成功了,就会把这个请求传给
    后面的那个函数,会自动加括号执行,如果后面放的是一个类,也会自动加括号,生成一个类
    然后走一个 __call__的方法
    就是对象加括号自动执行,就会自动走 __calll__ 这个方法, __call__方法就是这种时候自动被触发执行
    拓展:
    这种 __str__ __call__ 以双下线开头双下线结尾的方法 都是会在特定的条件下被触发执行,而不是主动触发
    __ call__ 是在对象被加括号执行的时候自动触发
    __str__ 是在对象被打印的时候自动触发

    """

    server.serve_forever()

    """
    总结:
    1.这里的wsgire模块,就是将之前纯手写的Django框架中的socket部分,以及http数据处理的部分,封装了,现在就可以直接用这个
    wsgire模块直接将这个来生成Django连接了,不需要自己手动处理那些连接问题以及数据处理的问题,而且之前基于字符串分割的数据处理
    方式只能得到一个信息,就是url后面输入的 例如Index这个东西,但是这个模块,将HTTP所有返回的参数都转成了一个K:V的大字典,可以拿到
    全部的信息,用户值需要根据这个查阅一下这个信息的格式获取那个信息的名字,就可以通过字典获取值的方式得到这个这个值,例如使用get方法
    2.这个程序所有的代码都是写在一个文件中为,可以用文件导入的方式,将这个程序的代码拆分成几个

    """
  • 相关阅读:
    进程池线程池
    线程与其操作方法
    生产者消费者模型
    Java反射机制详解
    ajax跨域原理以及解决方案
    数据库连接池的选择 Druid
    新目标
    让webstorm支持avalon语法自动补全
    使用IDEA和gradle搭建Spring MVC和MyBatis开发环境
    使用IDEA自带的rest client参数传递乱码问题
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11390990.html
Copyright © 2011-2022 走看看