4 将数据库的表数据利用模板语法展示到前端页面
wsgiref
from wsgiref.simple_server import make_server
from urls import urls
from views import error
def run(request, response):
"""
:param request:跟请求相关的数据
:param response: 跟响应相关的数据
:return: 返回值就是要给前端浏览器的数据
"""
response('200 OK',[])
# print(request) # 自动帮我们处理了所有http协议相关的数据并组织成了一个大字典
target_url = request.get('PATH_INFO') # /login
# if target_url == '/index':
# return [b'from index']
# elif target_url == '/login':
# return [b'from login']
# 提前定义一个存储函数名的变量
func = None
for url_tuple in urls: # ('/index',index)
if target_url == url_tuple[0]:
func = url_tuple[1] # func = index
break
# 需要注意可能会出现func找不到对应项
if func:
res = func(request)
else:
res = error(request)
return [res.encode('utf8')]
if __name__ == '__main__':
# 监听127.0.0.1:8080 一旦有请求 立刻将第三个参数加括号调用
server = make_server('127.0.0.1', 8080, run)
# 启动服务端
server.serve_forever()
urls
from views import *
urls = [
('/index', index),
('/login', login),
('/reg', register),
('/func',func),
('/get_time',get_time),
('/get_dict',get_dict),
('/get_user',get_user)
]
views
def index(request):
# return 'index页面'
with open(r'templates/index.html', 'r', encoding='utf8') as f:
return f.read()
def login(request):
return 'login页面'
def error(request):
return '404 error'
def register(request):
return 'register页面'
def func(request):
return 'func页面'
from datetime import datetime
def get_time(request):
# 先获取当前时间
ctime = datetime.now().strftime('%Y-%m-%d %X')
# 读取一个html文件
with open(r'templates/get_time.html', 'r', encoding='utf8') as f:
data = f.read() # 字符串
data = data.replace('sdjksajdkjsdjk', ctime)
return data
from jinja2 import Template
user = {'username': 'jason', 'pwd': 123, 'hobby': ['read', 'study']}
def get_dict(request):
with open(r'templates/get_dict.html', 'r', encoding='utf8') as f:
data = f.read()
res = Template(data)
temp = res.render({'user_dict': user})
return temp
import pymysql
def get_user(request):
# 1.先获取数据库表数据
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db8',
charset='utf8',
autocommit=True
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from user'
cursor.execute(sql)
data_list = cursor.fetchall() # [{},{},{},{}]
# 2.文件操作读取文件内容
with open(r'templates/get_user.html','r',encoding='utf8') as f:
data = f.read()
# 3.jinja2模块
res = Template(data)
tmp = res.render({'data_list':data_list})
return tmp
get_user
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">"> </head> <body> <div class="container"> <div class="row"> <h1 class="text-center">用户数据</h1> <div class="col-md-8 col-md-offset-2"> <table class="table table-hover table-striped"> <thead> <tr> <th>编号</th> <th>姓名</th> <th>密码</th> </tr> </thead> <tbody> {% for user_dict in data_list %} <tr> <td>{{user_dict.id}}</td> <td>{{user_dict.name}}</td> <td>{{user_dict.pwd}}</td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
此时cmd增加数据,刷新也会同步增加