Skip to content
This repository has been archived by the owner on Jun 29, 2020. It is now read-only.

Star追加仕様

Λlisue edited this page Jul 6, 2014 · 3 revisions

基礎知識

StarはGeneric Relationという仕組みで実装されている。

あるアプリケーションの、あるモデルに対してStarを付けるという実装。

前者をcontent_type、後者をobject_idと呼んでいる。

例えば

/api/stars?content_type=1&object_id=2

みたいなAPIに対してPOSTしてあげるとStarが付くという実装

あるオブジェクトに対するAPIエンドポイントを取得する

{% 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を送る。

スターが消えたレスポンスが帰ってきたら、動的にスター一覧から削除する