-
Notifications
You must be signed in to change notification settings - Fork 9
Star追加仕様
Star
はGeneric Relationという仕組みで実装されている。
あるアプリケーションの、あるモデルに対してStarを付けるという実装。
前者をcontent_type、後者をobject_idと呼んでいる。
例えば
/api/stars?content_type=1&object_id=2
みたいなAPIに対してPOSTしてあげるとStarが付くという実装
{% get_star_endpoint %}
というtemplate_tagを実装したので、それを使うとあるオブジェクトにスターを付けるためのAPIエンドポイントが取得できます。
{% load stars_tags %}
{% get_star_endpoint object as endpoint %}
<form action="{{ endpoint }}" method="POST">
<input type="submit" value="スターを付ける">
</form>
エンドポイントに対してGETリクエストを送ると、そのオブジェクトに付いてるスターの一覧が返ってくる
2ndと違って、今回はユーザー名やユーザーアイコンも取得できるようになったので、はてなスターのように表示させたい。
- ユーザーのアイコンが並んで表示される
- マウスオーバーでユーザー名とquotesがあればquotesを表示させる
エンドポイントに対してPOSTを送るとスターが付けられる。このとき、quotesをdataとして与えると、スターに対してコメントを付加できる。
quotesはブラウザでユーザーが現在選択しているテキストをquotesに与える。
スターを追加して、201が帰ってきたら、動的にスター一覧にスターを追加してやる。
あるobjectにスターを付ける権限は
{% if user has_perm "stars.add_star" of object %}
でチェックできる。この場合はスターを付けるボタンを表示し、そうじゃない場合はボタンを表示しない。
{% if user has "stars.add_star" of object %}
スターつけれる
{% else %}
スターつけれない
{% endif %}
同様に{% if user has_perm "stars.delete_star" of object %}
でチェック可能。消す権限があるときはマウスオーバーで×ボタンを表示させ、×ボタンを押したときにエンドポイントにDELETE
を送る。
スターが消えたレスポンスが帰ってきたら、動的にスター一覧から削除する