Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fengliufeseliud/pyhp-web
Python Hypertext Preprocessor Web 服务端,在请求页面时后端执行 Html 文件中的 Python 代码生成动态网页 (类似 PHP)
https://github.com/fengliufeseliud/pyhp-web
asyncio hypertext-preprocessor language php pyhp python3 server web
Last synced: about 4 hours ago
JSON representation
Python Hypertext Preprocessor Web 服务端,在请求页面时后端执行 Html 文件中的 Python 代码生成动态网页 (类似 PHP)
- Host: GitHub
- URL: https://github.com/fengliufeseliud/pyhp-web
- Owner: FengLiuFeseliud
- License: mit
- Created: 2022-08-31T13:23:50.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2022-09-12T09:06:30.000Z (about 2 years ago)
- Last Synced: 2024-10-13T18:18:38.750Z (26 days ago)
- Topics: asyncio, hypertext-preprocessor, language, php, pyhp, python3, server, web
- Language: Python
- Homepage:
- Size: 73.2 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PyHP-web
一种 Python 轻量异步 Web 服务端 (原生异步 socket 实现),在请求页面时后端执行 Html 文件中的 Python 代码动态生成页面
可以在 Html 文件中使用各种 Python 库,非常适合不用处理大量请求的 web 线上工具
![img](https://img.sakuratools.top/docs/pyhp/[email protected])
## 安装
pyhp 安装使用 pip
```bash
pip install pyhpweb
```## Demo
后端代码
```python
{time}") ?>
GET
First name:
Last name:
POST
First name:
Last name:
http_version: %s" % request_path["http_version"],
"request_mode: %s
" % request_path["mode"],
"request_path: %s
" % request_path["path"],
"url: %s
" % url,
f"get: {get}
",
f"post: {post}
",
f"cookie: {cookie}
",
f"request_header: {request_header}
",
f"request_data: {request_data}
",
f"PyHP version {__version__}
"
)
?>```
客户端请求生成动态页面
![img](https://img.sakuratools.top/docs/pyhp/[email protected])
![img](https://img.sakuratools.top/docs/pyhp/[email protected])
## 快速入门
使用 PyHP 时需要先启动 PyHP 服务,如下创建一个最简单的服务器文件,运行后启动 PyHP 服务,默认网站根目录为服务器文件所在文件夹,如果 Linux 下有安装 uvloop PyHP 将自动启用
```python
from pyhpweb import PyHP_ServerPyHP_Server().start()
```默认启动后可以访问 [http://127.0.0.1:5000/](http://127.0.0.1:5000/)
### 主页
使用 `.html` `.py` `.pyhtml` `.pyh` 的文件都会被 pyhp 解析,不过还是推荐使用 `.pyhtml` `.pyh`,PyHP 服务默认启动后主页为网站路径下的 `index.pyh` ,在没有主页时访问 [http://127.0.0.1:5000/](http://127.0.0.1:5000/) 会发生 404
简单创建一个主页显示 PyHP 服务已经启动
```python
PyHP v{__version__}")
?>Run in Server
```效果
![img](https://img.sakuratools.top/docs/pyhp/[email protected])
### 代码块
PyHP 在 html 页面中的任何地方都可以执行 Python 代码只需要使用 `` 说明
前面代码块中定义的变量,在后面的代码块都可以使用,但是前面代码块引用的模块,在后面的代码块不可以使用
代码块 `print` 会向页面输出,代码块 `print` 的数据将在这块代码块执行完后,替换这块代码块 (代码块在哪个元素中 `print` 的数据就会在哪个元素中,如果需要直接输出请求数据使用 `html_encode` 可以防止 xss 攻击 ,`from pyhp.tools import html_encode` 引用 `html_encode`
```python
测试代码块
print ps {p_text}\n'*10) ?>
for in {i} {p_text}\n')
?>
```
## 非阻塞生成页面
PyHP 如果一个页面生成在执行 io 操作不会影响其他页面
```python
```
## 超级全局变量
超级全局变量为 PyHP 定义的变量,在代码块的所有作用域中都可用
这里列出常用的,详细查看文档
> **`html`**:当前代码块所在的 Py_Html 对象
>
> **`html.header`**:页面响应头, 设置响应头html.header = {"响应类型": 值}
>
> **`html.response`**:页面响应行, 设置响应行 html.response = {"响应类型": 值}, 响应类型: code: 响应码, msg: 响应内容, http_version: http 版本
>
> **`request_header`**:请求头
>
> **`request_path`**:请求模式 / 请求路径 / 请求 HTTP 版本
>
> **`url`**:请求 URL
>
> **`post`**: POST 数据
>
> **`get`**: GET 数据
>
> **`cookie`**: Cookie 数据输出测试
```python
\n请求参数
",
"request_path: %s
" % request_path,
"url: %s
" % url,
f"get: {get}
",
f"post: {post}
",
f"cookie: {cookie}
",
"
\n请求头
",
f"request_header: {request_header}
",
"
\n响应头
",
f"response: {html.response}
",
f"header: {html.header}
",
"
",
f"PyHP version {__version__}
"
)
```## include 包含文件
PyHP 中的 `include` 与 PHP 类似, 可以导入页面并执行里面的 Python 代码并把页面写入当前页面
被包含页面执行完后可以更新包含它的文件中的变量与设置的 Cookie, 被包含的页面也可以使用包含它的文件中的变量与响应头与响应行 , `include` `update_header` 为 `True` 时, 被包含可以允许更新包含它的文件的响应头与响应行
`include` 导入页面错误时不会影响后面代码执行
```python
include cookie.pyhtml ")# 相对路径引入
include("cookie.pyhtml")print("
include vals.pyhtml
")# 相对路径引入 ./
include("./vals.pyhtml")print("
include json.pyhtml
")# 相对路径引入 ../
include("../demo/json.pyhtml")
"""
将更新响应头为 Content-Type: application/json
include("../demo/json.pyhtml", update_header=True)
"""print("
include test.pyhtml
")# 绝对路径引入
include("/home/sakura/pyhp-web/demo/demo/test.pyhtml")
?>
include end ...
```## 自定义错误页
想要自定义错误页, 首先需要指定错误页名称 `web_error_page` 参数, 错误页必须在网站根目录下
```python
from pyhpweb import PyHP_ServerPyHP_Server(
web_error_page="error.pyhtml"
).start()
```然后就可以自定义错误页为 `web_error_page` 参数, 错误页会额外获得错误数据
```python
自定义错误页
response: {html.response}",
f"response_data: {html.get_response()}
",
f"error_url: {error_url}
",
f"error_class_name: {type(error[0]).__name__}
",
"error_msg: %s
" % error[0],
f"error: {error}
"
)
?>
```## 使用 Cookie
使用 set_cookie 设置 cookie, set_cookie max_age 默认 -1 立刻过期, max_age 为 None 时于客户端被关闭时失效
```python
没有 Cookie 设置 Cookie")
else:
# max_age 为 None 时于客户端被关闭时失效
set_cookies({
"text": "浏览器被关闭时失效!!!",
"set-time": full_date(),
}, max_age=None)
print("没有 Cookie 设置 Cookie, 这个 Cookie 将在浏览器被关闭时失效
")elif "nocookie" in get:
"""
当 get 数据有 nocookie 项时 (cookie.pyhtml?nocookie=)
删除所有 cookie
"""
# set_cookies max_age 默认 -1 立刻过期
set_cookies(cookie)
print("删除所有 cookie
")else:
print("cookie str: %s
" % request_header["cookie"])
print("cookie: %s
" % cookie)
?>
```## Json Api
```python
```