修改部分细节

This commit is contained in:
MarkusJoe
2022-04-15 20:47:05 +08:00
parent 1869e14d53
commit d306188caf
5 files changed
+245 -301

No files matched your search

+2 -16
View File
@@ -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)
-32
View File
@@ -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>
+2 -12
View File
@@ -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
View File
@@ -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
View File
@@ -1,13 +1,13 @@
![logo](./icon.svg) ![logo](./icon.svg)
# 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](#部署)