首页 > 其他分享 >纯手撸web框架

纯手撸web框架

时间:2024-02-27 19:23:42浏览次数:28  
标签:__ web 纯手 框架 request server current return data

纯手撸web框架

(1)纯手撸

# encoding : utf8
# author : heart
# blog_url : https://www.cnblogs.com/ssrheart/
# time : 2024/2/26
import socket

server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)

while True:
    conn, addr = server.accept()
    data = conn.recv(1024)
    data1 = data.decode('utf-8')
    conn.send(b'HTTP/1.1 200 OK\r\n\r\n')
    current_path = data1.split(' ')[1]
    if current_path == '/index':
        # conn.send(b'hello index')
        with open('index.html', 'rb') as f:
            conn.send(f.read())
    elif current_path == '/login':
        conn.send(b'hello login')
    else:
        conn.send(b'404 not found')
    conn.close()

(2)基于wsgiref模块

# encoding : utf8
# author : heart
# blog_url : https://www.cnblogs.com/ssrheart/
# time : 2024/2/26

from wsgiref.simple_server import make_server


def run(request,response):
    """
    :param request: 请求相关的所有数据
    :param response:  相应相关的所有数据
    :return: 返回给浏览器的数据
    """
    # print(request) # 大字典 wsgiref模块帮处理好http格式的数据 封装成了字典更加方便的操作
    response('200 OK', [])
    current_path = request.get('PATH_INFO')
    if current_path =='/index':
        return [b'index']
    elif current_path =='/login':
        return [b'login']
    return [b'404 not found']

if __name__ == '__main__':
    data = make_server('127.0.0.1', 8080, run)
    data.serve_forever()

    """
    会实时监听127.0.0.1:8080地址 只要有客户端来了
    都会交给run函数处理(加括号触发run)
    
    flask启动
        make_server('127.0.0.1', 8080, obj)
        会触发__call__
    """

(3)wsgiref优化版

server:

# encoding : utf8
# author : heart
# blog_url : https://www.cnblogs.com/ssrheart/
# time : 2024/2/26

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

def run(request, response):
    response('200 OK', [])
    current_path = request.get('PATH_INFO')
    func = None
    for url in urls:  # url (),()
        if current_path == url[0]:
            func = url[1]
            break
    if func:
        res = func(request)
    else:
        res = error(request)

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

if __name__ == '__main__':
    data = make_server('127.0.0.1', 8080, run)
    data.serve_forever()

urls:

# encoding : utf8
# author : heart
# blog_url : https://www.cnblogs.com/ssrheart/
# time : 2024/2/26
from views import *

urls = [
    ('/index', index),
    ('/login', login),
    ('/xxx', xxx),
]

views:

# encoding : utf8
# author : heart
# blog_url : https://www.cnblogs.com/ssrheart/
# time : 2024/2/26

def index(request):
    return 'index'


def login(request):
    return 'login'


def xxx(request):
    with open(r'templates/myxxx.html', 'r', encoding='utf-8') as f:
        return f.read()

def error(request):
    return '404 NOT FOUND'

动静态网页

(1)静态网页

  • 页面上的数据是直接写死的 万年不变

(2)动态网页

  • 数据是实时获取的
  • eg:
1.后端获取当前时间展示到html页面上
2.数据是从数据库获取的展示到html页面上
  • 后端:
def get_time(request):
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    with open(r'templates/mytime.html', 'r', encoding='utf-8') as f:
        data = f.read()
    data = data.replace('asdasdasdasd', current_time)
    return data
  • 前端:
<body>
<h1>我是一个html</h1>
asdasdasdasd
</body>

(3)jinja2模版语法

  • jinja2支持将数据传递到html页面并提供近似于后端的处理方式简单快捷的操作数据
pip install jinja2
  • 后端:
def get_dict(request):
    user_dict = {'name': 'heart', 'age': 18, 'gender': '男', 'hobby': 'music'}
    with open(r'templates/mydict.html', 'r', encoding='utf-8') as f:
        data = f.read()
    temp = Template(data)
    res = temp.render(user=user_dict)
    # 给mydict.html传了一个值 页面上通过变量名user就能够拿到user_dict
    return res
  • 前端:
<body>
{{user}}
{{user.name}}
{{user.age}}
{{user.gender}}
<!-- {'name': 'heart', 'age': 18, 'gender': '男', 'hobby': 'music'} heart 18 男 -->
</body>

Django

(1)创建Django文件

django-admin startproject 文件名

(2)启动Django文件

python manage.py runserver

image

标签:__,web,纯手,框架,request,server,current,return,data
From: https://www.cnblogs.com/ssrheart/p/18037624

相关文章

  • 【soap】idea生成WebServices接口
    目录1.创建接口2.生成wsdl文件3.在soapUI中,生成6个文件4.将生成的文件拷贝到工程中5.在service-config中注册服务1.创建接口新建一个webServices工程,按照接口规范生成接口、请求类、响应类。注意:(请求响应的实体中添加基本属性及get/set方法、满参构造、空参构造)//此接口与下方......
  • Qt 常见数据结构详解:从基本框架到实际应用
    在Qt框架中,数据结构的选择对于提高代码效率和性能至关重要。正确地使用数据结构可以显著提高应用程序的效率和响应速度。下面我们将详细介绍Qt中常见的几种数据结构,包括QString、QList、QVector、QMap、QHash、QSet和QPair。1.QStringQString是Qt中用于处理字符串的类。......
  • ssts-hospital-web-master项目实战记录二十六:项目迁移-Hook实现(usCountdown)
    记录时间:2024-02-27记录时间:2024-02-26一、useCountdown模块实现hooks/useCountdown.tsimport{ref,onUnmounted}from'vue'exportfunctionuseCountdown(initialSeconds:number){ constcounter=ref(initialSeconds) letinterval:ReturnType<typeof......
  • 【内容管理及平台建设】上海道宁为您提供全媒体信息管理平台——WebFuture
     在数字化、智能化的浪潮下我们的生活和工作方式正在经历前所未有的变革  动易软件是综合性软件平台更是一种全新的生活和工作方式为客户提供互联网内容管理移动互联网内容管理全媒体内容管理的平台建设及技术服务  PART01:开发商......
  • PC端web通过自定义协议唤起应用
    写注册表调用WindowsRegistryEditorVersion5.00[HKEY_CURRENT_USER\Software\Classes\test]@="URL:TestProtocol"[HKEY_CURRENT_USER\Software\Classes\test\shell][HKEY_CURRENT_USER\Software\Classes\test\shell\open][HKEY_CURRENT_USER\......
  • C#程序全局异常处理—WPF和Web API两种模式
    C#程序的全局异常处理,网上搜下资料都是一大堆,我这里最近也是独立做一个B/S结构的小项目,后面又增加了需求用WPF实现相同的功能,这里将我所使用的全局异常处理方式做一个简短的总结分享。WebAPI项目的全局异常处理这种项目下,我们可以直接自定义一个全局异常的过滤器,用来处理全局......
  • Taurus.MVC WebMVC 入门开发教程3:数据绑定Model
    前言:在这篇Taurus.MVCWebMVC入门开发教程的第三篇文章中,我们将重点介绍如何进行数据绑定操作,还会学习如何使用${属性名称} CMS语法来绑定页面上的元素与Model中的属性。步骤1:创建Model首先,我们需要创建一个Model类来存储数据。在VisualStudio中,右键单击项目文......
  • 《安富莱嵌入式周报》第333期:F35战斗机软件使用编程语言占比,开源10V基准电源,不断电运
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1y1421f7ip目录:1、F35战斗机软件使用编程语言占比2、开源10V基准电源,不断电运行一年,误差小于1uV3、资讯(1)苹果开源配置语言Pkl......
  • WebApi项目初始结构简介
    1、launchSettings.json项目的配置文件,包括项目名称、端口号等信息2、依赖项存放项目所需要的一些依赖,例如log3、Controller控制器,可以理解为所有与逻辑相关的东西都在控制器里书写4、配置文件5、程序入口......
  • Spring Security权限控制框架使用指南
    在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用waynboot-mall项目举例,给大家介绍常见后管系统如何引入权限控制框架SpringSecurity。大纲如下,一、什么是SpringSecurityS......