-import tornado.wsgi
-import wsgiref.simple_server
import os.path
import tornado.auth
import tornado.escape
-import tornado.httpserver
-import tornado.ioloop
-import tornado.options
import tornado.web
-from tornado.options import define,options
from tinydb import TinyDB,Query,where
from tinydb.operations import delete
from datetime import datetime
-define('port',default=8000,help='run on the given port.',type=int)
-
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
user = self.get_secure_cookie('admin_user')
else:
self.render('regist.htm',content='urlが見つかりません')
i = params['count']
- na = self.get_cookie('username')
+ na = tornado.escape.url_unescape(self.get_cookie("username",u"誰かさん"))
pos = self.application.gpos(dbname,page)
table = self.application.db.table(dbname)
start = (pos-1)*i
start = len(table)-i
if start < 0:
start = 0
- rec = table.all()[start:start+i]
+ rec = sorted(table.all(),key=lambda x: x['number'])[start:start+i]
if len(table) >= 10*i:
self.render('modules/full.htm',position=pos,records=rec,data=params,db=dbname)
self.render('modules/index.htm',position=pos,records=rec,data=params,username=na,db=dbname)
class NaviHandler(tornado.web.RequestHandler):
def get(self):
- self.render('top.htm',coll=self.name())
+ self.render('top.htm',coll=sorted(self.name()),full=self.full)
def name(self):
for x in self.application.db.tables():
if x != '_default':
yield x
+
+ def full(self,dbname):
+ if dbname in self.application.db.tables():
+ i = 10*self.application.db.get(where('kinds') == 'conf')['count']
+ table = self.application.db.table(dbname)
+ if len(table) >= i:
+ return True
+ return False
+
+class TitleHandler(NaviHandler):
+ def get(self):
+ self.render('title.htm',coll=self.name(),full=self.full,
+ count=self.count,title=self.title,update=self.update)
+
+ def count(self,dbname):
+ if dbname in self.application.db.tables():
+ return len(self.application.db.table(dbname))
+ else:
+ return ''
+ def title(self,dbname):
+ if dbname in self.application.db.tables():
+ table = self.application.db.table(dbname)
+ if table.contains(where('number') == 1) == True:
+ dic = table.get(where('number') == 1)
+ return dic['title']
+ else:
+ return ''
+
+ def update(self,dbname):
+ if dbname in self.application.db.tables():
+ table = self.application.db.table(dbname)
+ i = len(table)
+ if i == 0:
+ return ''
+ else:
+ rec = sorted(table.all(),key=lambda x: x['number'])
+ return rec[i-1]['date']
+
class RegistHandler(tornado.web.RequestHandler):
def post(self,dbname):
if self.application.collection(dbname) == False:
error = error + u'禁止ワード.'
break
pw = self.get_argument('password')
- if na == '':
- na = u'誰かさん'
if sub == '':
sub = u'タイトルなし.'
if i == 0:
if len(article) == 0:
no = 1
else:
- item = article.get(where('number') == len(article))
+ item = article.all()[len(article)-1]
no = item['number']+1
if error == '':
- reg = {'number':no,'name':na,'title':sub,'comment':text,'password':pw,'date':1}#datetime.today()}
+ reg = {'number':no,'name':na,'title':sub,'comment':text,'password':pw,'date':datetime.now().strftime('%Y/%D:%M')}
article.insert(reg)
- self.set_cookie('username',na)
+ self.set_cookie('username',tornado.escape.url_escape(na))
self.redirect('/'+dbname+'#article')
else:
self.render('regist.htm',content=error)
if self.application.collection(dbname) == False:
self.render('regist.htm',content='urlが見つかりません')
table = self.application.db.table(dbname)
- rec = table.all()
+ rec = sorted(table.all(),key=lambda x: x['number'])
mente = self.application.db.get(where('kinds') == 'conf')
if mente['mentenance'] == True:
check = 'checked=checked'
self.application.db.update({'mentenance':mente,'password':word},where('kinds') == 'conf')
elif func == 'del':
table = self.application.db.table(dbname)
- for x in self.get_argument('item','0'):
+ for x in self.get_arguments('item'):
table.remove(where('number') == int(x))
self.redirect('/'+dbname+'/admin/0/')
class SearchHandler(tornado.web.RequestHandler):
def post(self,dbname):
- self.word = self.get_argument('word1')
- self.radiobox = self.get_argument('filter')
- self.set_cookie('search',self.word)
- table = self.application.db.table(dbname)
- self.render('modules/search.htm',records=self.mylist(table.all()),word1=self.word,db=dbname)
+ word = self.get_argument('word1')
+ radiobox = self.get_argument('filter')
+ self.set_cookie('search',word)
+ table = self.application.db.table(dbname)
+ self.render('modules/search.htm',records=table.search(where(radiobox).matches(word)),word1=word,db=dbname)
def get(self,dbname):
word = self.get_cookie('search')
self.render('modules/search.htm',records={},word1=word,db=dbname)
- def mylist(self,rec):
- for searchrec in rec:
- if self.radiobox == 'name':
- if searchrec['name'].find(self.word) == True:
- yield searchrec
- else:
- if searchrec['comment'].find(self.word) == True:
- yield searchrec
-
class FooterModule(tornado.web.UIModule):
def render(self,number,url,link):
return self.render_string('modules/footer.htm',index=number,url=url,link=link)
-class Applications(tornado.web.Application):
+class Application(tornado.web.Application):
def __init__(self):
self.db = TinyDB('static/db/db.json')
- handlers = [(r'/',NaviHandler),(r'/login',LoginHandler),(r'/logout',LogoutHandler),(r'/([a-zA-Z0-9_]+)',IndexHandler),(r'/([a-zA-Z0-9_]+)/([0-9]+)/',IndexHandler),
+ handlers = [(r'/',NaviHandler),(r'/login',LoginHandler),(r'/logout',LogoutHandler),(r'/title',TitleHandler),
+ (r'/([a-zA-Z0-9_]+)',IndexHandler),(r'/([a-zA-Z0-9_]+)/([0-9]+)/',IndexHandler),
(r'/([a-zA-Z0-9_]+)/admin/([0-9]+)/',AdminHandler),(r'/([a-zA-Z0-9_]+)/admin/([a-z]+)/',AdminConfHandler),(r'/([a-zA-Z0-9_]+)/userdel',UserHandler),
(r'/([a-zA-Z0-9_]+)/search',SearchHandler),(r'/([a-zA-Z0-9_]+)/regist',RegistHandler)]
settings = {'template_path':os.path.join(os.path.dirname(__file__),'pybbs'),
else:
return False
-if __name__ == '__main__':
- tornado.options.parse_command_line()
- wsgi_app = tornado.wsgi.WSGIAdapter(Applications())
- server = wsgiref.simple_server.make_server('',9157,wsgi_app)
- server.serve_forever()
+app = Application()