Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions apps/search.py
Original file line number Diff line number Diff line change
@@ -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)
6 changes: 6 additions & 0 deletions templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
<div class="hright">
<a href="/newcode"><button class="btn success">New Code</button></a>
</div>
<form method="get" action='/search/'>
<div class="hright">
<input type="text" name="q" placeholder="搜索..."/>
<button type="submit" class="btn">Search</button>
</div>
</form>
<div class="hleft box">
<h1><a href="/">{{ escape(handler.settings["sitename"]) }}</a></h1>
</div>
Expand Down
57 changes: 57 additions & 0 deletions templates/search.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{% extends "base.html" %}

{% block body %}
<table class="bordered-table zebra-striped">
<thead>
<tr>
<th style="width: 30px;">序号</th>
<th style="width: 190px;">标题</th>
<th>介绍</th>
</tr>
</thead>
<tbody>
{% for i,entry in enumerate(entries) %}
<tr>
<td>#{{counts-i}}</td>
<td><a href="/{{ entry.slug }}">{{entry.title}}</a></td>
<td>{{entry.info[ :100]}}</td>
</tr>
{% end %}
</tbody>
</table>
<div class="pagination">
<ul>
{% if pages>11 %}
<li class="prev disabled"><a href="#">&larr; Previous</a></li>
{% for i in range(1,6) %}
{% if i==1 %}
<li class="active"><a href="#">{{i}}</a></li>
{% elif i==1 %}
<li><a href="/">{{i}}</a></li>
{% else %}
<li><a href="/page/{{i}}">{{i}}</a></li>
{% end %}
{% end %}
<li class="disabled"><a href="#">...</a></li>
{% for i in range(pages-4,pages+1) %}
<li><a href="/page/{{i}}">{{i}}</a></li>
{% end %}
<li class="next"><a href="/page/2">Next &rarr;</a></li>
{% else %}
<li class="prev disabled"><a href="#">&larr; Previous</a></li>
{% for i in range(pages) %}
{% if i==0 %}
<li class="active"><a href="/">{{i+1}}</a></li>
{% else %}
<li><a href="/page/{{i+1}}">{{i+1}}</a></li>
{% end %}
{% end %}
{% if pages==1 %}
<li class="next disabled"><a href="#">Next &rarr;</a></li>
{% else %}
<li class="next"><a href="/page/2">Next &rarr;</a></li>
{% end %}
{% end %}
</ul>
</div>
{% end %}
6 changes: 4 additions & 2 deletions urls.py
Original file line number Diff line number Diff line change
@@ -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),
Expand All @@ -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),
]