嘘~ 正在从服务器偷取页面 . . .

DJango 学习(3)—— django引入:动静态网页


DJango 学习(3)—— django引入:动静态网页

动静态网页区别

静态网页
    网页上的数据是直接写死的 万年不变

动态网页
    数据是实时获取的
    eg. 后端获取当前时间展示到前端html页面上
        后端数据从数据库获取展示到 html 页面上

借助于 wsgiref 模块实现动态网页

文件夹目录

main.py

import urls
from views import *
from wsgiref.simple_server import make_server

def run(env, response):
    """
    :param env: 请求相关的所有数据
    :param response: 响应相关的所有数据
    :return: 返回给浏览器的数据
    """

    # print(env) # 字典 wsgiref 模块处理了 http 格式的数据,封装成了字典更加方便操作

    response("200 OK", []) # 响应首行 响应头

    current_path = env.get("PATH_INFO")

    # if current_path == "/index":
    #     return [b"index"]
    # elif current_path == "/login":
    #     return [b"login"]
    #
    # return [b"404 ERROR"]

    # 定义一个变量存储匹配到的函数名
    func = None

    for url in urls.urls: # url 是 元组
        if url[0] == current_path:
            # 匹配到的 url 函数赋值给 func
            func = url[1]
            break # 匹配到一个后,应该立马结束 for 循环

    # 判断 func 是否有值
    if func:
        res = func(env)
    else:
        res = error(env)

    return [res.encode("utf-8")]

if __name__ == "__main__":
    # 实时监听 127.0.0.1:8080 地址,只要有客户端来了就会交给 run 函数处理(加括号触发 run 函数的运行)
    server = make_server("127.0.0.1", 8080, run)
    server.serve_forever()

urls.py

from views import *

# url 和 函数的对应关系
urls = [
    ("/index", index),
    ("/login", login),
    ("/time", get_time),
    ('/dic', get_dict)
] # 放在 url.py 中

views.py

def index(env):
    return "index"

def login(env):
    return "login"

def error(env):
    return "404 error"

# 第一种方式,改变 html 文件本身代码
import time

def get_time(env):
    now = time.localtime()
    now_time = time.strftime("%Y-%m-%d %X", now)

    # 如何将后端获取的数据 ”传递“ 到 html 文件
    with open(r"templates/01-get_time.html", "r", encoding="utf-8") as f:
        data = f.read() # data 就是字符串

    data = data.replace("time", now_time) # 在后端将 html 页面处理好之后在返回给前端
    return data

# 第二种方式借助 jianjia2 模块
# 将一个字典传递给 html 文件 并且可以在文件上方便快捷的操作字典数据
from jinja2 import Template
def get_dict(env):
    user_dic = {"username": "aoteman", "age": 18}

    with open(r"templates/01-get_dict.html", "r", encoding="utf-8") as f:
        data = f.read()

    tep = Template(data)
    res = tep.render(user=user_dic) # 给 html 传递了一个值,页面上通过变量名 user 就能拿到 user_dic

    return res

# 后端获取数据库中数据展示到前端页面

01-get_time.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="JQuery3.6.0.js"></script>
    <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<h1>HTML</h1>
time
</body>
</html>

01-get_dict.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>我是一个页面</h1>
{{ user }}
{{ user.get("username") }}
{{ user.age }}
</body>
</html>

模板语法之 jinja 2 模块

# 模块语法(非常贴近 python,是在后端起作用的)
{{ user }}
{{ user.get("username") }}
{{ user.age }}

{% for user_dic in user_list %}
	<tr>
		<td>{{ user_dic.id }}</td>
         <td>{{ user_dic.name }}</td>
         <td>{{ user_dic.sex }}</td>
         <td>{{ user_dic.age }}</td>
	</tr>
{% endfor %}

运行结果


文章作者: New Ass
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 New Ass !
  目录