/
models.py
62 lines (52 loc) · 1.94 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from google.appengine.ext import db
# custom imports
import handlers
from hashes import Hashers
#########################################################################################
# Database Classes
#########################################################################################
class Art(db.Model):
title = db.StringProperty(required=True)
art = db.TextProperty(required=True)
created = db.DateTimeProperty(auto_now_add = True)
coords = db.GeoPtProperty()
class Post(db.Model):
subject = db.StringProperty(required=True)
content = db.TextProperty(required=True)
created = db.DateTimeProperty(auto_now_add = True)
last_modified = db.DateTimeProperty(auto_now = True)
def render(self):
self._render_text = self.content.replace("\n","<br>")
return handlers.render_str("post.html", p=self)
def as_dict(self):
time_fmt = "%c"
d = {
'subject': self.subject,
'content': self.content,
'created': self.created.strftime(time_fmt),
'last_modified': self.last_modified.strftime(time_fmt),
}
return d
class User(db.Model):
created = db.DateTimeProperty(auto_now_add = True)
username = db.StringProperty(required = True)
password = db.StringProperty(required = True)
email = db.EmailProperty()
@classmethod
def by_id(cls, user_id):
return User.get_by_id(user_id)
@classmethod
def by_name(cls, name):
u = User.all().filter("username = ", name).get()
return u
@classmethod
def register(cls, name, pw, email = None):
pw_hash = Hashers.make_pw_hash(name, pw)
u = User( username = name, password = pw_hash)
if email:
u.email = email
return u
@classmethod
def login(cls, name, pw):
u = cls.by_name(name)
return Hashers.check_pw_hash( name, pw, u.password) and u