Documente Academic
Documente Profesional
Documente Cultură
Class Thumbnail(db.Model):
name = db.StringProperty()
data = db.BlobProperty()
class Album(db.Model):
name = db.StringProperty()
desc = db.TextProperty()
cover = blobstore.BlobReferenceProperty()
cr_time = db.DateTimeProperty(auto_now_add=True)
def genURL(self):
return images.get_serving_url(str(self.cover.key()), size=144, crop=True)
class Photo(db.Model):
src = db.StringProperty()
name = db.StringProperty()
desc = db.StringProperty()
blob = blobstore.BlobReferenceProperty()
#thumb = db.ReferenceProperty(Thumbnail
cr_time = db.DateTimeProperty(auto_now_add=True)
album = db.ReferenceProperty(Album)
def genThumbURL(self):
return images.get_serving_url(str(self.blob.key()), size=104, crop=True)
def genURL(self):
return images.get_serving_url(str(self.blob.key()), size=912)
Query
class QueryBase(webapp.RequestHandler):
def __init__(self):
self.title = ''
template = self.getTemplate(tplName)
self.response.out.write(template.render_unicode(baseUrl=baseUrl, redirectUrl=url,
posts=posts, isAdmin=users.is_current_user_admin(), calendar=widget.Calendar(path),
widgets=[widget.BlogUpdates(), widget.RecentComment(),
widget.TagCloud()],
pageCount=pageCount, currentPage=pageOffset,
pagePath=path, title = self.title))
#知道啥意思不……four O four……lol
def fof(self):
template = self.getTemplate('404.html')
self.response.set_status(404)
logging.info('Invalid request: %s' % self.request.path)
self.response.out.write(template.render_unicode(title = u'出错啦', uri=self.request.path))
class Index(QueryBase):
def get(self):
allAlbums = Album.all()
template = self.getTemplate('index.html')
self.response.out.write(template.render_unicode(aas=allAlbums,
isAdmin=users.is_current_user_admin()))
class ListAlbum(QueryBase):
def get(self, k):
album = Album.get_by_key_name('_' + base64.b64encode(urllib2.unquote(k).decode('utf-
8')))
template = self.getTemplate('album.html')
self.response.out.write(template.render_unicode(album=album,
isAdmin=users.is_current_user_admin()))
class DispThumbnail(webapp.RequestHandler):
def get(self, id):
hkeys = self.request.headers.keys()
"""
if 'Referer' in hkeys:
referer = self.request.headers['Referer']
if referer:
if re.search(r'https?:\/\/.*?\.wokanxing\.info.*', referer, re.I) or
referer.find('lazybonereborn') != -1:
"""
t = Thumbnail.get_by_id(long(id))
if t:
name = t.name
self.response.headers['Content-Type'] = str('image/%s' % name[name.rfind('.') + 1:])
self.response.out.write(t.data)
class ServePhoto(webapp.RequestHandler):
def get(self, id, size):
#size = (t)iny, (s)mall, (m)edium, (l)arge, (f)ull
p = Photo.get_by_id(long(id))
if p:
gImg = images.Image(p.data)
size = (size if size else 's').lower()
if size == 'f':
limit = -1
elif size == 'l':
limit = 1024
elif size == 'm':
limit = 960
elif size == 't':
limit = 240
else:
limit = 480
##################################
limit = -1
##################################
stream = p.data
if limit > 0:
if gImg.width > gImg.height:
h = gImg.height * limit / gImg.width
stream = images.resize(stream, limit, h)
else:
w = gImg.width * limit / gImg.height
stream = images.resize(stream, w, limit)
name = p.name
class GeneratePhotoURL(webapp.RequestHandler):
def get(self, key):
self.response.out.write(key)
class DispPhoto(QueryBase):
def get(self, an):
album = Album.get_by_key_name('_' + base64.b64encode(urllib2.unquote(an).decode('utf-
8')))
#p = Photo.get_by_id(long(id))
if album:
ids = []
urls = []
info = {}
for p in album.photo_set:
ids.append(int(p.key().id()))
urls.append(p.genURL())
info[str(p.key().id())] = {
'name': str(p.name),
'desc': p.desc,
'crTime': p.cr_time.strftime('%Y%m%d %H:%M:%S')
}
template = self.getTemplate('photo.html')
self.response.out.write(template.render_unicode(album=album, ids=ids, urls=urls,
info=simplejson.dumps(info), isAdmin=users.is_current_user_admin()))
class Dummy(webapp.RequestHandler):
def get(self, anything):
self.response.out.write(anything)
class makeURL(blobstore_handlers.BlobstoreUploadHandler):
def get(self):
url = blobstore.create_upload_url('/admin/api/upload')
self.response.out.write(url)
class GetPhotoInfo(webapp.RequestHandler):
def get(self, id):
p = Photo.get_by_id(long(id))
if p:
self.response.out.write(simplejson.dumps({
'name': p.name,
'desc': p.desc,
'crTime': p.cr_time.strftime('%Y%m%d %H:%M:%S')
}, ensure_ascii=False))
class ListAlbums(webapp.RequestHandler):
def get(self):
albums = []
for album in Album.all():
albums.append({
'name': album.name,
'count': album.photo_set.count(),
'crTime': album.cr_time.strftime('%Y-%m-%d- %H:%M:%S')
})
self.response.out.write(simplejson.dumps(albums))
UPDATE
class UpdateBase(object):
def getTemplate(self, name):
#读取模板文件
mylookup = TemplateLookup(directories=[os.path.join(os.path.dirname(__file__),
'template')],
format_exceptions=True)
return mylookup.get_template(name)
def post(self):
upload_files = self.get_uploads('Filedata')
blob_info = upload_files[0]
name = self.request.get('Filename')
folder = self.request.get('folder')
abn = folder[folder.rfind('/') + 1:]
gImg = images.Image(blob_info.key())
class APIUpload(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads('Filedata')
blob_info = upload_files[0]
name = self.request.get('Filename')
abn = self.request.get('album')
albm = unicode(base64.b64decode(abn), 'utf-8')
desc = self.request.get('desc')
desc = unicode(base64.b64decode(desc), 'utf-8')
gImg = images.Image(blob_info.key())
self.redirect('/_dummy/%s' % blob_info.key())
class EditDesc(webapp.RequestHandler):
@adminOP
def post(self):
keys = self.request.arguments()
result = []
for k in keys:
v = self.request.get(k)
logging.info((k, v))
p = Photo.get_by_id(long(k))
if p:
p.desc = v
p.put()
result.append(k)
self.response.out.write(string.join(result) if len(result) else '')