Как добавить ограничение на количество сообщений на сайте форума Flask? - PullRequest
0 голосов
/ 04 июля 2018

Есть ли способ ограничить количество сообщений в час, которые пользователь может создавать, чтобы избежать спама? Я думал сделать это на основе файлов cookie или IP-адреса, но мне не повезло найти примеры того, как это сделать таким образом.

РЕДАКТИРОВАТЬ: Я хочу сохранить его анонимным, чтобы не было зарегистрированных пользователей.

1 Ответ

0 голосов
/ 04 июля 2018

Предполагая, что у вас есть база данных, в которой хранятся данные публикации, в том числе имя автора и отметка времени, вы можете создать класс, который может определять, публикует ли пользователь сообщения в правильное время:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...