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})
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)
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
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"))
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)
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"))
def _set_published(self, article_id): article = Article.get_or_404(id=article_id) article.state = Article.PUBLISHED article.save() self.write_success()
def _set_draft(self, article_id): article = Article.get_or_404(id=article_id) article.state = Article.DRAFT article.save() self.write_success()
def _unset_approved(self, article_id): article = Article.get_or_404(id=article_id) article.approved = False article.save() self.write_success()
def _unset_recommend(self, article_id): article = Article.get_or_404(id=article_id) article.recommend = False article.save() self.write_success()
def _delete(self, article_id): article = Article.get_or_404(id=article_id) article.state = Article.MARK_DELETE article.save() self.write_success()
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()