Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: frazzle on Jun 1st, 2012  |  syntax: Python  |  size: 4.95 KB  |  hits: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. def blog_key(name = 'default'):
  2.     return db.Key.from_path('blogs', name)
  3.  
  4. class Post(db.Model):
  5.     path = db.StringProperty(required = True)
  6.     content = db.TextProperty(required = True)
  7.     created = db.DateTimeProperty(auto_now_add = True)
  8.     last_modified = db.DateTimeProperty(auto_now = True)
  9.  
  10.     def render(self):
  11.         self._render_text = self.content.replace('\n', '<br>')
  12.         return render_str("post.html", p = self)
  13.  
  14. def top():
  15.    
  16.         #cache['timer']=int(time.time())
  17.     posts = greetings = Post.all().order('-created')        
  18.         #cache[key]=posts
  19.        
  20.  
  21.     return posts
  22.  
  23. class WikiPage(BlogHandler):
  24.     def get(self,page):
  25.         my_url = str(self.request.url)
  26.         path = str(my_url.rstrip('/').split('/')[-1])
  27.         posts=top()
  28.         post = singlePost(path)      
  29.         if page == '/':            
  30.             self.render('front.html', posts = posts)
  31.         elif path in posts:
  32.             self.render('front.html', post = post)
  33.         else:
  34.             self.redirect('/_edit/%s'%path)
  35.  
  36. def singlePost(path):        
  37.     post = db.GqlQuery("SELECT * FROM Post WHERE path = :1", path)    
  38.     return post
  39.  
  40. class EditPage(BlogHandler):
  41.     def get(self,page):
  42.        
  43.         if self.user:
  44.             self.render("newpost.html")
  45.         else:
  46.             self.redirect("/login")
  47.  
  48.     def post(self,page):
  49.         #change this back after grading
  50.         if not self.user:
  51.             self.redirect('/')
  52.         my_url = str(self.request.url)
  53.         path = my_url.rstrip('/').split('/')[-1]
  54.         content = self.request.get('content')
  55.  
  56.         if content:
  57.             p = Post(parent = blog_key(), path = path, content = content)
  58.             p.put()
  59.             self.redirect('/%s' % p.path)
  60.         else:
  61.             error = "content, please!"
  62.             self.render("newpost.html", content=content, error=error)
  63.  
  64.  
  65.  
  66.  
  67. USER_RE = re.compile(r"^[a-zA-Z0-9_-]{3,20}$")
  68. def valid_username(username):
  69.     return username and USER_RE.match(username)
  70.  
  71. PASS_RE = re.compile(r"^.{3,20}$")
  72. def valid_password(password):
  73.     return password and PASS_RE.match(password)
  74.  
  75. EMAIL_RE  = re.compile(r'^[\S]+@[\S]+\.[\S]+$')
  76. def valid_email(email):
  77.     return not email or EMAIL_RE.match(email)
  78.  
  79. class Signup(BlogHandler):
  80.     def get(self):
  81.         self.render("signup-form.html")
  82.  
  83.     def post(self):
  84.         have_error = False
  85.         self.username = self.request.get('username')
  86.         self.password = self.request.get('password')
  87.         self.verify = self.request.get('verify')
  88.         self.email = self.request.get('email')
  89.  
  90.         params = dict(username = self.username,
  91.                       email = self.email)
  92.  
  93.         if not valid_username(self.username):
  94.             params['error_username'] = "That's not a valid username."
  95.             have_error = True
  96.  
  97.         if not valid_password(self.password):
  98.             params['error_password'] = "That wasn't a valid password."
  99.             have_error = True
  100.         elif self.password != self.verify:
  101.             params['error_verify'] = "Your passwords didn't match."
  102.             have_error = True
  103.  
  104.         if not valid_email(self.email):
  105.             params['error_email'] = "That's not a valid email."
  106.             have_error = True
  107.  
  108.         if have_error:
  109.             self.render('signup-form.html', **params)
  110.         else:
  111.             self.done()          
  112.     def done(self, *a, **kw):
  113.         raise NotImplementedError
  114.  
  115. class Unit2Signup(Signup):
  116.     def done(self):
  117.         self.redirect('/welcome?username=' + self.username)
  118.  
  119. class Register(Signup):
  120.     def done(self):
  121.         #make sure the user doesn't already exist
  122.         u = User.by_name(self.username)
  123.         if u:
  124.             msg = 'That user already exists.'
  125.             self.render('signup-form.html', error_username = msg)
  126.         else:
  127.             u = User.register(self.username, self.password, self.email)
  128.             u.put()
  129.  
  130.             self.login(u)
  131.             self.redirect('/welcome')
  132.  
  133. class Login(BlogHandler):
  134.     def get(self):
  135.         self.render('login-form.html')
  136.  
  137.     def post(self):
  138.         username = self.request.get('username')
  139.         password = self.request.get('password')
  140.  
  141.         u = User.login(username, password)
  142.         if u:
  143.             self.login(u)
  144.             self.redirect('/welcome')
  145.         else:
  146.             msg = 'Invalid login'
  147.             self.render('login-form.html', error = msg)
  148.  
  149. class Logout(BlogHandler):
  150.     def get(self):
  151.         self.logout()
  152.         self.redirect('/')
  153.  
  154.  
  155.  
  156. PAGE_RE = r'(/(?:[a-zA-Z0-9_-]+/?)*)'
  157. app = webapp2.WSGIApplication([('/signup', Register),
  158.                                ('/login', Login),
  159.                                ('/logout', Logout),
  160.                                ('/_edit' + PAGE_RE, EditPage),
  161.                                (PAGE_RE, WikiPage),                              
  162.                                ],
  163.                               debug=True)