From 70c92fbfe148242723ce5bbfe676a214c1ba8fe3 Mon Sep 17 00:00:00 2001 From: Taehoon Kang Date: Sat, 10 Nov 2012 22:30:41 -0800 Subject: [PATCH] Fixed the nickname changing bug. --- action/service.py | 13 ++++--------- action/user.py | 6 +----- bootstrap.pyc | Bin 850 -> 0 bytes lib/controller.py | 8 +++++++- models.py | 2 +- models.pyc | Bin 30338 -> 0 bytes settings.pyc | Bin 942 -> 0 bytes static/js/service.js | 2 +- templates/about.html | 3 +-- 9 files changed, 15 insertions(+), 19 deletions(-) delete mode 100644 bootstrap.pyc delete mode 100644 models.pyc delete mode 100644 settings.pyc diff --git a/action/service.py b/action/service.py index 329b10c..aacc2d3 100644 --- a/action/service.py +++ b/action/service.py @@ -7,11 +7,6 @@ import models import settings import urllib - -try: - import json -except ImportError: - import simplejson as json class Article(Action): def _captcha_validation(self, challenge, response): @@ -37,10 +32,7 @@ def post(self, category_name): @login_required def put(self): - unqouted = urllib.unquote_plus(self.request.body).decode('utf8') - if unqouted[-1:] != '}': - unqouted = unqouted[:-1] - params = json.loads(unqouted) + params = self.get_json_payload() article_id = int(params['id']) article = models.Article.get_by_id(article_id) if article.author.user != users.get_current_user(): @@ -83,6 +75,9 @@ def get(self, article_id): self.article = models.Article.get_by_id(article_id) if not self.is_ajax and not self.is_crawler: + if not self.article: + self.response.set_status(404) + return self.redirect('/#!/%s/%d' % (urllib.quote(self.article.category.name.encode('utf8')), article_id)) if self.article: diff --git a/action/user.py b/action/user.py index e782125..8b3242d 100644 --- a/action/user.py +++ b/action/user.py @@ -2,10 +2,6 @@ from lib.controller import Action from lib.decorators import login_required from models import User, UserNicknameHistory -try: - import json -except ImportError: - import simplejson as json class Index(Action): def get(self, user_id=None): @@ -19,7 +15,7 @@ def get(self, user_id=None): @login_required def put(self): - params = json.loads(self.request.body) + params = self.get_json_payload() me = User.get_current() self.user = me if me.nickname == params['nickname']: diff --git a/bootstrap.pyc b/bootstrap.pyc deleted file mode 100644 index bafb2a1550c8a53a74934399b669c3850a267738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 850 zcmaJ<+iuf95S_JiX>M&OwBiBYf^b2^h&QAP5j9a11Sv{dkX+Hoi3e-V#>|2PV54@FlzwTq4>dm(txB1(Jmv0(E*c4MWg^o+EmwO7MD_|cL1x9>=Hu+ zdpye2JEXDXZ+gaNhsQ)?WEyM3c>hgrJUpFE2WMxa@o+kOciKOHJMaXhOr6Y0mYO0{ z3X2WK0we6=r>939Q>9pAv6c(8ey=ccp-{IiZ$+ssa*05O z3}3=1jqsc1V=sNnTViL$awPvqA9W@!`I?R2ePSyjoUdZfVR-A|zSyi+qBgwRRiS1}Dx)j2qU2&4nLSE!Zh|{Y5a`TLM7Me&$G;EQ-papzp@|7G4;Pv_=>Mt-zU=)EvGHo SqA8lrfm0JTvF}vGL+1~ekFbdV diff --git a/lib/controller.py b/lib/controller.py index baed67e..77ebd68 100644 --- a/lib/controller.py +++ b/lib/controller.py @@ -295,7 +295,13 @@ def _get_context(self): self.__context['request'] = self.request self.__context['response'] = self.response self.__context['app'] = app_identity - return self.__context + return self.__context + + def get_json_payload(self): + unqouted = urllib.unquote_plus(self.request.body).decode('utf8') + if unqouted[-1:] != '}': + unqouted = unqouted[:-1] + return json.loads(unqouted) class Result(object): DEFAULT = '' diff --git a/models.py b/models.py index 443846b..4489653 100644 --- a/models.py +++ b/models.py @@ -29,7 +29,7 @@ class User(db.Model): email_hash = db.StringProperty() def nickname_exists(self, nickname): - return User.gql('WHERE user != :1 AND nickname = :2', self, nickname).get() != None + return User.gql('WHERE user != :1 AND nickname = :2', self.user, nickname).get() != None def change_nickname(self, nickname): db.run_in_transaction_options(xg_on, UserNicknameHistory(user=self, nickname=bleach.clean(self.nickname)).put) diff --git a/models.pyc b/models.pyc deleted file mode 100644 index 0d5760fa06f50d389e4c7dd960e16889ca4a4644..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30338 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 E0hG_~>;M1& diff --git a/settings.pyc b/settings.pyc deleted file mode 100644 index b271ef8da5457569581671146461d7c708b3ec27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZWnTXWJt6h0}vQfh0x%=qSuS|8eQNdj>k$B?8Dxefu8ykxdyfzXg-vI~l@{t^G1 zKfxcMCrnGnaj)lm-?{9Zvzgx~*?a-`E&&1n2Y>?11(@%Ew{tIN z?uA{Td+cpi^q2m>M!O;;O(ZclLeZEBmr*^!VGx(;2eW@ z08S3PLvT*OI|Anscv)~x!8-=$47?mTkJE?Q7bo~g{|}Bf%c1y+iJUItfN;wADFU|H z8=5`W?p*gjYdw=6BWBPQ4Wf8KL(UFR7a1qqAF~3=GtT38qBxEgizxI6CyYl4nbNCi z6iow4VxL_hDMm33N#L(2dxKt@^_|#jgN*3pW>u4y?aN^^zAVaXyX~&$sx|twsV9-onN3)v8)?rz0*~Qq7+M&n{m0Qs%k|k zOk{}=g-Vo`Xhkit)L3bHgF-8BYw2jLW+5qEl7_MzSKD)+e90?~B#B$$3dBOOm9j#bQOdILB;!2akyHUA$t#XFM$-xnWz` z^OKM)C_h9zp(NN4sp7g5KcKG5)28*!R=273P1mq`_9g}mSAG(O8+k^UdrQ|mi(^!YQyYn@K5X}Y$BaZOk2T5iJ}@w1Ib*KFHXXA3?- z&}wNlw61G표현의 자유를 위한 노력 = 여러분의 지성을 믿습니다.

권리

    -
  • © Copyleft. 이 웹사이트/서비스에 대한 소스코드는 모두 공개(LGPL)되어 있습니다. 자유롭게 사용하실 수 있습니다.
  • +
  • © Copyleft. 이 웹사이트/서비스에 대한 소스코드는 모두 공개(LGPL)되어 있습니다. 자유롭게 사용하실 수 있습니다.
  • {% trans 'Open Alive' %} 서비스 개발자/운영자는 게시되는 글에 대한 권리를 일체 소유하지 않습니다.
  • -
  • 소스코드외에 축적된 데이터는 차후 여건이 되는대로 민감한 정보(회원정보 등)를 제외하고 다운로드 가능한 형태로 제공하겠습니다. (Data Liberation)

도움