Guest User

Untitled

a guest
Aug 8th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.31 KB | None | 0 0
  1. import os
  2. import webapp2
  3. import jinja2
  4. from google.appengine.ext import db
  5.  
  6. template_dir = os.path.join(os.path.dirname(__file__), 'templates')
  7. jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)
  8.  
  9. import hashlib
  10.  
  11. def hash_str(s):
  12.     return hashlib.md5(s).hexdigest()
  13.  
  14. def make_secure_val(s):
  15.     return "%s|%s" % (s, hash_str(s))
  16.  
  17. def check_secure_val(h):
  18.     val = h.split('|')[0]
  19.     if h == make_secure_val(val):
  20.         return val
  21.     return None
  22.    
  23. def isIn(list, item):
  24.     for i in list:
  25.     if i == item:
  26.             return True
  27.     return False
  28.  
  29. class Handler(webapp2.RequestHandler):
  30.     def write(self, *a, **kw):
  31.         self.response.out.write(*a, **kw)
  32.        
  33.     def render_str(self, template, **params):
  34.         t = jinja_env.get_template(template)
  35.         return t.render(params)
  36.        
  37.     def render(self, template, **kw):
  38.         self.write(self.render_str(template, **kw))
  39.        
  40.     def blog_key(name = 'default'):
  41.     return db.Key.from_path('blogs', name)
  42.        
  43. class Post (db.Model):
  44.     title = db.StringProperty(required = True)
  45.     content = db.TextProperty(required = True)
  46.     created = db.DateTimeProperty(auto_now_add = True)
  47.     last_modified = db.DateTimeProperty(auto_now = True)
  48.  
  49. class User (db.Model):
  50.     username = db.StringProperty(required = True)
  51.     password = db.StringProperty(required = True)
  52.     e_mail = db.StringProperty(required = False)
  53.     created = db.DateTimeProperty(auto_now_add = True)
  54.    
  55. class MainPage(Handler):
  56.     def render_front(self, title="", content=""):
  57.         posts = db.GqlQuery("SELECT * FROM Post ORDER By created DESC limit 10")
  58.         self.render("front.html", title=title, content=content, posts = posts)
  59.  
  60.     def get(self):
  61.         self.render_front()
  62.  
  63. class NewPost(Handler):
  64.     def get(self):
  65.         self.render("newpost.html")
  66.     def post(self):
  67.     title = self.request.get("title")
  68.         content = self.request.get("new-post")
  69.        
  70.         if title and content:
  71.             a = Post(title = title, content = content)
  72.             a.put()
  73.             self.redirect('/blog/%s' % str(a.key().id()))
  74.             #self.redirect("/blog")
  75.            
  76.         else:
  77.             error = "we need both a title and some content!"
  78.             self.render("newpost.html", title = title , content = content, error = error)
  79.  
  80. class PostHandler(Handler):
  81.     def get(self, post_id):
  82.         p = Post.get_by_id(post_id)
  83.     if p:
  84.         self.redirect('/blog/%s' % str(a.key().id()))
  85.     else:
  86.         self.redirect('/blog/404')
  87.        
  88. class SignUp(Handler):
  89.     def get(self):
  90.     self.render("signup.html")
  91.     def post(self):
  92.     username = self.request.get("username")
  93.     password = self.request.get("password")
  94.     verify = self.request.get("verify")
  95.         e_mail = self.request.get("email")
  96.        
  97.     if username and password and password == verify:
  98.             #and not already in the data base
  99.         u = User(username = username, password = password, e_mail = e_mail)
  100.         u.put()
  101.         ## Cookie Code
  102.         self.response.headers['Content-Type'] = 'text/plain'
  103.         username  = username
  104.            
  105.         username_cookie_str = self.request.cookies.get('username')
  106.        
  107.         #can't use cookie to check if already exists(because of hash?)
  108.         users = db.GqlQuery("SELECT * FROM User where username ='%s'" %username)
  109.        
  110.         if users:
  111.                 error = "Username already exists"
  112.             self.render("signup.html", username = username, error = error)
  113.         else:
  114.             new_cookie_val = make_secure_val(str(username))
  115.             self.response.headers.add_header('Set-Cookie', 'username=%s' % new_cookie_val)
  116.            
  117.             ## end Cookie
  118.             self.redirect('/welcome')
  119.     else:
  120.         error = "One or more text fields is invalid"
  121.             self.render("signup.html", username = username, error = error)
  122.             #self.write("One or more text fields is invalid")
  123.            
  124. class Welcome(Handler):
  125.     def get(self):
  126.         username_cookie_str = self.request.cookies.get('username')
  127.     cookie_val = check_secure_val(username_cookie_str)
  128.     if cookie_val:
  129.         self.render("welcome.html", username = cookie_val)
  130.     else:
  131.         self.redirect('/signup')
  132.    
  133.     #def post(self):
  134.        
  135.            
  136. app = webapp2.WSGIApplication([('/blog', MainPage), ('/blog/newpost', NewPost), ('/blog/([0-9]+)', PostHandler), ('/signup', SignUp), ('/welcome', Welcome),], debug=True)
Add Comment
Please, Sign In to add comment