【从0開始Tornado建站】群聊

【从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'>【{{i[1]}}】</a> ({{i[3]}}) : {{i[2]}}</li>
	{%end%}
</ul>
<ul class='pagination'>
	{%for i in range(1,pages+1)%}
	<li {%if int(num)==i%}class='active'{%end%}><a href='/chat/{{i}}'>{{i}}</a></li>
	{%end%}
</ul>

</br>
</br>
<form action='/chat/1' method='post' class='well form-search'>
	<label class='sr-only'>发表新贴</label><input type='text' name='topic' placeholder='发表新贴...'/>
	<button type='submit' class='btn btn-danger'>发送</button>
</form>
{%end%}

后台代码:

class chatHandler(tornado.web.RequestHandler):
	def get(self,num): #num第几页
		name=self.get_cookie('hackerName')
		chats=showChat()
		n=len(chats)
		if n%20==0:
			pages=n//20 #pages总页数
		else:
			pages=n//20+1
		self.render('chat.html',cookieName=name,content=chats,pages=pages,num=num)
	def post(self,num):
		name=self.get_cookie('hackerName')
		if not name:
			return #在javascript 中推断是否已登录
		newTopic=self.get_argument('topic')
		insertChat(name,newTopic)
		self.redirect('/chat/1')

showChat函数定义例如以下:

def showChat():
	c.execute('select * from chat')
	tmp=c.fetchall()
	return tmp[::-1] #逆序,最新贴放在最上面

insertChat函数定义例如以下:

def insertChat(name,content):
	now=getTime()
	c.execute('insert into chat(name,content,time) values("'+name+'","'+content+'","'+now+'")')
	db.commit()

效果图例如以下:

【从0開始Tornado建站】群聊

群聊内容是按时间逆序排的,最新的在最上面,满20条就添加�一页,默认的群聊首页就是/chat/1,即第一页。这里实现的仅仅是基本功能,之后还要加上实时刷新ajax,新消息提示,都是前端的东西,在基本功能所有实现后加上去。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118507.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle insert into select写法[通俗易懂]

    oracle insert into select写法[通俗易懂]INSERTINTOT_MONITOR_USER_INFO(METER_NO,CONSUMER_NO,USER_INFO,COURT_ID)select*from(selectdistinctMETER_NO,CONSUMER_NO,’wy’asUSER_INFO,EPU_COURTasCOURT_IDfromT_METERwhereC_DISTRICTBCDIDin(selectDISTINCTDISTRICTBCDIDfrom..

    2022年7月15日
    42
  • pytest skipif_pytest失败重跑

    pytest skipif_pytest失败重跑前言pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能Skip和xfail:处理那些不会成功的测试用例你可以对那些在某些特定平台上不能运行的测试用

    2022年7月30日
    4
  • 查看数据库锁表以及解锁

    查看数据库锁表以及解锁今天启动项目时发现项目启动报错CouldnotopenJDBCConnectionfortransaction,weblogic控制台上服务器也有警告。网上提示是根据实际操做确认连接池不足,程序在获取连接完成数据库操作后,没有及时关闭连接。但是按照网上提供的方法改了之后仍然报错,后发现是数据库锁表了。可以根据以下代码查看数据库中有哪些表锁住了selectc.id,c.serial#,c.username,c.osuser,b.owner,b.object_name,a.locked_mod

    2022年6月22日
    46
  • idea2021激活码 mac(最新序列号破解)

    idea2021激活码 mac(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    42
  • Scrapy ip代理池

    Scrapy ip代理池一、概述在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑、在一段时间内禁止访问。应对的方法有两种:1.降低爬虫的爬取频率,避免IP被限制访问,缺点显而易见:会大大降低爬取的效率。2.搭建一个IP代理池,使用不同的IP轮流进行爬取。环境说明操作系统:centos7.6ip地址:192.1…

    2022年6月9日
    47
  • String转JSONArray,遍历JSONArray,Array数组转换成JSON字符串

    String转JSONArray,遍历JSONArray,Array数组转换成JSON字符串String转JSONArray, /** *String转JSONArray */ publicstaticvoidtest1(){ Stringjson="[{\"name\":\"张三\",\"code\":\"123\"},{\"name\":\"李四\",\"code\":\"123\"}]&quot

    2022年6月20日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号