【从0开始Tornado建站】发表文章和评论

先上个效果图:

这是每个用户的主页,因为是基本功能,所以用户头像,爱好等信息都还没有,在下一阶段加上。右侧“发表新文章”按钮点击后进入发表文章的页面:

之前尝试过一些开源的富文本编辑器widgEditor和百度的ueditor,总感觉太大众化,既然域名是hacker,那就用hack一些的方式,直接用裸的<textarea>然后用markdown格式就最棒了嘛,发表后的样子:

完美支持markdown,而且我测试过的所有markdown编辑器比如retextdillinger.ioatomstackedit等都不支持<pre>中的“<”和“>”,所以在这些编辑器中#include<stdio.h>是打印不出来的,我用python-markdown2转码就没有这个问题,注意在#前要用“\”转义,否则认为markdown语法中的主标题,字体会变大的哈。发表文章的前端主要代码如下:

{%block content%}
<form action=‘/post‘ method=‘post‘ class=‘well‘>
	<div class=‘form-group‘>
		<label class=‘sr-only‘>标题</label>
		<input type=‘text‘ name=‘title‘ class=‘form-control‘ placeholder=‘请输入标题‘/>
	</div>
	<div class=‘form-group‘>
		<label class=‘sr-only‘>正文</label>
		<textarea rows=‘20‘ type=‘text‘ name=‘blog‘ class=‘form-control‘ placeholder=‘请输入文章正文‘></textarea>
	</div>
	<button type=‘submit‘ class=‘btn btn-warning‘>发送</button>
</form>
{%end%}

发表文章的后端代码如下:

class postHandler(tornado.web.RequestHandler):
	def get(self):
		name=self.get_cookie(‘hackerName‘)
		self.render(‘post.html‘,cookieName=name)
	def post(self):
		title=self.get_argument(‘title‘)
		blog_md=self.get_argument(‘blog‘)
		blog=translate(blog_md)
		name=self.get_cookie(‘hackerName‘)
		idvalue=insertBlog(name,title,blog)
		self.redirect(‘/blog/‘+str(idvalue))

insertBlog函数定义如下:

def insertBlog(name,title,blog):
	now=time.ctime()
	c.execute(‘insert into blog(name,title,blog,time) values("‘+name+‘","‘+title+‘","‘+blog+‘","‘+now+‘")‘)
	db.commit()
	c.execute(‘select max(id) from blog‘)
	return c.fetchone()[0]  #新插入数据的id

translate函数定义如下:

def translate(md):
	for i in whiteList:
		if i[0] in md:
			md=md.replace(i[0],i[1])
	md2=html.escape(md)
	data=markdown2.markdown(md2)
	for i in whiteList:
		if i[1] in data:
			data=data.replace(i[1],i[0])
	return data

显示文章的前段主要代码如下:

{%block content%}
<div>
<p class=‘text-success h2‘>{{blog[1]}}的专栏</p>
<br/>
<p class=‘text-danger h3‘>{{blog[2]}}</p>
<p class=‘text-muted h6‘>{{blog[4]}}</p>
<br/>
{%raw blog[3]%}
</div>

<div>
<ul>
	{%for i in comments%}
	<li><a href=‘/user/{{i[2]}}‘ class=‘text-success h4‘>{{i[2]}}</a>: <label class=‘text-warning h4‘>{{i[3]}}</label>  <label class=‘text-muted h6‘>{{i[4]}}</label></li>
	{%end%}
</ul>
</div>

<div>
	<form action=‘/comment‘ method=‘post‘ class=‘form-inline‘>
		<div class=‘form-group‘>
			<label class=‘sr-only‘>评论</label>
			<input type=‘text‘ name=‘comment‘ class=‘form-control‘ placeholder=‘请输入评论‘></input>
		</div>
		<button type=‘submit‘ class=‘btn btn-default‘>评论</button>
	</form>
</div>
{%end%}

显示文章和评论的后端代码如下:

class blogHandler(tornado.web.RequestHandler):
	def get(self,idvalue):
		selfname=self.get_cookie(‘hackerName‘)
		blog=showOneBlog(idvalue)
		comments=showComment(idvalue)
		self.render(‘blog.html‘,cookieName=selfname,blog=blog,comments=comments)

class commentHandler(tornado.web.RequestHandler):
	def post(self):
		selfname=self.get_cookie(‘hackerName‘)
		comment=self.get_argument(‘comment‘)
		refer=self.request.headers.get(‘referer‘)
		for i in range(len(refer)-1,0,-1):
			if refer[i]==‘/‘:
				break
		blogid=refer[i+1:]
		print(blogid)
		addComment(blogid,selfname,comment)
		self.redirect(‘/blog/‘+blogid)

文章和评论的表格定义如下:

CREATE TABLE blog(id integer primary key,name text,title text,blog text,time text);
CREATE TABLE comment(id integer primary key,blogid integer,name text,comment text,time text);

我想在接下来升级中加上评论的@功能,还有评论提示功能。

转载请注明:转自http://blog.csdn.net/littlethunder/article/details/25560463

【从0开始Tornado建站】发表文章和评论

时间: 2025-01-05 21:40:01

【从0开始Tornado建站】发表文章和评论的相关文章

【从0开始Tornado建站】主页的登录和显示最新文章

登录只要放在主页就可以了,这里为了美观,把<form>用bootstrap的form-inline类修饰,如下样子: 前台代码如下: {%extends 'main.html'%} {%block header%} <ul class='nav nav-pills'> <li><a href='/' class='h4 text-primary'>首页</a></li> <li><a href='/member' c

【从0开始Tornado建站】总体设计

Tornado是一个非阻塞的web服务器,也是python的web框架中非常优秀的一款.网上关于django的tutorial非常多而且详细,关于tornado的使用就非常少了,我想以我从0开始的方式一步一步用这个优秀的tornado框架建一个小网站,一方面加深自己的理解,另一方面接受大家的建议和批评,更加进步~我注册了个域名:http://www.ustchacker.com,由于服务器在学校里面,外网访问不了,等功能完善后再挂到外网去. 我想建的是一个普通的网站,有登录.注册.发表文章.发表

【从0开始Tornado建站】群聊

群聊的前台主要代码: {%block content%} <!--<p class='text-success h3'>测试版本,每天凌晨4:00清水,enjoy it~~:-)</p>--> <ul> {%for i in content[19*int(num)-19:19*int(num)]%} <li class='text-info'><a href='/user/{{i[1]}}' class='text-success h4'&

【从0开始Tornado建站】显示所有注册用户

显示注册用户的前台主要代码如下: {%block content%} <ul> {%for i in users%} <li><a href='/user/{{i[1]}}' class='text-success h4'>{{i[1]}}<small>({{i[3]}}星级)</small></a></li> {%end%} <br/> </ul> {%end%} 显示注册用户的后台代码如下: c

【从0开始Tornado建站】注册

基本的注册功能有用户名.密码和密码确认,当然邮箱确认和基本信息填写在高阶的时候完善,现在只完成基本功能.在register.html写如下内容: {%extends 'main.html'%} {%block content%} <p class='text-danger'>注册用户名不支持中文</p> <script src='static/checkpw.js'></script> <form action='/register' method='

【从0开始Tornado建站】0.9版本python网站代码开源--持续更新中

从5月份开始[从0开始Tornado建站]这个专栏,开始一点一点把这个分类兴趣网站弄起来,从无到有的过程也是令人兴奋的:-) 国庆的时候等待备案然后上线,现在网站域名为ustchacker.com, 欢迎加入,一起分享代码和点子,可以提问题共同进步- 现在的代码版本是0.9(我自己定的...因为还在完善中),希望能依靠开源的力量打造出一个分类兴趣网站的模板式框架!托管在GitHub上: https://github.com/littlethunder/ustchacker.com ,希望大家对p

【从0開始Tornado建站】0.9版本号python站点代码开源--持续更新中

? ? ? ? 从5月份開始[从0開始Tornado建站]这个专栏,開始一点一点把这个分类兴趣站点弄起来,从无到有的过程也是令人兴奋的:-) 国庆的时候等待备案然后上线,如今站点域名为ustchacker.com, 欢迎增加,一起分享代码和点子,能够提问题共同进步- 如今的代码版本号是0.9(我自己定的.. .由于还在完好中),希望能依靠开源的力量打造出一个分类兴趣站点的模板式框架! 托管在GitHub上:?https://github.com/littlethunder/ustchacker.

【从0開始Tornado建站】整体设计

Tornado是一个非堵塞的webserver,也是python的web框架中很优秀的一款.网上关于django的tutorial许多并且具体,关于tornado的使用就很少了.我想以我从0開始的方式一步一步用这个优秀的tornado框架建一个小站点.一方面加深自己的理解.还有一方面接受大家的建议和批评.更加进步~我注冊了个域名:http://www.ustchacker.com,因为server在学校里面.外网訪问不了,等功能完好后再挂到外网去. 我想建的是一个普通的站点,有登录.注冊.发表文

【从0開始Tornado建站】群聊

群聊的前台主要代码: {%block content%} <!--<p class='text-success h3'>測试版本号,每天凌晨4:00清水,enjoy it~~:-)</p>--> <ul> {%for i in content[19*int(num)-19:19*int(num)]%} <li class='text-info'><a href='/user/{{i[1]}}' class='text-success h4'