def render_GET(self, request): board_name = request.get_argument("name") board = get_board(request, board_name) if not can_write(request, board): raise Unauthorized() context = {"board": board} return render_template("article_write.html", request, context)
def render_GET(self, request): query_string = request.get_argument("query") search_type = request.get_argument("type", "content") target = request.get_argument("target", "article") if search_type not in ["user", "content"] or target not in ["article", "reply"]: raise BadRequest() board_name = request.get_argument("board", None) board = get_board(request, board_name) if board_name else None page = request.get_argument_int("page", 1) if search_type == "content": query_words = ["%" + word + "%" for word in query_string.split(" ")] expr_list = list() if target == "article": for word in query_words: expr_list.append(Article.subject.like(word)) expr_list.append(Article.content.like(word)) query = request.dbsession.query(Article).filter(or_(*expr_list)).options( subqueryload(Article.user)).options(subqueryload(Article.board)) else: for word in query_words: expr_list.append(Reply.content.like(word)) query = request.dbsession.query(Reply).filter(or_(*expr_list)).options(subqueryload(Reply.user)) else: query = request.dbsession.query(User).filter(User.nickname == query_string) result = query.all() target_user = result[0] if result else None if target == "article": query = request.dbsession.query(Article).filter(Article.user == target_user).options( subqueryload(Article.board)).options(subqueryload(Article.user)) else: query = request.dbsession.query(Reply).filter(Reply.user == target_user).options( subqueryload(Reply.article).subqueryload(Article.board)) item_per_page = ARTICLE_PER_PAGE start_idx = item_per_page * (page - 1) end_idx = item_per_page * page items = query[start_idx:end_idx] total_item_count = query.count() page_total = total_item_count / item_per_page if total_item_count % item_per_page != 0: page_total += 1 render_page = "search_article.html" if target == "article" else "search_reply.html" context = { "query": query_string, "type": search_type, "target": target, "board": board, "page": page, "page_total": page_total, "items": items, } return render_template(render_page, request, context)
def render_POST(self, request): board_name = request.get_argument("name") board = get_board(request, board_name) if not can_write(request, board): raise Unauthorized() subject = request.get_argument("subject") content = request.get_argument("content") # no empty subject if subject.strip(): article = create_article(request, board, subject, content) request.dbsession.add(article) request.dbsession.commit() request.redirect("/article/view?id=%s" % article.uid) return "article posted" else: raise BadRequest()
def render_GET(self, request): name = request.get_argument("name") if not (name == "notice" or is_anybody(request)): raise Unauthorized() page = request.get_argument_int("page", 1) board = get_board(request, name) articles = get_article_page(request, board, page) total_article_count = board.article_count page_total = total_article_count / ARTICLE_PER_PAGE if total_article_count % ARTICLE_PER_PAGE != 0: page_total = total_article_count / ARTICLE_PER_PAGE + 1 context = { "items": articles, "board": board, "page": page, "page_total": page_total, "can_write": can_write(request, board), } return render_template("board.html", request, context)
def render_GET(self, request): query_string = request.get_argument("query") search_type = request.get_argument("type", "content") target = request.get_argument("target", "article") if search_type not in ["user", "content"] or\ target not in ["article", "reply"]: raise BadRequest() board_name = request.get_argument("board", None) board = get_board(request, board_name) if board_name else None page = request.get_argument_int("page", 1) if search_type == "content": query_words = ["%" + word + "%" for word in query_string.split(" ")] expr_list = list() if target == "article": for word in query_words: expr_list.append(Article.subject.like(word)) expr_list.append(Article.content.like(word)) query = request.dbsession.query(Article)\ .filter(or_(*expr_list))\ .options(subqueryload(Article.user))\ .options(subqueryload(Article.board)) else: for word in query_words: expr_list.append(Reply.content.like(word)) query = request.dbsession.query(Reply)\ .filter(or_(*expr_list))\ .options(subqueryload(Reply.user)) else: query = request.dbsession.query(User)\ .filter(User.nickname == query_string) result = query.all() target_user = result[0] if result else None if target == "article": query = request.dbsession.query(Article)\ .filter(Article.user == target_user)\ .options(subqueryload(Article.board))\ .options(subqueryload(Article.user)) else: query = request.dbsession.query(Reply)\ .filter(Reply.user == target_user)\ .options(subqueryload(Reply.article) .subqueryload(Article.board)) item_per_page = ARTICLE_PER_PAGE start_idx = item_per_page * (page - 1) end_idx = item_per_page * page items = query[start_idx:end_idx] total_item_count = query.count() page_total = total_item_count / item_per_page if total_item_count % item_per_page != 0: page_total += 1 render_page = "search_article.html"\ if target == "article" else "search_reply.html" context = { "query": query_string, "type": search_type, "target": target, "board": board, "page": page, "page_total": page_total, "items": items, } return render_template(render_page, request, context)