诛仙法宝飞剑:[Python]Basic wiki in 0.3

来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 11:49:35

Basic wiki in 0.3

Basic wiki in Webpy 0.3. Demonstrates basic idea behind wiki. Lacks revisions.

Files

/schema.sql/wiki.py/templates:/templates/view.html/templates/new.html/templates/base.html/templates/index.html/templates/edit.html/model.py

/schema.sql

CREATE TABLE pages (id INT AUTO_INCREMENT,url TEXT,title TEXT,content TEXT,primary key (id));

/wiki.py

""" Basic wiki using webpy 0.3 """import webimport modelimport markdown### Url mappingsurls = ('/', 'Index','/new', 'New','/edit/(\d+)', 'Edit','/delete/(\d+)', 'Delete','/(.*)', 'Page',)### Templatest_globals = {'datestr': web.datestr,'markdown': markdown.markdown,}render = web.template.render('templates', base='base', globals=t_globals)class Index:def GET(self):""" Show page """pages = model.get_pages()return render.index(pages)class Page:def GET(self, url):""" View single page """page = model.get_page_by_url(url)if not page:raise web.seeother('/new?url=%s' % web.websafe(url))return render.view(page)class New:def not_page_exists(url):return not bool(model.get_page_by_url(url))page_exists_validator = web.form.Validator('Page already exists',not_page_exists)form = web.form.Form(web.form.Textbox('url', web.form.notnull, page_exists_validator,size=30,description="Location:"),web.form.Textbox('title', web.form.notnull,size=30,description="Page title:"),web.form.Textarea('content', web.form.notnull,rows=30, cols=80,description="Page content:", post="Use markdown syntax"),web.form.Button('Create page'),)def GET(self):url = web.input(url='').urlform = self.form()form.fill({'url':url})return render.new(form)def POST(self):form = self.form()if not form.validates():return render.new(form)model.new_page(form.d.url, form.d.title, form.d.content)raise web.seeother('/' + form.d.url)class Delete:def POST(self, id):model.del_page(int(id))raise web.seeother('/')class Edit:form = web.form.Form(web.form.Textbox('url', web.form.notnull,size=30,description="Location:"),web.form.Textbox('title', web.form.notnull,size=30,description="Page title:"),web.form.Textarea('content', web.form.notnull,rows=30, cols=80,description="Page content:", post="Use markdown syntax"),web.form.Button('Update page'),)def GET(self, id):page = model.get_page_by_id(int(id))form = self.form()form.fill(page)return render.edit(page, form)def POST(self, id):form = self.form()page = model.get_page_by_id(int(id))if not form.validates():return render.edit(page, form)model.update_page(int(id), form.d.url, form.d.title, form.d.content)raise web.seeother('/')app = web.application(urls, globals())if __name__ == '__main__':app.run()

/templates/view.html

$def with (page)$var title: $page.title

$page.title

$:markdown(page.content)Edit

/templates/new.html

$def with (form)

New Wiki Page

$:form.render()

/templates/base.html

$def with (page)$if page.has_key('title'):$page.title$else:My Wiki$:page

/templates/index.html

$def with (pages)

Webpy Wiki

Pages:

/templates/edit.html

$def with (page, form)

Edit $form.d.title

$:form.render()

Delete page?

/model.py

import webdb = web.database(dbn='mysql', db='wiki', user='justin')def get_pages():return db.select('pages', order='id DESC')def get_page_by_url(url):try:return db.select('pages', where='url=$url', vars=locals())[0]except IndexError:return Nonedef get_page_by_id(id):try:return db.select('pages', where='id=$id', vars=locals())[0]except IndexError:return Nonedef new_page(url, title, text):db.insert('pages', url=url, title=title, content=text)def del_page(id):db.delete('pages', where="id=$id", vars=locals())def update_page(id, url, title, text):db.update('pages', where="id=$id", vars=locals(),url=url, title=title, content=text)