Предполагая, что у вас есть база данных, в которой хранятся данные публикации, в том числе имя автора и отметка времени, вы можете создать класс, который может определять, публикует ли пользователь сообщения в правильное время:
import re, itertools, sqlite3
class Posts:
def __init__(self, _username[str, int], _rate = 5) -> None:
'''rate: number of posts per hour'''
self.username = _username
self.rate = _rate
def __bool__(self):
'''assuming database has columns "author" and "timestamp"
timestamp: mm/dd/yy hh:mm:ss
'''
data = list(sqlite3.connect('filename.db').cursor().execute("SELECT author, timestamp from TABLENAME"))
user_posts = [re.findall('\w+/\w+/\w+\s\d+', b)[0] for a, b in data if a == self.username]
if not user_posts:
return True
groups = [list(b) for _, b in itertools.groupby(user_posts)]
return len(groups[-1]) < self.rate
Затем в приложении на маршруте, таком как /post_article
:
@app.route('/post_article', methods=['GET', 'POST'])
def post_article():
if flask.request.method == 'POST':
poster = Posts(flask.session['current_user'])
if not poster:
return '<p>Posting limit exceeded. Try again soon</p>'
#take in user form data and update db
return flask.redirect('/new_article_name')
return flask.render_template('post_article.html')