zoukankan      html  css  js  c++  java
  • 【从0開始Tornado建站】发表文章和评论

    版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/littlethunder/article/details/25560463

            先上个效果图:


    这是每一个用户的主页,由于是基本功能,所以用户头像,爱好等信息都还没有,在下一阶段加上。

    右側“发表新文章”按钮点击后进入发表文章的页面:



    之前尝试过一些开源的富文本编辑器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

查看全文
  • 相关阅读:
    SAP PI 如何实现消息定义查询
    EWM与ERP交互程序
    ITS Mobile Template interpretation failed. Template does not exist
    SAP Material Flow System (MFS) 物料流系统简介
    SAP EWM Table list
    EWM RF 屏幕增强
    SAP EWM TCODE list
    SAP扩展仓库管理(SAPEWM)在线研讨会笔记
    ERP与EWM集成配置ERP端组织架构(二)
    EWM RF(Radio Frequency)简介
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10492602.html
  • Copyright © 2011-2022 走看看