-
Notifications
You must be signed in to change notification settings - Fork 4
解決済み問題
Hiroki Nakayama edited this page Jul 7, 2015
·
16 revisions
また、解決が必須な問題に対しては、◎をつけた。
# ユーザ関連- ユーザについて持っている情報が少ない。現状、ユーザ登録する際には、メールアドレス、名前、パスワードしか必要ない。もっといろいろな情報を持っていていいのではないか。
- 使用するつもりがないのなら、最低限の情報でよい。
- ログインの期限設定がデフォルトのままで、非常に長い。
- set_secure_cookiesするときにexpires_dayを設定する。デフォルトでは、expires_day=30となっている。
- 入れないグループにもリンクを表示している。リンクではなく、ただの文字列にするべき。あるいは、そもそも表示しない。
- 入れないグループはリンクとして表示しないようにした
- グループを作成する際の情報はグループ名と公開/非公開だけでいいのか
- coplaを参考に、グループを作成する際の入力項目について調べる
- Coplaでは、グループ作成時の項目に、名前、画像、公開/非公開、一言説明、メンバーの追加がある。
- Coplaでは自分の参加コミュニティが左側、最近の人気記事やGoodが多く押された記事が右側にある。 マイページでは、名前、投稿件数、利用日数、メールアドレス、所属などが表示されている。また、自己紹介を書くことができる。 そのほかには、サイドメニューからプロフィール画像、パスワードの変更、通知などをみることができる。
- 部屋名検索が全然正しくない
- 犬と検索しても、犬を含まない部屋も検索される
- RoomsHandlerで検索するときに、Roomを渡すべきところで、Groupを渡していた。
- 権限がガバガバ
- 存在しないグループの存在しない部屋でブレストをできてしまう
- 存在するグループの存在しない部屋でブレストをできてしまう
- 存在しないグループそのものにはアクセスはできない
- 存在しないグループの部屋一覧にもアクセスできない
- RoomHandler内でgroup_idとroom_idの存在をチェック。存在しなかったらHttp404を返す。
- check_group_permissionというデコレータを作って解決。
- ただし、自分が権限のないグループに入ろうとするとエラーが出るので、要対処。
- 以下の方法で解決した
- https://github.com/tornadoweb/tornado/issues/1315
- 入れないときは、その理由を表示する。
- Coplaは、「この操作は許可されていません。\n[クリックでメッセージを消去]」と出して、マイページに飛ばす。 あとは、自分が入れないグループはそもそもリンクにしない。
- 部屋の作成項目がおかしい。公開に関する情報を使用していない。
- 完全に項目をなくす。
- DBの扱いが非常に面倒くさい。セッションオブジェクトをモデルオブジェクトの後ろに隠ぺいすることができないか。Djangoっぽく扱いたい。
HandlerからModelにコードを移した。
- ユーザ名検索のときに、大文字と小文字を区別している。
- 解決方法はおそらく2つ。SQLAlchemyにやらせるか、自分で判定するか。自分で行うときには、アルファベット以外の文字(漢字、ひらがな、カタカナ、etc)では変換の際にバグを入れ込みやすいところなので気を付ける。
- 検索するときにlikeを使うのをやめて、ilikeを使うようにした
- http://stackoverflow.com/questions/16573095/case-insensitive-flask-sqlalchemy-query
- グループを削除したときに、部屋が削除されずに、DBに残り続ける。容量の無駄。
- グループを削除するときに、グループ内の部屋をすべて削除するようにする。手動で行うと、テーブルのつながりが増えたときに面倒なことになるので、SQLAlchemyの機能として提供されていないかを調べる。以下のCascadeというものが参考になりそうだ。
- http://docs.sqlalchemy.org/en/rel_0_9/orm/cascades.html
思考支援機能や、ブレストのテーマをどこに表示するか
ブレストのテーマは左上、思考支援機能は左下に表示することにした。
# UI/UX関連- デザインがシンプルすぎる。表示項目が少ない
- 類似のサービスを参考に、表示項目を洗い出す。
- デザインについては、Bootstrapを使用しているので、Bootstrapのテンプレートを適用する。
- ajaxを使ってdeleteやputを送信する。
- http://stackoverflow.com/questions/2153917/how-to-send-a-put-delete-request-in-jquery
- ajaxを使って、post, delete, putを送信する際に、xsrf tokenを含める方法
- https://books.google.co.jp/books?id=B-krWzb6KMQC&pg=PA97&lpg=PA97&dq=document.cookie.match+xsrf&source=bl&ots=3F_g4Zdece&sig=9Y_CGWFhqP-rsZLAgw0M7Exfs9E&hl=ja&sa=X&ei=um6LVY6tDcyF8gXTwpiABA&ved=0CEcQ6AEwBQ#v=onepage&q=document.cookie.match%20xsrf&f=false
- ボタンがクリックされたときに、フォームからデータを取得し送信するための参考
- https://laracasts.com/discuss/channels/general-discussion/how-to-implement-ajax-in-put-and-delete-method
- http://www.tohoho-web.com/js/form.htm
- ネストしたTornadoのテンプレートに変数を渡せない
- includeではなくUI Moduleを使用する。 ** http://stackoverflow.com/questions/7381071/inherited-python-vars-in-nested-tornado-templates
- HTMLの中にjavascriptのコードが混じっていて汚い。
- includeやmoduleを使って分離する。
- フォームを直に書いている。また、入力内容のvalidationを行っていない。
- フォームオブジェクトを作成し、それをもとにvalidationを行う。
- ライブラリとしては、tornado-wtformsとwtformsの組み合わせが選択肢。
- あるいは、Tornadoの機能であるModuleとして分離。validationの問題を考えると、wtformsを使用したほうがよいか。
- wtforms-tornadoとwtforms-alchemyを連携し、モデルからフォームを作成して、その内容をテンプレートに渡した。それにより、フォームを直に書かずに済むようになった。また、validationを行うこともできるようになった。