web框架——原生代码简易web框架、wsgiref模块搭建简易web框架、jinja2模块实现动态页面、框架请求流程、python主流web框架、django安装与介绍


前言

当你学会了html、css、jQuery、mysql、socket,将这些整合起来就能实现简易的web程序。


一、原生代码简易web框架

一个简易的web程序需要服务端以及客户端。

1.server服务端代码:

import socket
from threading import Thread
from urls import url_list

server1 = socket.socket()
server1.bind(("127.0.0.1", 8080))
server1.listen(5)

def connect_server(server):
    while True:
        sock, addr = server.accept()
        data = sock.recv(1024)
        # 将请求相关数据转换为字符串
        data_str = data.decode("utf8")
        # 向客户端返回状态信息,此处需要发送http协议的头
        sock.send(b"HTTP1.1 200 OK\r\n\r\n")
        # 获取请求中客户端的请求信息
        current_path = data_str.split(' ')[1]
        # 根据请求信息返回对应页面
        if current_path in url_list:
            sock.send(url_list[current_path]())
        else:
            sock.send(url_list["/error"]())

threads = Thread(target=connect_server, args=(server1,))
threads.start()


2.urls.py 路由

from views import *

url_list = {
    "/index":index,
    "/login":login,
    "/error":error
}

3.views.py 视图

def allot_url(url):
    with open(url, "rb") as f:
        return f.read()

def index():
    return allot_url("index.html")

def login():
    return allot_url("login.html")

def error():
    return allot_url("error.html")

4.客户端视图

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <h1>登录页</h1>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>
    <h1>主页</h1>
</body>
</html>

error.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>错误</title>
</head>
<body>
    <h1>404</h1>
</body>
</html>

主页预览:
在这里插入图片描述


二、wsgiref模块搭建简易web框架

此处只需要将一、中的server修改代码即可
server.py

from wsgiref import simple_server
from urls import url_list

def run(request, response):
    """
    :param request: 请求相关的数据
    :param response: 响应相关的数据
    :return: 返回给客户端的展示数据
    """
    # request字典类型的数据(模块自动处理HTTP请求数据 便于后续数据获取)
    response('200 OK', [])  # 固定编写
    # 获取请求中客户端的请求信息
    current_path = request.get("PATH_INFO")
    # 根据请求信息返回对应页面
    if current_path in url_list:
        return [url_list[current_path]()] # 必须返回一个可迭代对象
    else:
        return [url_list["/error"]()] # 必须返回一个可迭代对象


if __name__ == '__main__':
    server = simple_server.make_server('127.0.0.1', 8080, run)
    '''一致监听本机8080端口 一旦有请求访问 自动触发run方法的执行'''
    server.serve_forever()

三、jinja2模块实现动态页面

jinja2为第三方模块需要下载:
pip install jinja2

首先在views添加对应的方法:

def user():
    conn = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        password='root',
        db='sqlexam',
        charset='utf8'
    )
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    sql = 'select * from student'
    cursor.execute(sql)
    data_list = cursor.fetchall()  # 获取sql查询结果
    with open("user.html", "r", encoding="utf8") as f:
        data = f.read()
    temp_obj = Template(data)
    res = temp_obj.render({"data_list": data_list})
    return res.encode("utf8")

user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户表</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>学号</th>
                <th>性别</th>
                <th>班级号</th>
                <th>姓名</th>
            </tr>
        </thead>
        <tbody>
        {% for data in data_list %}
            <tr>
                <th>data.sid</th>
                <th>data.gender</th>
                <th>data.class_id</th>
                <th>data.sname</th>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</body>
</html>

可以实现动态页面


四、 框架请求流程

在这里插入图片描述

urls.py
后缀与函数名对应关系
(‘/index’,register)
后缀专业名词称之为’路由’
函数名专业名词称之为’视图函数’
urls.py专业名词称之为’路由层’

views.py
专门编写业务逻辑代码
可以是函数 也可以是类
函数专业名词称之为’视图函数’
类专业名词称之为’视图类’
views.py专业名词称之为’视图层’

templates文件夹
专门存储html文件
html文件专业名词称之为’模板文件’
templates文件夹专业名词称之为’模板层’


五、python主流web框架

django:
大而全 自带的功能非常的多 但是有时候会略显笨重
类似于’航空母舰’

flask:
小而精 自带的功能非常的少 但是第三方模块非常的多
类似于’游骑兵’
flask的第三方模块加到一起甚至比django还多 并且也越来越像django
flask由于过多的依赖于第三方模块 有时候也会受制于第三方模块

tornado:
异步非阻塞框架 速度极快 甚至可以用于充当游戏服务器

还有一些占比较小 但是也很厉害的框架
fastapi、sanic…


六、django安装与介绍

django框架安装与介绍

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值