Пример #1
0
    def _handler(self):
        action = self.get_argument("action", "")

        if action == "config":
            self.write(tornado.escape.json_encode(self._config))

        elif action in ["uploadvideo", "uploadimage", "uploadfile"]:
            team_id = intval(self.get_argument("team_id", ""))
            upfile = self.request.files.get("upfile", [])

            if upfile:
                file_key = ArticleHelper.get_upload_file_key(
                    self.current_user.id)
                file_bucket = self.settings["qiniu_attach_bucket"]
                qiniu_file_key = ArticleHelper.upload_image(image_file=upfile,
                                                            image_name="文章封面",
                                                            file_key=file_key,
                                                            file_bucket=file_bucket)
                self.write({
                    "state": "SUCCESS",
                    "url": Article.get_attach_urls(qiniu_file_key)["large"]
                })

        elif action == "listimage":
                        # TODO 列出已经上传的图片
            pass

        elif action == "catchimage":
            source = self.arguments["source[]"]
            images = []
            if len(source) > 0:
                file_bucket = self.settings["qiniu_attach_bucket"]
                for file_url in source:
                    try:
                        http_client = tornado.httpclient.HTTPClient()
                        response = http_client.fetch(
                            file_url, headers={"User-Agent": "Mozilla/5.0"})

                        # FIXME 文件类型转换
                        file_key = ArticleHelper.get_upload_file_key(
                            self.current_user.id)
                        qiniu_file_key = ArticleHelper.upload_to_qiniu(file_bucket=file_bucket,
                                                                       file_key=file_key,
                                                                       image_data=response.body,
                                                                       mime_type="image/jpeg")

                        images.append({"url": Article.get_cover_urls(qiniu_file_key)["large"],
                                       "source": file_url,
                                       "state": "SUCCESS"})

                    except Exception as e:
                        self.logger.error("抓取远程图片失败: %s" % e)
                        images.append({"url": "",
                                       "source": file_url,
                                       "state": "FAIL"})

            self.write({"state": "SUCCESS",
                        "list": images})
Пример #2
0
    def get(self, article_id):
        article = Article.get_or_404(id=article_id)

        categories = ArticleCategory.get_all_for_choices()
        form = ArticleForm(obj=article)
        form.category.choices = categories

        self.render("article/edit.html",
                    article_info=article.info,
                    form=form)
Пример #3
0
 def list(cls) -> SelectQuery:
     """
     获取已发布的文章列表
     :return:
     """
     query = Article.select(Article, ArticleCategory)\
         .join(ArticleCategory, join_type=JOIN.LEFT_OUTER,
               on=(Article.category == ArticleCategory.id).alias("article_category"))\
         .where(Article.approved == True,
                Article.state == Article.PUBLISHED)
     return query
Пример #4
0
    def post(self):
        form = ArticleForm(self.arguments, team_id=self.current_team.id)
        categories = ArticleCategory.get_all_for_choices()
        form.category.choices = categories

        if not form.validate():
            self.render("article/create.html",
                        form=form)
        else:
            article = Article()
            form.populate_obj(article)
            article.author = self.current_user.id

            if "coverfile" in self.request.files:
                to_bucket = self.settings['qiniu_avatar_bucket']
                to_key = "article:%s%s" % (self.current_user.id, time.time())
                to_key = hashlib.md5(to_key.encode()).hexdigest()

                cover_key = self.upload_file("coverfile",
                                             to_bucket=to_bucket,
                                             to_key=to_key)
                article.cover_key = cover_key

            article.save()
            self.redirect(self.reverse_url("club_articles_list"))
Пример #5
0
    def get(self):
        query = Article.select(
            Article, ArticleCategory
        ).join(
            ArticleCategory,
            JOIN_LEFT_OUTER,
            on=(Article.category == ArticleCategory.id).alias("article_category"),
        ).where(
            Article.state >= Article.DRAFT
        )
        query = self.paginate_query(query)

        articles = []
        for item in query:
            articles.append(dict(item.list_info,
                                 category=item.article_category.info))

        self.render("article/list.html",
                    articles=articles,
                    pagination=query.pagination)
Пример #6
0
    def post(self, article_id):
        article = Article.get_or_404(id=article_id)

        categories = ArticleCategory.get_all_for_choices()
        form = ArticleForm(self.arguments)
        form.category.choices = categories

        if not form.validate():
            self.render("article/edit.html",
                        article_info=article.info,
                        form=form)

        else:
            form.populate_obj(article)

            article.last_updated_by = self.current_user.id
            article.last_updated = datetime.now()
            article.save()

            self.redirect(self.reverse_url("club_articles_list"))
Пример #7
0
 def _set_published(self, article_id):
     article = Article.get_or_404(id=article_id)
     article.state = Article.PUBLISHED
     article.save()
     self.write_success()
Пример #8
0
 def _set_draft(self, article_id):
     article = Article.get_or_404(id=article_id)
     article.state = Article.DRAFT
     article.save()
     self.write_success()
Пример #9
0
 def _unset_approved(self, article_id):
     article = Article.get_or_404(id=article_id)
     article.approved = False
     article.save()
     self.write_success()
Пример #10
0
 def _unset_recommend(self, article_id):
     article = Article.get_or_404(id=article_id)
     article.recommend = False
     article.save()
     self.write_success()
Пример #11
0
 def _delete(self, article_id):
     article = Article.get_or_404(id=article_id)
     article.state = Article.MARK_DELETE
     article.save()
     self.write_success()
Пример #12
0
 def get_article(cls, article_id: int):
     query = Article.select(Article, ArticleCategory) \
         .join(ArticleCategory, join_type=JOIN.LEFT_OUTER,
               on=(Article.category == ArticleCategory.id).alias("article_category")) \
         .where(Article.id == article_id)
     return query.get()