You are on page 1of 7

Thinkabouttheidealwaytowriteawebapp. Writethecodetomakeithappen.[more...] home>Basicwikiin0.

3 getstarted:
install tutorial

Basicwikiin0.3
BasicwikiinWebpy0.3.Demonstratesbasicideabehindwiki.Lacksrevisions.

learnmore:
apireference cookbook codeexamples

Files
/ s c h e m a . s q l / w i k i . p y / t e m p l a t e s : / t e m p l a t e s / v i e w . h t m l / t e m p l a t e s / n e w . h t m l / t e m p l a t e s / b a s e . h t m l / t e m p l a t e s / i n d e x . h t m l / t e m p l a t e s / e d i t . h t m l / m o d e l . p y

divein:
sourcecode mailinglist issuetracker

/schema.sql
C R E A T ET A B L Ep a g e s( i dI N TA U T O _ I N C R E M E N T , u r lT E X T , t i t l eT E X T , c o n t e n tT E X T , p r i m a r yk e y( i d ) ) ;

/wiki.py
" " "B a s i cw i k iu s i n gw e b p y0 . 3" " " i m p o r tw e b i m p o r tm o d e l i m p o r tm a r k d o w n # # #U r lm a p p i n g s

u r l s=( ' / ' ,' I n d e x ' , ' / n e w ' ,' N e w ' , ' / e d i t / ( \ d + ) ' ,' E d i t ' , ' / d e l e t e / ( \ d + ) ' ,' D e l e t e ' , ' / ( . * ) ' ,' P a g e ' , )

# # #T e m p l a t e s t _ g l o b a l s={ ' d a t e s t r ' :w e b . d a t e s t r , ' m a r k d o w n ' :m a r k d o w n . m a r k d o w n , } r e n d e r=w e b . t e m p l a t e . r e n d e r ( ' t e m p l a t e s ' ,b a s e = ' b a s e ' ,g l o b a l s = t _ g l o b a l s )

c l a s sI n d e x : d e fG E T ( s e l f ) : " " "S h o wp a g e" " " p a g e s=m o d e l . g e t _ p a g e s ( ) r e t u r nr e n d e r . i n d e x ( p a g e s )

c l a s sP a g e : d e fG E T ( s e l f ,u r l ) : " " "V i e ws i n g l ep a g e" " " p a g e=m o d e l . g e t _ p a g e _ b y _ u r l ( u r l ) i fn o tp a g e : r a i s ew e b . s e e o t h e r ( ' / n e w ? u r l = % s '%w e b . w e b s a f e ( u r l ) ) r e t u r nr e n d e r . v i e w ( p a g e )

c l a s sN e w : d e fn o t _ p a g e _ e x i s t s ( u r l ) : r e t u r nn o tb o o l ( m o d e l . g e t _ p a g e _ b y _ u r l ( u r l ) ) p a g e _ e x i s t s _ v a l i d a t o r=w e b . f o r m . V a l i d a t o r ( ' P a g ea l r e a d ye x i s t s ' , n o t _ p a g e _ e x i s t s ) f o r m=w e b . f o r m . F o r m ( w e b . f o r m . T e x t b o x ( ' u r l ' ,w e b . f o r m . n o t n u l l ,p a g e _ e x i s t s _ v a l i d a t o r , s i z e = 3 0 ,

d e s c r i p t i o n = " L o c a t i o n : " ) , w e b . f o r m . T e x t b o x ( ' t i t l e ' ,w e b . f o r m . n o t n u l l , s i z e = 3 0 , d e s c r i p t i o n = " P a g et i t l e : " ) , w e b . f o r m . T e x t a r e a ( ' c o n t e n t ' ,w e b . f o r m . n o t n u l l , r o w s = 3 0 ,c o l s = 8 0 , d e s c r i p t i o n = " P a g ec o n t e n t : " ,p o s t = " U s em a r k d o w ns y n t a x " ) , w e b . f o r m . B u t t o n ( ' C r e a t ep a g e ' ) , ) d e fG E T ( s e l f ) : u r l=w e b . i n p u t ( u r l = ' ' ) . u r l f o r m=s e l f . f o r m ( ) f o r m . f i l l ( { ' u r l ' : u r l } ) r e t u r nr e n d e r . n e w ( f o r m ) d e fP O S T ( s e l f ) : f o r m=s e l f . f o r m ( ) i fn o tf o r m . v a l i d a t e s ( ) : r e t u r nr e n d e r . n e w ( f o r m ) m o d e l . n e w _ p a g e ( f o r m . d . u r l ,f o r m . d . t i t l e ,f o r m . d . c o n t e n t ) r a i s ew e b . s e e o t h e r ( ' / '+f o r m . d . u r l )

c l a s sD e l e t e : d e fP O S T ( s e l f ,i d ) : m o d e l . d e l _ p a g e ( i n t ( i d ) ) r a i s ew e b . s e e o t h e r ( ' / ' )

c l a s sE d i t : f o r m=w e b . f o r m . F o r m ( w e b . f o r m . T e x t b o x ( ' u r l ' ,w e b . f o r m . n o t n u l l , s i z e = 3 0 , d e s c r i p t i o n = " L o c a t i o n : " ) , w e b . f o r m . T e x t b o x ( ' t i t l e ' ,w e b . f o r m . n o t n u l l , s i z e = 3 0 , d e s c r i p t i o n = " P a g et i t l e : " ) , w e b . f o r m . T e x t a r e a ( ' c o n t e n t ' ,w e b . f o r m . n o t n u l l , r o w s = 3 0 ,c o l s = 8 0 , d e s c r i p t i o n = " P a g ec o n t e n t : " ,p o s t = " U s em a r k d o w ns y n t a x " ) , w e b . f o r m . B u t t o n ( ' U p d a t ep a g e ' ) , ) d e fG E T ( s e l f ,i d ) :

p a g e=m o d e l . g e t _ p a g e _ b y _ i d ( i n t ( i d ) ) f o r m=s e l f . f o r m ( ) f o r m . f i l l ( p a g e ) r e t u r nr e n d e r . e d i t ( p a g e ,f o r m )

d e fP O S T ( s e l f ,i d ) : f o r m=s e l f . f o r m ( ) p a g e=m o d e l . g e t _ p a g e _ b y _ i d ( i n t ( i d ) ) i fn o tf o r m . v a l i d a t e s ( ) : r e t u r nr e n d e r . e d i t ( p a g e ,f o r m ) m o d e l . u p d a t e _ p a g e ( i n t ( i d ) ,f o r m . d . u r l ,f o r m . d . t i t l e ,f o r m . d . c o n t e n t ) r a i s ew e b . s e e o t h e r ( ' / ' )

a p p=w e b . a p p l i c a t i o n ( u r l s ,g l o b a l s ( ) ) i f_ _ n a m e _ _= =' _ _ m a i n _ _ ' : a p p . r u n ( )

/templates/view.html
$ d e fw i t h( p a g e ) $ v a rt i t l e :$ p a g e . t i t l e < h 1 > $ p a g e . t i t l e < / h 1 > $ : m a r k d o w n ( p a g e . c o n t e n t )

< ah r e f = " / e d i t / $ p a g e . i d " > E d i t < / a >

/templates/new.html
$ d e fw i t h( f o r m )

< h 1 > N e wW i k iP a g e < / h 1 > < f o r ma c t i o n = " "m e t h o d = " p o s t " > $ : f o r m . r e n d e r ( ) < / f o r m >

/templates/base.html
$ d e fw i t h( p a g e ) < h t m l > < h e a d > $ i fp a g e . h a s _ k e y ( ' t i t l e ' ) : < t i t l e > $ p a g e . t i t l e < / t i t l e > $ e l s e : < t i t l e > M yW i k i < / t i t l e > < s t y l e > < / s t y l e > < / h e a d > < b o d y > < u l > < l i > < ah r e f = " / " > H o m e < / a > < / l i > < l i > < ah r e f = " / n e w " > N e wP a g e < / a > < / l i > < / u l > $ : p a g e < / b o d y > < / h t m l >

/templates/index.html
$ d e fw i t h( p a g e s ) < h 1 > W e b p yW i k i < / h 1 > < h 2 > P a g e s : < / h 2 > < u l > $ f o rp a g ei np a g e s : < l i > < ah r e f = " / $ p a g e . u r l " > $ p a g e . u r l < / a > < / l i > < / u l >

/templates/edit.html
$ d e fw i t h( p a g e ,f o r m )

< h 1 > E d i t$ f o r m . d . t i t l e < / h 1 > < f o r ma c t i o n = " "m e t h o d = " p o s t " > $ : f o r m . r e n d e r ( ) < / f o r m >

< h 2 > D e l e t ep a g e ? < / h 2 > < f o r ma c t i o n = " / d e l e t e / $ p a g e . i d "m e t h o d = " p o s t " > < i n p u tt y p e = " s u b m i t "v a l u e = " D e l e t ep a g e " / > < / f o r m >

/model.py
i m p o r tw e b d b=w e b . d a t a b a s e ( d b n = ' m y s q l ' ,d b = ' w i k i ' ,u s e r = ' j u s t i n ' ) d e fg e t _ p a g e s ( ) : r e t u r nd b . s e l e c t ( ' p a g e s ' ,o r d e r = ' i dD E S C ' ) d e fg e t _ p a g e _ b y _ u r l ( u r l ) : t r y : r e t u r nd b . s e l e c t ( ' p a g e s ' ,w h e r e = ' u r l = $ u r l ' ,v a r s = l o c a l s ( ) ) [ 0 ] e x c e p tI n d e x E r r o r : r e t u r nN o n e d e fg e t _ p a g e _ b y _ i d ( i d ) : t r y : r e t u r nd b . s e l e c t ( ' p a g e s ' ,w h e r e = ' i d = $ i d ' ,v a r s = l o c a l s ( ) ) [ 0 ] e x c e p tI n d e x E r r o r : r e t u r nN o n e d e fn e w _ p a g e ( u r l ,t i t l e ,t e x t ) : d b . i n s e r t ( ' p a g e s ' ,u r l = u r l ,t i t l e = t i t l e ,c o n t e n t = t e x t ) d e fd e l _ p a g e ( i d ) : d b . d e l e t e ( ' p a g e s ' ,w h e r e = " i d = $ i d " ,v a r s = l o c a l s ( ) ) d e fu p d a t e _ p a g e ( i d ,u r l ,t i t l e ,t e x t ) : d b . u p d a t e ( ' p a g e s ' ,w h e r e = " i d = $ i d " ,v a r s = l o c a l s ( ) , u r l = u r l ,t i t l e = t i t l e ,c o n t e n t = t e x t )

startedbyAaronSwartz(webpy@aaronsw.com) forkthispageonGitHub

You might also like