Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import webapp2
- import jinja2
- from google.appengine.ext import db
- template_dir = os.path.join(os.path.dirname(__file__), 'templates')
- jinja_env = jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape=True)
- import hashlib
- def hash_str(s):
- return hashlib.md5(s).hexdigest()
- def make_secure_val(s):
- return "%s|%s" % (s, hash_str(s))
- def check_secure_val(h):
- val = h.split('|')[0]
- if h == make_secure_val(val):
- return val
- return None
- def isIn(list, item):
- for i in list:
- if i == item:
- return True
- return False
- class Handler(webapp2.RequestHandler):
- def write(self, *a, **kw):
- self.response.out.write(*a, **kw)
- def render_str(self, template, **params):
- t = jinja_env.get_template(template)
- return t.render(params)
- def render(self, template, **kw):
- self.write(self.render_str(template, **kw))
- def blog_key(name = 'default'):
- return db.Key.from_path('blogs', name)
- class Post (db.Model):
- title = db.StringProperty(required = True)
- content = db.TextProperty(required = True)
- created = db.DateTimeProperty(auto_now_add = True)
- last_modified = db.DateTimeProperty(auto_now = True)
- class User (db.Model):
- username = db.StringProperty(required = True)
- password = db.StringProperty(required = True)
- e_mail = db.StringProperty(required = False)
- created = db.DateTimeProperty(auto_now_add = True)
- class MainPage(Handler):
- def render_front(self, title="", content=""):
- posts = db.GqlQuery("SELECT * FROM Post ORDER By created DESC limit 10")
- self.render("front.html", title=title, content=content, posts = posts)
- def get(self):
- self.render_front()
- class NewPost(Handler):
- def get(self):
- self.render("newpost.html")
- def post(self):
- title = self.request.get("title")
- content = self.request.get("new-post")
- if title and content:
- a = Post(title = title, content = content)
- a.put()
- self.redirect('/blog/%s' % str(a.key().id()))
- #self.redirect("/blog")
- else:
- error = "we need both a title and some content!"
- self.render("newpost.html", title = title , content = content, error = error)
- class PostHandler(Handler):
- def get(self, post_id):
- p = Post.get_by_id(post_id)
- if p:
- self.redirect('/blog/%s' % str(a.key().id()))
- else:
- self.redirect('/blog/404')
- class SignUp(Handler):
- def get(self):
- self.render("signup.html")
- def post(self):
- username = self.request.get("username")
- password = self.request.get("password")
- verify = self.request.get("verify")
- e_mail = self.request.get("email")
- if username and password and password == verify:
- #and not already in the data base
- u = User(username = username, password = password, e_mail = e_mail)
- u.put()
- ## Cookie Code
- self.response.headers['Content-Type'] = 'text/plain'
- username = username
- username_cookie_str = self.request.cookies.get('username')
- #can't use cookie to check if already exists(because of hash?)
- users = db.GqlQuery("SELECT * FROM User where username ='%s'" %username)
- if users:
- error = "Username already exists"
- self.render("signup.html", username = username, error = error)
- else:
- new_cookie_val = make_secure_val(str(username))
- self.response.headers.add_header('Set-Cookie', 'username=%s' % new_cookie_val)
- ## end Cookie
- self.redirect('/welcome')
- else:
- error = "One or more text fields is invalid"
- self.render("signup.html", username = username, error = error)
- #self.write("One or more text fields is invalid")
- class Welcome(Handler):
- def get(self):
- username_cookie_str = self.request.cookies.get('username')
- cookie_val = check_secure_val(username_cookie_str)
- if cookie_val:
- self.render("welcome.html", username = cookie_val)
- else:
- self.redirect('/signup')
- #def post(self):
- 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