diff --git a/apps/search.py b/apps/search.py new file mode 100644 index 0000000..72f886c --- /dev/null +++ b/apps/search.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" + search 搜索 +""" + +import tornado.web +import tornado.database +from settings import db, NAVNUM +from libs import markdown +from tornado.escape import xhtml_escape + +md = markdown.Markdown(safe_mode=True) + +class BaseHandler(tornado.web.RequestHandler): + + @property + def db(self): + blogdb = tornado.database.Connection( + host=db["host"] + ":" + db["port"], database=db["db"], + user=db["user"], password=db["password"]) + return blogdb + + def get_current_user(self): + user_id = self.get_secure_cookie("user") + if not user_id: + return None + return self.db.get("SELECT * FROM users WHERE id = %s", int(user_id)) + +class CodeHandler(BaseHandler): + + def get(self): + + q = xhtml_escape(self.get_argument("q")) + + entries = self.db.query("SELECT * FROM entries where title like '%%" + q + "%%' LIMIT 30") + + count = len(entries) + pages = (count - 1) / NAVNUM + 1 + self.render("search.html", entries=entries, pages=pages, counts=count) diff --git a/templates/base.html b/templates/base.html index a408d7f..3dad0c5 100644 --- a/templates/base.html +++ b/templates/base.html @@ -16,6 +16,12 @@
+
+
+ + +
+

{{ escape(handler.settings["sitename"]) }}

diff --git a/templates/search.html b/templates/search.html new file mode 100644 index 0000000..307bf2a --- /dev/null +++ b/templates/search.html @@ -0,0 +1,57 @@ +{% extends "base.html" %} + +{% block body %} + + + + + + + + + + {% for i,entry in enumerate(entries) %} + + + + + + {% end %} + +
序号标题介绍
#{{counts-i}}{{entry.title}}{{entry.info[ :100]}}
+ +{% end %} diff --git a/urls.py b/urls.py index 8d362f5..60a9ab2 100644 --- a/urls.py +++ b/urls.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from apps import code, admin +from apps import code, admin, search urls = [(r"/", code.HomeHandler), (r"/(\d+)", code.EntryHandler), @@ -10,8 +10,10 @@ (r"/update/(\d+)", code.UpdateHandler), (r"/delete", code.DeleteHandler), (r"/page/(\d+)", code.PageHandler), + (r"/search/", search.CodeHandler), (r"/auth/login", admin.LoginHandler), (r"/auth/logout", admin.LogoutHandler), (r"/admin/start", admin.SiteStartHandler), (r"/admin/delete/(\d+)", admin.DeleteHandler), - (r"/feed", code.FeedHandler), ] + (r"/feed", code.FeedHandler), + ]