Пример #1
0
def articles_view(slug):
	""" Show article from <slug> or 404 """
	from models import Article

	article = Article.by_slug(slug).filter(Article.pub_date < datetime.now()).first_or_404()

	return render_template('articles/view.html', **locals())
Пример #2
0
def article_edit(slug):
	""" Render edit article form by <slug> or update data from `POST` """
	from models import Article, Tag, db
	from forms import ArticleForm

	article = Article.by_slug(slug=slug).first_or_404()
	form = ArticleForm()

	if request.method != 'POST':
		# init form data from object
		form.title.data = article.title
		form.slug.data = article.slug
		form.description.data = article.description
		form.content.data = article.content
		tags = [t.title for t in article.tags]
		for t in tags:
			if form.tags.data:
				form.tags.data += ", " + t
			else:
				form.tags.data = t
		form.pub_date.data = article.pub_date.strftime("%Y-%m-%d %H:%M:%S")
		form.upd_date.data = article.upd_date.strftime("%Y-%m-%d %H:%M:%S")
	else:
		if form.validate():
			article.title = form.title.data
			article.slug = form.slug.data
			article.description = form.description.data
			article.content = form.content.data
			article.pub_date = datetime.strptime(form.pub_date.data, '%Y-%m-%d %H:%M:%S')

			# autonow if empty or error
			try:
				upd_datetime = datetime.strptime(form.upd_date.data, '%Y-%m-%d %H:%M:%S')
			except Exception:
				article.upd_date = datetime.now()

			article.tags = []
			tags_raw = form.tags.data.split(',')
			for t in tags_raw:
				t = t.strip()

				# Get or create
				try:
					article.tags += [Tag.query.filter(Tag.title == t)[0]]
				except Exception:
					article.tags += [Tag(t)]

			db.session.commit()

			flash("Article updated success.", 'success')
			return redirect(url_for('articles_view', slug=form.slug.data))

	return render_template('articles/edit.html', **locals())