django-ok-likes
is a liking app for Django, which allows users "like" and "unlike" any model instance. All functionality provides through django-rest-framework API views. Template tags and jinja's global functions provide the ability to see who liked an object, which objects were liked by current user and count of likes for a given object.
Install with pip:
pip install django-ok-likes
Update INSTALLED_APPS:
INSTALLED_APPS = [
...
'likes',
'rest_framework',
...
]
Make migrations:
python manage.py migrate
Add likes.api.urls
to your project urlpatterns:
urlpatterns = [
...
path('api/v1/', include('likes.api.urls')),
...
]
Add the models that you want to like to LIKES_MODELS in your settings file:
LIKES_MODELS = {
"app.Model": {
'serializer': 'app.api.serializer.YourModelSerializer'
},
}
You can set any pagination class for ListAPIView:
LIKES_REST_PAGINATION_CLASS = 'core.api.pagination.MyResponsePagination'
/api/v1/likes/list/
- List API View to return all likes for authenticated user.You can set
serializer
for each model inLIKES_MODELS
setting to use it for content object serialization, otherwise, you will get an id of content object.For example:
LIKE_MODELS = { "article.Article": { "serializer": "article.api.serializers.ArticleSerializer" }, }
Use
GET
parametersearch
to filter by a content type's model: /api/v1/likes/list/?search=article/api/v1/likes/count/
- API View to return count of likes for authenticated user.Possible GET parameters:
{ "type": "app_label.model", }
/api/v1/likes/is/
- API View to return list of objects ids, which are liked by authenticated user. As result, you will get a list ofids
.Possible GET parameters:
{ "type": "app_label.model", }
Possible result:
{ "ids": [1, 2, 3] }
/api/v1/likes/toggle/
- API View to like-unlike a given object by authenticated user.Possible payload:
{ "type": "app_label.model", "id": 1 }
Possible result:
{ "is_liked": true }
Returns a count of likes for a given object:
{{ object|likes_count }}
Returns a queryset of users, who liked a given object:
{% who_liked object as fans %}
{% for user in fans %}
<div class="like">{{ user.get_full_name }} likes {{ object }}</div>
{% endfor %}
Returns a queryset of likes for a given user:
{% likes request.user as user_likes %}
{% for like in user_likes %}
<div>{{ like }}</div>
{% endfor %}
Returns a bool value, which says is a given object liked by a given user:
{% is_liked object request.user as liked %}
The same as the likes_count
filter.
Usage:
{{ get_likes_count(object) }}
The same as the who_liked
tag.
Usage:
{{ get_who_liked(object) }}
The same as the likes
tag.
Usage:
{{ get_likes(request.user) }}
The same as the is_liked
tag.
Usage:
{{ get_is_liked(object, request.user) }}
A signal, which sents immediately after the object was liked and provides the single kwarg of created Like instance.
A signal, which sents immediately after the object was unliked and provides the single kwarg of an object.