Archived
修改部分细节
This commit is contained in:
5 files changed
+245
-301
No files matched your search
+2
-16
@@ -11,8 +11,7 @@ from flask import request
|
|||||||
from flask import make_response
|
from flask import make_response
|
||||||
from flask import render_template
|
from flask import render_template
|
||||||
from ..db.db import SQLite as db
|
from ..db.db import SQLite as db
|
||||||
from ..utils.view import view_
|
from ..utils.response import index_
|
||||||
from ..utils.view import listing_
|
|
||||||
from . import main
|
from . import main
|
||||||
|
|
||||||
|
|
||||||
@@ -44,21 +43,8 @@ def home(name: str):
|
|||||||
db().update(name, 0)
|
db().update(name, 0)
|
||||||
# 使用设置的长度减去已有数据的长度, 将结果转换为string类型, 再和数据库内的数据进行拼接
|
# 使用设置的长度减去已有数据的长度, 将结果转换为string类型, 再和数据库内的数据进行拼接
|
||||||
number = '0' * (length - len(str(data[-1]))) + str(data[-1])
|
number = '0' * (length - len(str(data[-1]))) + str(data[-1])
|
||||||
response = make_response(view_(theme, int(length), name, number))
|
response = make_response(index_(theme, int(length), name, number))
|
||||||
response.headers['Content-Type'] = 'image/svg+xml; charset=utf-8'
|
response.headers['Content-Type'] = 'image/svg+xml; charset=utf-8'
|
||||||
response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate'
|
response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate'
|
||||||
return response
|
return response
|
||||||
return abort(500)
|
return abort(500)
|
||||||
|
|
||||||
|
|
||||||
@main.route('/list/', methods=['GET', 'POST'])
|
|
||||||
def listing():
|
|
||||||
"""
|
|
||||||
列出所有数据库内已有的数据
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
data = db().exec('select * from reqcount;')
|
|
||||||
format_data = []
|
|
||||||
for i in data:
|
|
||||||
format_data.append({'name': i[0], 'times': i[1]})
|
|
||||||
return listing_(format_data)
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>All data</title>
|
|
||||||
<link rel="stylesheet" href="{{ url_for('static', filename='listing.css') }}">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="head">
|
|
||||||
<h2>
|
|
||||||
数据库内已有数据
|
|
||||||
</h2>
|
|
||||||
<table class="table">
|
|
||||||
<tr>
|
|
||||||
<th>
|
|
||||||
名称
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
次数
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
{#使用Jinja2模板来快速遍历传入的列表数据#}
|
|
||||||
{% for value in data %}
|
|
||||||
<tr>
|
|
||||||
<td>{{ value['name'] }}</td>
|
|
||||||
<td>{{ value['times'] }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
# @Author: markushammered@gmail.com
|
# @Author: markushammered@gmail.com
|
||||||
# @Development Tool: PyCharm
|
# @Development Tool: PyCharm
|
||||||
# @Create Time: 2022/3/25
|
# @Create Time: 2022/3/25
|
||||||
# @File Name: view.py
|
# @File Name: response.py
|
||||||
|
|
||||||
|
|
||||||
from ..db.db import SQLite as db
|
from ..db.db import SQLite as db
|
||||||
@@ -12,7 +12,7 @@ from flask import render_template
|
|||||||
from typing import Tuple
|
from typing import Tuple
|
||||||
|
|
||||||
|
|
||||||
def view_(theme: str, length: int, name: str, count: str) -> str or Tuple[bool, str]:
|
def index_(theme: str, length: int, name: str, count: str) -> str or Tuple[bool, str]:
|
||||||
"""
|
"""
|
||||||
渲染模板
|
渲染模板
|
||||||
:param theme:
|
:param theme:
|
||||||
@@ -77,13 +77,3 @@ def view_(theme: str, length: int, name: str, count: str) -> str or Tuple[bool,
|
|||||||
address=request.remote_addr,
|
address=request.remote_addr,
|
||||||
general_height=general_height,
|
general_height=general_height,
|
||||||
general_width=general_width)
|
general_width=general_width)
|
||||||
|
|
||||||
|
|
||||||
def listing_(data: list):
|
|
||||||
"""
|
|
||||||
展示数据库内所有的数据
|
|
||||||
:param data:
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
return render_template('list.html',
|
|
||||||
data=data)
|
|
||||||
+229
-229
@@ -1,229 +1,229 @@
|
|||||||
# 这里是Request Counter的文档
|
# 这里是Request Counter的文档
|
||||||
|
|
||||||
> 虽然说项目很小根本不需要文档
|
> 虽然说项目很小根本不需要文档
|
||||||
|
|
||||||
# 灵感来源
|
# 灵感来源
|
||||||
|
|
||||||
[Moe-Counter](https://github.com/journey-ad/Moe-counter)
|
[Moe-Counter](https://github.com/journey-ad/Moe-counter)
|
||||||
|
|
||||||
# 资源来源
|
# 资源来源
|
||||||
|
|
||||||
* 数据库内的`base64`图片来自`booru`
|
* 数据库内的`base64`图片来自`booru`
|
||||||
* 项目部分代码结构来自`miguelgrinberg`的书: `Falsk Web Development`
|
* 项目部分代码结构来自`miguelgrinberg`的书: `Falsk Web Development`
|
||||||
|
|
||||||
# 工作原理
|
# 工作原理
|
||||||
|
|
||||||
> Flask 建立服务器来接收请求并返回对应的响应体
|
> Flask 建立服务器来接收请求并返回对应的响应体
|
||||||
|
|
||||||
# 部署
|
# 部署
|
||||||
|
|
||||||
> 在部署之前你需要先安装`python3.10.x`以上的版本
|
> 在部署之前你需要先安装`python3.10.x`以上的版本
|
||||||
|
|
||||||
## 部署到本地服务器
|
## 部署到本地服务器
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ git clone https://github.com/MarkusJoe/RequestCounter.git
|
$ git clone https://github.com/MarkusJoe/RequestCounter.git
|
||||||
$ cd RequestCounter
|
$ cd RequestCounter
|
||||||
$ pip3 install -r requirements.txt
|
$ pip3 install -r requirements.txt
|
||||||
$ python3 app.py
|
$ python3 app.py
|
||||||
```
|
```
|
||||||
|
|
||||||
# 普通接口
|
# 普通接口
|
||||||
|
|
||||||
## `/count/` 接口
|
## `/count/` 接口
|
||||||
|
|
||||||
> 此接口为基本接口请求此接口可以获取`svg矢量图`的响应体
|
> 此接口为基本接口请求此接口可以获取`svg矢量图`的响应体
|
||||||
|
|
||||||
> 必选参数: `name`: `str` 可选参数: `length`: `int` ; `theme`: `str`
|
> 必选参数: `name`: `str` 可选参数: `length`: `int` ; `theme`: `str`
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X https://requestcounter.herokuapp.com/count/main/
|
$ curl -L -X https://requestcounter.herokuapp.com/count/main/
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
<...>
|
<...>
|
||||||
```
|
```
|
||||||
|
|
||||||
## `/list/` 接口
|
## `/list/` 接口
|
||||||
|
|
||||||
> 此接口为展示数据库内所有的数据的页面
|
> 此接口为展示数据库内所有的数据的页面
|
||||||
|
|
||||||
> 无参数
|
> 无参数
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/list/
|
$ curl -L -X GET https://requestcounter.herokuapp.com/list/
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
<...>
|
<...>
|
||||||
```
|
```
|
||||||
|
|
||||||
# API
|
# API
|
||||||
|
|
||||||
* 注意事项
|
* 注意事项
|
||||||
|
|
||||||
1. `/api/v1/`内的接口需要`key`来访问的有: `/export/`
|
1. `/api/v1/`内的接口需要`key`来访问的有: `/export/`
|
||||||
2. `key`是从环境变量中获取或自动生成, 这取决与你部署到`Heroku`时是否设置了`ACCESS_KEY`环境变量
|
2. `key`是从环境变量中获取或自动生成, 这取决与你部署到`Heroku`时是否设置了`ACCESS_KEY`环境变量
|
||||||
3. `key`的长度为`32`位的随机英文字母大小写字符串
|
3. `key`的长度为`32`位的随机英文字母大小写字符串
|
||||||
|
|
||||||
> 地址前缀: `/api/v1/`
|
> 地址前缀: `/api/v1/`
|
||||||
|
|
||||||
- 接口地址: `/overall/`, `/query/`, `/theme/`
|
- 接口地址: `/overall/`, `/query/`, `/theme/`
|
||||||
- 请求方法: `GET` `POST`
|
- 请求方法: `GET` `POST`
|
||||||
|
|
||||||
## `/overall/` 接口
|
## `/overall/` 接口
|
||||||
|
|
||||||
> 使用此接口获取数据库中所有的数据
|
> 使用此接口获取数据库中所有的数据
|
||||||
|
|
||||||
> 必选参数: `limit: int` > 自定义查询数量, 输入的数字大于等于最大值时, 将返回最大值
|
> 必选参数: `limit: int` > 自定义查询数量, 输入的数字大于等于最大值时, 将返回最大值
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/overall/?limit=20&key=<key>
|
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/overall/?limit=20&key=<key>
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"code": 200,
|
"code": 200,
|
||||||
"msg": "Success. Total: 7 row(s)",
|
"msg": "Success. Total: 7 row(s)",
|
||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
"name": "sda",
|
"name": "sda",
|
||||||
"times": 72
|
"times": 72
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "main",
|
"name": "main",
|
||||||
"times": 59
|
"times": 59
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## `/query/` 接口
|
## `/query/` 接口
|
||||||
|
|
||||||
> 使用此接口获取数据库中指定的数据
|
> 使用此接口获取数据库中指定的数据
|
||||||
|
|
||||||
***使用此接口查询的名称计数数值会加一***
|
***使用此接口查询的名称计数数值会加一***
|
||||||
|
|
||||||
> 必选参数: `name: str` > 查询指定名称的计数数据
|
> 必选参数: `name: str` > 查询指定名称的计数数据
|
||||||
|
|
||||||
> 可选参数: `nochange: Any`
|
> 可选参数: `nochange: Any`
|
||||||
|
|
||||||
> `nochange`: 'Any` > 将参数值设置为任意值则仅查询不增加
|
> `nochange`: 'Any` > 将参数值设置为任意值则仅查询不增加
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/query/?name=main&nochange=1&key=<key>
|
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/query/?name=main&nochange=1&key=<key>
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"code": 200,
|
"code": 200,
|
||||||
"msg": "Success",
|
"msg": "Success",
|
||||||
"data": [
|
"data": [
|
||||||
"main",
|
"main",
|
||||||
59
|
59
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## `/theme/` 接口
|
## `/theme/` 接口
|
||||||
|
|
||||||
> 使用此接口获取数据库内原始的base64编码的主题图片
|
> 使用此接口获取数据库内原始的base64编码的主题图片
|
||||||
|
|
||||||
> 必选参数: `theme: str`
|
> 必选参数: `theme: str`
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/theme/?name=lewd&key=<key>
|
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/theme/?name=lewd&key=<key>
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
|
|
||||||
{
|
{
|
||||||
"code": 200,
|
"code": 200,
|
||||||
"msg": "Success",
|
"msg": "Success",
|
||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
"index": "0",
|
"index": "0",
|
||||||
"base64": "...",
|
"base64": "...",
|
||||||
"width": 45,
|
"width": 45,
|
||||||
"height": 100
|
"height": 100
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## `/alltables/` 接口
|
## `/alltables/` 接口
|
||||||
|
|
||||||
> 此接口可以获取数据库内所有的表名 > 返回的数据中不包含`ReqCount`
|
> 此接口可以获取数据库内所有的表名 > 返回的数据中不包含`ReqCount`
|
||||||
|
|
||||||
> 无参数
|
> 无参数
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/alltables/&key=<key>
|
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/alltables/&key=<key>
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"code": 200,
|
"code": 200,
|
||||||
"msg": "Success",
|
"msg": "Success",
|
||||||
"data": [
|
"data": [
|
||||||
...
|
...
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## `/export/` 接口
|
## `/export/` 接口
|
||||||
|
|
||||||
> 此接口可以导出应用的数据库文件
|
> 此接口可以导出应用的数据库文件
|
||||||
|
|
||||||
> 无参数
|
> 无参数
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/export/&key=<key>
|
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/export/&key=<key>
|
||||||
```
|
```
|
||||||
|
|
||||||
> 该接口请求成功后返回文件
|
> 该接口请求成功后返回文件
|
||||||
|
|
||||||
## `/test`接口
|
## `/test`接口
|
||||||
|
|
||||||
> 此接口仅用于测试 只能增加`test-example`名称的计数次数
|
> 此接口仅用于测试 只能增加`test-example`名称的计数次数
|
||||||
|
|
||||||
> 无需`key`即可请求
|
> 无需`key`即可请求
|
||||||
|
|
||||||
### 调用示例
|
### 调用示例
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/test
|
$ curl -L -X GET https://requestcounter.herokuapp.com/api/v1/test
|
||||||
```
|
```
|
||||||
|
|
||||||
```json
|
```json
|
||||||
622
|
622
|
||||||
```
|
```
|
||||||
|
|
||||||
> 返回一个`int`数字
|
> 返回一个`int`数字
|
||||||
|
|
||||||
# 关于
|
# 关于
|
||||||
|
|
||||||
## 开源
|
## 开源
|
||||||
|
|
||||||
- 本项目以Apache-2.0许可开源, 即:
|
- 本项目以Apache-2.0许可开源, 即:
|
||||||
- 你可以直接使用该项目提供的功能, 无需任何授权
|
- 你可以直接使用该项目提供的功能, 无需任何授权
|
||||||
- 你可以在**注明来源版权信息**的情况下对源代码进行任意分发和修改以及衍生
|
- 你可以在**注明来源版权信息**的情况下对源代码进行任意分发和修改以及衍生
|
||||||
|
|
||||||
## 关于此页面
|
## 关于此页面
|
||||||
|
|
||||||
此文档由 [docsify](https://github.com/docsifyjs/docsify) 生成. docsify 是一个动态生成文档网站的工具。不同于 GitBook、Hexo 的地方是它不会生成将 .md 转成 .html
|
此文档由 [docsify](https://github.com/docsifyjs/docsify) 生成. docsify 是一个动态生成文档网站的工具。不同于 GitBook、Hexo 的地方是它不会生成将 .md 转成 .html
|
||||||
文件,所有转换工作都是在运行时进行。
|
文件,所有转换工作都是在运行时进行。
|
||||||
|
|
||||||
+12
-12
@@ -1,13 +1,13 @@
|
|||||||

|

|
||||||
|
|
||||||
# RequestCounter
|
# RequestCounter
|
||||||
|
|
||||||
> Python版的计数器
|
> Python版的计数器
|
||||||
|
|
||||||
> 使用Python Flask 库完成的访问的次数计数器
|
> 使用Python Flask 库完成的访问的次数计数器
|
||||||
|
|
||||||
* 响应速度快
|
* 响应速度快
|
||||||
* 使用Sqlite3数据库操作
|
* 使用Sqlite3数据库操作
|
||||||
|
|
||||||
[GitHub](https://github.com/MarkusJoe/RequestCounter.git)
|
[GitHub](https://github.com/MarkusJoe/RequestCounter.git)
|
||||||
[Get Started](#部署)
|
[Get Started](#部署)
|
||||||
Reference in New Issue
Block a user