Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- params = dict(username = self.user.username,
- AttributeError: 'NoneType' object has no attribute 'username'
- class User(ndb.Model):
- username = ndb.StringProperty(required = True)
- nickname = ndb.StringProperty(required = True)
- pw_hash = ndb.StringProperty(required = True)
- profile_img_key = ndb.BlobKeyProperty()
- @classmethod
- def by_id(cls, id):
- return cls.get_by_id(id)
- class Handler(webapp2.RequestHandler):
- def initialize(self, *a, **kw):
- webapp2.RequestHandler.initialize(self, *a, **kw)
- uid = self.read_secure_cookie('user_id')
- # all handlers get self.user
- self.user = uid and User.by_id( int(uid) )
- def read_secure_cookie(self, cookie_name):
- cookie_val = self.request.cookies.get(cookie_name)
- return cookie_val and check_secure_val(cookie_val)
- class MyInfoHandler(Handler, blobstore_handlers.BlobstoreUploadHandler):
- def get(self):
- if not self.user:
- self.redirect('/blog/login')
- upload_url = blobstore.create_upload_url('/blog/myinfo')
- # required variables
- params = dict(username = self.user.username,
- upload_url = upload_url
- )
- # check for optional variables
- if self.user.nickname:
- params['nickname'] = self.user.nickname
- if self.user.profile_img_key:
- params['profile_img_url'] = '/blog/serve/%s' % self.user.profile_img_key
- # fill in input fields with params
- self.render('myinfo.html', **params)
- def post(self):
- if not self.user:
- self.redirect('/blog/login')
- self.nickname = self.request.get('nickname')
- params = dict(username = self.user.username,
- nickname = self.nickname,
- )
- upload_files = self.get_uploads('profile_img')
- if upload_files:
- blob_key = upload_files[0].key()
- params['profile_img_url'] = '/blog/serve/%s' % blob_key
- error_found = False
- if not error_found:
- update_entity(self.user, **params)
- params['help'] = "Successfully updated!"
- else:
- params['help'] = "Check your information again"
- self.render('myinfo.html', **params)
- def update_entity(ent, **params):
- for name, value in params.items():
- setattr(ent, name, value)
- ent.put()
- class ServeHandler(Handler, blobstore_handlers.BlobstoreDownloadHandler):
- def get(self, resource):
- resource = str(urllib.unquote(resource))
- blob_info = blobstore.BlobInfo.get(resource)
- self.send_blob(blob_info)
- <form class="form-horizontal" action="{{ upload_url }}" role="form" method="post" enctype="multipart/form-data">
- <h2>My info</h2>
- <div class="form-group">
- <div class="col-xs-offset-3">
- <img src="{{ profile_img_url }}" />
- </div>
- </div>
- <!-- profile image upload -->
- <div class="form-group">
- <label class="control-label col-xs-3">Profile image:</label>
- <div class="col-xs-3">
- <input class="btn btn-default btn-file" type="file" name="profile_img">
- </div>
- </div>
- <div class="form-group">
- <label class="control-label col-xs-3">Username:</label>
- <label class="col-xs-3">{{username}}</label>
- <span class="help-block error">{{username_error}}</span>
- </div>
- <div class="form-group">
- <label class="control-label col-xs-3">Nickname:</label>
- <div class="col-xs-3">
- <input class="form-control" type="text" name="nickname" value="{{nickname}}">
- </div>
- <span class="help-block error">{{nickname_error}}</span>
- </div>
- <div class="form-group">
- <div class="col-xs-offset-3 col-xs-2">
- <input class="btn btn-lg btn-primary" type="submit" name="submit" value="Update">
- <div class="help-block">{{help}}</div>
- </div>
- </div>
- </form>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement