From 8c448961026b6e2d4036fbcc9ab5efda7d21d69c Mon Sep 17 00:00:00 2001 From: MarkusJoe Date: Wed, 9 Feb 2022 17:30:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=9C=A8=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E4=B8=BB=E9=A2=98=E5=88=97=E8=A1=A8=E6=97=B6=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=9A=84=E6=98=AF=E6=96=87=E4=BB=B6=E7=9A=84bug=20?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=E5=B0=86=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=B8=BA=E4=BA=86=E4=B8=80=E4=B8=AA=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 62 +++++++++++++++++++++++++++++- app.py | 94 +++++----------------------------------------- bin/core/error.py | 74 ++++++++++++++++++++++++++++++++++++ db/data.db | Bin 12288 -> 12288 bytes 4 files changed, 143 insertions(+), 87 deletions(-) create mode 100644 bin/core/error.py diff --git a/README.md b/README.md index 8e7f841..9d36a29 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@

+Counter + ## Python 版访问次数计数器使用了flask 作为服务端接收请求 * [文档](https://request-counter-docs.vercel.app/#/) ### 开源 @@ -35,7 +37,63 @@ # 一些信息 - 使用了Python3.6 的标准库`Sqlite3`进行数据库操作 +- 当前支持的主题如下 + +
+foot
+gelbooru
+gelbooruh
+moebooru
+moebooruh
+g
+cripple
+blacked
+allgirl
+rule34
+steambanner
+lefty
+erpg
+crewbooru
+hgoon
+sthg
+rfck
+lisu
+tv
+lewd
+amibooru
+blankatlas
+mmballbusting
+sss
+legolamb
+goldengator
+r6gdrawfriends
+vivi
+twifanartsfw
+hololive
+vglobby
+jaypee
+melanin
+dollstuffing
+orb
+min
+mjg
+cloppers
+townofgravityfalls
+brown
+enacdoa
+daifuku
+straponff
+keyofnik
+osc
+konan
+girlsfeet
+hybreedsgeneral
+sr
+mono
+riskofrain
+neovb
+ffsr
+
- - +* 仓库总共约`4.12Mb` `theme.db`占用了`4Mb` ... \ No newline at end of file diff --git a/app.py b/app.py index 5808a69..a13b83c 100644 --- a/app.py +++ b/app.py @@ -13,90 +13,14 @@ from flask import request from flask import Response from flask import make_response from flask import send_from_directory +from bin.core.error import ErrorProcess from bin.core.render_ import render_temp_ from bin.core.b64img import re_sort_number_image -from db.db import (fetch_data, - update_data, - fetch_table) +from db.db import fetch_data app = Flask(__name__) - - -def get_theme_list() -> Response: - """ - 直接获取可选主题 - :return: - """ - table_list = fetch_table() - response = make_response({'code': 200, - 'msg': '可用主题如下', - 'themes': table_list}) - response.status_code = 200 - response.headers['Content-Type'] = 'application/json: charset=utf-8' - response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate' - response.headers['date'] = time.ctime() - return response - - -def error_theme(theme: str) -> Response: - """ - 错误的主题 - :param theme: - :return: - """ - table_list = fetch_table() - response = make_response({'code': -2, - 'msg': f'数据库内没有选择的主题: {theme}. 可用主题如下', - 'themes': table_list}) - response.status_code = 200 - response.headers['Content-Type'] = 'application/json; charset=utf-8' - response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate' - response.headers['date'] = time.ctime() - return response - - -def error_length(length: int) -> Response: - """ - 数值太长显示此页面 - :param length: - :return: - """ - response = make_response({'code': -2, - 'msg': f'错误的长度: {length}'}) - response.status_code = 200 - response.headers['Content-Type'] = 'application/json; charset=utf-8' - response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate' - response.headers['date'] = time.ctime() - return response - - -def too_lang_to_count(name: str) -> Response: - """ - 数据过长重置数据 - :param name: - :return: - """ - update_data(name, 0) - response = make_response({'code': -2, - 'msg': '当前长度超过了最大可计数长度:10. 已将重置该名称的计数器'}) - response.headers['Content-Type'] = 'application/json; charset=utf-8' - response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate' - response.headers['date'] = time.ctime() - return response - - -def arg_not_be_full() -> Response: - """ - 参数不完整 - :return: - """ - response = make_response({'code': -2, - 'msg': '参数填写不完整或填写错误'}) - response.status_code = 200 - response.headers['Content-Type'] = 'application/json; charset=utf-8' - response.headers['cache-control'] = 'max-age=0, no-cache, no-store, must-revalidate' - response.headers['date'] = time.ctime() - return response +app.config['JSON_SORT_KEYS'] = False # 设置JSON消息不根据字母顺序重新排序 +app.config['JSON_AS_ASCII'] = False # 设置JSON消息显示中文 def build_page(name: str, length: int, theme: str) -> list[bool | Response] | list[bool | str] | bool: @@ -109,7 +33,7 @@ def build_page(name: str, length: int, theme: str) -> list[bool | Response] | li """ count = fetch_data(name) if len(str(count)) > length: - return [False, too_lang_to_count(name)] + return [False, ErrorProcess().too_lang_to_count(name)] if 7 <= length <= 10: zero_count = '0' * (length - len(str(count))) + str(count) status, sorted_image, width, height = re_sort_number_image(zero_count, theme) @@ -132,7 +56,7 @@ def api_page() -> Response | str: length = args.get('length') theme = args.get('theme') if theme == 'ls': - return get_theme_list() + return ErrorProcess().get_theme_list() if name and name != 'null': if not length: length = 7 @@ -148,13 +72,13 @@ def api_page() -> Response | str: response.headers['date'] = time.ctime() return response elif build_page_result[1] == 'BadLength': - return error_length(length) + return ErrorProcess().error_length(length) elif build_page_result[1] == 'BadTheme': - return error_theme(theme) + return ErrorProcess().error_theme(theme) else: return build_page_result[1] else: - return arg_not_be_full() + return ErrorProcess().arg_not_be_full() @app.route('/', methods=['GET', 'POST']) diff --git a/bin/core/error.py b/bin/core/error.py new file mode 100644 index 0000000..b8bba44 --- /dev/null +++ b/bin/core/error.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# -- coding:utf-8 -- +# @Author: markushammered@gmail.com +# @Development Tool: PyCharm +# @Create Time: 2022/2/9 +# @File Name: error.py + + +from flask import jsonify +from flask import Response +from db.db import (update_data, fetch_table) + + +class ErrorProcess: + def __init__(self): + self.msg_template = {'code': -2, + 'msg': '', + 'data': None} + + def get_theme_list(self): + """ + 直接获取可选主题 + :return: + """ + table_list = fetch_table() + self.msg_template['code'] = 200 + self.msg_template['msg'] = '当前已保存到数据库的主题如下' + self.msg_template['data'] = table_list + return jsonify(self.msg_template) + + def error_theme(self, theme: str) -> Response: + """ + 错误的主题 + :param theme: + :return: + """ + table_list = fetch_table() + self.msg_template['code'] = -2 + self.msg_template['msg'] = f'错误的主题: {theme}. 以下是已保存的主题' + self.msg_template['data'] = table_list + return jsonify(self.msg_template) + + def error_length(self, length: int) -> Response: + """ + 数值太长显示此页面 + :param length: + :return: + """ + self.msg_template['code'] = -2 + self.msg_template['msg'] = f'错误的长度: {length}' + self.msg_template['data'] = None + return jsonify(self.msg_template) + + def too_lang_to_count(self, name: str) -> Response: + """ + 数据过长重置数据 + :param name: + :return: + """ + update_data(name, 0) + self.msg_template['code'] = 200 + self.msg_template['msg'] = '当前长度已超过最大可计数范围. 已将此名称的计数器重置为零' + self.msg_template['data'] = None + return jsonify(self.msg_template) + + def arg_not_be_full(self) -> Response: + """ + 参数不完整 + :return: + """ + self.msg_template['code'] = -2 + self.msg_template['msg'] = '参数填写错误或填写不完整' + self.msg_template['data'] = None + return jsonify(self.msg_template) diff --git a/db/data.db b/db/data.db index 44cab3c28233275b363f5bf620a75dbbd631f283..20683b681c6db8338e01b8531bd9f73c62efe0c4 100644 GIT binary patch delta 42 ycmZojXh@hK&A4Ksj5FhkjR{ZXgoD@xn1vaOQxav^S(ycyic^?&Z;p^(Apigy{tQ6? delta 42 ycmZojXh@hK%{XVGj5Fh$jR{ZXg#FkBn1vaOQxav^S(ycyic^?2Z;p^(ApigvVhkMs