A light library to build tiny websites

Overview

WebNew - v0.1.1 - __init__.py

A light library to build tiny websites 一个用于搭建轻量级网站的库

对象:

(mappings,
WebApp,
Function,
DefaultSite)

1.mappings: 网站的所有站点储存,返回一个元组, 包含所有站点的定位符及其对应的类。(在v0.10版本 mappings为一个变量,故将其纳入对象行列

示例:
from webnew import *
site('Hello')  # 以GET访问 / 时,返回'Hello'
class greet: GET = lambda self: 'Hi, I\'m John.'  # 定义greet类的GET方法
newSite(greet, '/greet')   # 以GET访问 /greet 时,调用greet的GET方法,返回'Hi, I\'m John.'
print(mappings())  # 打印所有站点信息
输出:

('/', 'DefaultSite', '/greet', 'greet')

2.WebApp: 网站对应的App,是web.applaction对象。

示例:
from webnew import *
site('Hello')  # 以GET访问 / 时,返回'Hello'
reset()  # 更新WebApp的值
WebApp.run(globals())  # 运行WebApp
输出:

浏览 localhost:8080/ ,显示 Hello。

3.Function:函数类型,即 type(lambda: ...)

4.DefaultSite:网站的默认站点类,一般用于定义 /index ,建议通过调用 site() 方法设置。

方法:

1.site()

site( 
    _get: Union[object, Function] = lambda self: ...,
    _post: Union[object, Function] = lambda self: ...,
    mapping: str = '/'
) -> None

用法 :用于创建默认站点,一般用于定义网站的/index。 参数_get:当以GET访问时,调用的方法,值为一个函数,该函数需带一个 self 参数,若值为object,则在访问时直接返回该值。

_post:当以POST访问时,调用的方法,值为一个函数,该函数需带一个 self 参数,若值为object,则在访问时直接返回该值。

mapping:应为一个正则表达式,默认为'/',代表访问该站点时的接口,正则表达式所匹配的内容将会分组传入 _ge t和 _post 的参数。

示例1:
from webnew import *
site('Hello, GET.', 'Hello, POST.')  # 分别设置GET和POST的返回值
run(globals())  # 运行服务器
输出:

浏览或以GET访问 localhost:8080/ ,显示 Hello, GET. 。 以POSt访问 localhost:8080/ ,显示 Hello, POST. 。

示例2:
from webnew import *
site(lambda self, name: f'Hello, {name}.', mapping='/(.+)')  # 以GET访问/(.+)时,(.+)所匹配的内容会传入name参数再返回
run(globals())  # 运行服务器
输出:

浏览或以GET访问 localhost:8080/Tom ,显示 Hello, Tom. ,可以修改 /Tom 的值再次尝试 。

2.newSite()

newSite( 
    class_, 
    mapping: str = '/'
) -> None

用法 :用于创建新的站点,原理为调用传入类里的 GET 和 POST 方法。 参数class_:应为一个类,至少包含 GET 和 POST 方法中的一个用于处理GET和POST请求,至少需带一个 self 参数。

mapping:应为一个正则表达式,默认为'/',代表访问该站点时的接口,正则表达式所匹配的内容将会分组传入 class_ 的 GET 和 POST 的参数。

示例1:
from webnew import *
class index:  # 定义index类
    GET = lambda self: 'Hello, GET.'  # 当以GET访问时返回
    POST = lambda self: 'Hello, POST.'  # 当以POST访问时返回
newSite(index)  # 创建站点
run(globals())  # 运行服务器
输出:

浏览或以GET访问 localhost:8080/ ,显示 Hello, GET. 。 以POSt访问 localhost:8080/ ,显示 Hello, POST. 。

示例2:

请传入文件路径

') # 站点 / :返回提示HTML class open_file: # 站点类 def GET(self, path): # GET方法,path为匹配的文件地址 try: return open(path, encoding='utf-8') # 返回utf-8打开文件的内容 except Exception as e: return f'

{e}

' # 提示打开文件出错 newSite(open_file, '/(.+)') # 新建站点 /(.+) ,对应open_file类 run(globals()) # 运行服务器">
from webnew import *
site('
  

请传入文件路径

'
) # 站点 / :返回提示HTML class open_file: # 站点类 def GET(self, path): # GET方法,path为匹配的文件地址 try: return open(path, encoding='utf-8') # 返回utf-8打开文件的内容 except Exception as e: return f'

{e}

'
# 提示打开文件出错 newSite(open_file, '/(.+)') # 新建站点 /(.+) ,对应open_file类 run(globals()) # 运行服务器
输出:

浏览或以GET访问 localhost:8080/ ,显示 请传入文件路径 ,在路径后写入任意一个电脑文件路径,将会返回该文件的内容。可以尝试访问此链接访问Windows zh-CN 证书文件。

3.debug()

debug(
    mode: bool = True
) -> None

用法:用于设置网站是否调试,不调用debug()时默认为调试。 参数mode:应为布尔值,当为True时启用调试模式,为False时关闭,若调试模式启用,Python后端出现任何错误时会在此网页上报错。

示例:
from webnew import *
site(lambda self: error)  # 出现NameError
run(globals())  # 运行服务器
输出:

浏览或以GET访问 localhost:8080/ ,显示如下界面(界面大体一致,不同环境会有所差异):NameError.png

若在第二行后添加代码 debug(False)则显示 internal server error

4.reset()

reset() -> None

用法:用于重新加载 WebApp 对象的值。(WebApp可能会在未来的版本中替换为一个函数,reset()也可能会随之删除

示例:
from webnew import *
site()
print(WebApp.browser())  # 输出不固定
reset()
print(WebApp.browser())  # 输出不固定
输出:

由两次输出的数据不一致可知 reset() 改变了 WebApp 对象的值。

5.newSites()

newSites(
    *sites: tuple[Any, str]
) -> None

用法:用于一次新建多个站点。

参数

sites:形式为 ((class_, mapping), ...),意为循环执行 newSite(class_, mapping)

示例:
Go to page 1') # 定义 / 站点 class page_1: GET = lambda self: 'Go to page 2' # 定义page_1类 class page_2: GET = lambda self: 'Go to index' # 定义page_2类 newSites((page_1, '/page_1'), (page_2, '/page_2')) # 添加page_1和page_2站点 run(globals()) # 运行服务器">
from webnew import *
site('Go to page 1')  # 定义 / 站点
class page_1: GET = lambda self: 'Go to page 2'  # 定义page_1类
class page_2: GET = lambda self: 'Go to index'  # 定义page_2类
newSites((page_1, '/page_1'), (page_2, '/page_2'))  # 添加page_1和page_2站点
run(globals())  # 运行服务器
输出:

浏览或以GET访问 localhost:8080/ ,显示 Go to page 1 超链接,点击后跳转至 localhost:8080/page_1

显示 Go to page 2 超链接,点击后跳转至 localhost:8080/page_2, 显示 Go to index 超链接,点击后跳转至 localhost:8080/

6.run()

run(
    globals_ = None
) -> None

用法:用于运行服务器。

参数globals_:需要传入 globals()

说明:凡是调用 run() 都应传入 globals()

WebNew - v0.1.1 - request

# request 用于测试所编写的webnew网站程序

方法:

GET() / POST()

GET(
    ip: str = socket.gethostbyname(socket.gethostname()),
    localhost: int = 8080, mapping: str = '/'
) -> Optional[requests.Response]
POST(
    ip: str = socket.gethostbyname(socket.gethostname()),
    localhost: int = 8080, mapping: str = '/'
) -> Optional[requests.Response]

用法:通过 GET / POST 方法获取一个 requests.Response 对象

Owner
BT.Q
BT.Q
Scientific Programming: A Crash Course

Scientific Programming: A Crash Course Welcome to the Scientific Programming course. My name is Jon Carr and I am a postdoc in Davide Crepaldi's lab.

Jon Carr 1 Feb 17, 2022
万能通用对象池,可以池化任意自定义类型的对象。

pip install universal_object_pool 此包能够将一切任意类型的python对象池化,是万能池,适用范围远大于单一用途的mysql连接池 http连接池等。 框架使用对象池包,自带实现了4个对象池。可以直接开箱用这四个对象池,也可以作为例子学习对象池用法。

12 Dec 15, 2022
token vesting escrow with cliff and clawback

Yearn Vesting Escrow A modified version of Curve Vesting Escrow contracts with added functionality: An escrow can have a start_date in the past.

62 Dec 08, 2022
Xoroshiro-cairo - A xoroshiro128** pseudorandom number generator implementation in Cairo

xoroshiro-cairo A xoroshiro128** pseudorandom number generator implementation in

Milan Cermak 26 Oct 05, 2022
Multiple GNOME terminals in one window

Terminator by Chris Jones [email protected] and others. Description Terminator was

GNOME Terminator 1.5k Jan 01, 2023
Developing a python based app prototype with KivyMD framework for a competition :))

Developing a python based app prototype with KivyMD framework for a competition :))

Jay Desale 1 Jan 10, 2022
Remote Worker

Remote Worker Separation of Responsibilities There are several reasons to move some processing out of the main code base for security or performance:

V2EX 69 Dec 05, 2022
データサイエンスチャレンジ2021 サンプル

データサイエンスチャレンジ2021 サンプル 概要 線形補間と Catmull–Rom Spline 補間のサンプル Python スクリプトです。 データサイエンスチャレンジ2021の出題意図としましては、訓練用データ(train.csv)から機械学習モデルを作成して、そのモデルに推論させてモーシ

Bandai Namco Research Inc. 5 Oct 17, 2022
Implementation of the MDMC method to search for magnetic ground state using VASP

Implementation of MDMC method ( by Olga Vekilova ) to search for magnetic ground state using VASP

Utkarsh Singh 1 Nov 27, 2021
Python flexible slugify function

Python flexible slugify function

Dmitry Voronin 471 Dec 20, 2022
For when you really need to rank things

Comparisonator For when you really need to rank things. Do you know that feeling when there's this urge deep within you that tells you to compare thin

Maciej Wilczyński 1 Nov 01, 2021
Calculate the efficient frontier

关于 代码主要参考Fábio Neves的文章,你可以在他的文章中找到一些细节性的解释

Wyman Lin 104 Nov 11, 2022
Type Persian without confusing words for yourself and others, in Adobe Connect

About In the Adobe Connect chat section, to type in Persian or Arabic, the written words will be confused and will be written and sent illegibly (This

Matin Najafi 23 Nov 26, 2021
Just a simple python script to generate graphs of salt state requisites.

saltstatevis Just a simple python script to generate graphs of salt state requisites. Installation Requirements You will need to install graphviz to r

Dwayn Matthies 3 May 04, 2022
A script where you execute a script that generates a base project for your gdextension

GDExtension Project Creator this is a script (currently only for linux) where you execute a script that generates a base project for your gdextension,

Unknown 11 Nov 17, 2022
Simple cash register system made with guizero

Eje-Casher なにこれ guizeroで作った簡易レジシステムです。実際にコミケで使う予定です。 これを誰かがそのまま使うかどうかというよりは、guiz

Akira Ouchi 4 Nov 07, 2022
Architectural Patterns implementation by using notification handler module prototype

This repository covers singleton, indirection, factory, adaptor, mediator patterns in python language by using university hypothetical notification module prototype. The code is just for demonstratin

Muhammad Umair 2 Jan 08, 2022
Sync SiYuanNote & Yuque.

SiyuanYuque Sync SiYuanNote & Yuque. Install Use pip to install. pip install SiyuanYuque Execute like this: python -m SiyuanYuque Remember to create a

Clouder 23 Nov 25, 2022
Gunakan Dengan Bijak!!

YMBF Made with ❤️ by ikiwzXD_ menu Results notice me: if you get cp results, save 3/7 days then log in. Install script on Termux $ pkg update && pkg u

Ikiwz 0 Jul 11, 2022
My custom Fedora ostree build with sway/wayland.

Ramblurr's Sway Desktop This is an rpm-ostree based minimal Fedora developer desktop with the sway window manager and podman/toolbox for doing develop

Casey Link 1 Nov 28, 2021