django-friendship provides an easy extensible interface for following and friendship
Project description
django-friendship
This application enables you to create and manage follows, blocks and bi-directional friendships between users. It features:
- Friendship request objects that can be accepted, rejected, canceled, or marked as viewed.
- Hooks to easily list all friend requests sent or received by a given user, filtered by the status of the request.
- A blocklist for each user of users they've blocked.
- Tags to include information about friendships, blocks and follows in your templates.
- Integration with
AUTH_USER_MODEL
. - Validation to prevent common mistakes.
- Faster server response time through caching
Requirements
** Django 3.2 since v1.9.1 **
Previously: Django 1.11+ since v1.7.0 (latest release supporting Django 1.10 is v1.6.0)
Installation
pip install django-friendship
- add
"friendship"
toINSTALLED_APPS
and runpython manage.py migrate
. - Use the friendship manager in your own views, or wire up the URLconf to include the builtin views:
urlpatterns = [
...
path('friendship/', include('friendship.urls'))
...
]
Note: If you are migrating from django-friendship v1.6.x
, you'll need to rollback your migrations and fake
migration 0002
$ ./manage.py migrate friendship 0001
$ ./manage.py migrate friendship 0002 --fake
If you're migrating from v1.7.x
, you'll likely have to fake 0003
as well:
$ ./manage.py migrate friendship 0003 --fake
Usage
django-friendship
provides a free API that gives you several ways to create and manage friendship requests or follows in your views. Add the following at the top of your views.py
:
from django.contrib.auth.models import User
from friendship.models import Friend, Follow, Block
Getting Data about Friendships
- List all of a user's friends:
Friend.objects.friends(request.user)
- List all unread friendship requests:
Friend.objects.unread_requests(user=request.user)
- List all unrejected friendship requests:
Friend.objects.unrejected_requests(user=request.user)
- Count of all unrejected friendship requests:
Friend.objects.unrejected_request_count(user=request.user)
- List all rejected friendship requests:
Friend.objects.rejected_requests(user=request.user)
- Count of all rejected friendship requests:
Friend.objects.rejected_request_count(user=request.user)
- List of all sent friendship requests:
Friend.objects.sent_requests(user=request.user)
- Test if two users are friends:
Friend.objects.are_friends(request.user, other_user) == True
Getting Data about Follows
- List of a user's followers:
Follow.objects.followers(request.user)
- List of who a user is following:
Follow.objects.following(request.user)
Getting Data about Blocks
- List of a user's blockers:
Block.objects.blocked(request.user)
- List of who a user is blocking:
Block.objects.blocking(request.user)
- Test if a user is blocked:
Block.objects.is_blocked(request.user, other_user) == True
Managing Friendships and Follows
Create a friendship request:
other_user = User.objects.get(pk=1)
Friend.objects.add_friend(
request.user, # The sender
other_user, # The recipient
message='Hi! I would like to add you') # This message is optional
Let the user who received the request respond:
from friendship.models import FriendshipRequest
friend_request = FriendshipRequest.objects.get(from_user=request.user, to_user=other_user)
friend_request.accept()
# or friend_request.reject()
To remove the friendship relationship between request.user
and other_user
, do the following:
Friend.objects.remove_friend(request.user, other_user)
Make request.user a follower of other_user:
Follow.objects.add_follower(request.user, other_user)
Make request.user block other_user:
Block.objects.add_block(request.user, other_user)
Make request.user unblock other_user:
Block.objects.remove_block(request.user, other_user)
Templates
You can use django-friendship
tags in your templates. First enter:
{% load friendshiptags %}
Then use any of the following:
{% friends request.user %}
{% followers request.user %}
{% following request.user %}
{% friend_requests request.user %}
{% blockers request.user %}
{% blocking request.user %}
Signals
django-friendship
emits the following signals:
- friendship_request_created
- friendship_request_rejected
- friendship_request_canceled
- friendship_request_accepted
- friendship_removed
- follower_created
- following_created
- follower_removed
- following_removed
- block_created
- block_removed
Contributing
Development takes place on GitHub. Bug reports, patches, and fixes are always welcome!
Need help?
REVSYS can help with your Python, Django, and infrastructure projects. If you have a question about this project, please open a GitHub issue. If you love us and want to keep track of our goings-on, here's where you can find us online:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django_friendship-1.9.6.tar.gz
.
File metadata
- Download URL: django_friendship-1.9.6.tar.gz
- Upload date:
- Size: 21.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b598c11deff804d05da32d6c9a5b5c3b215501c66fc7a3484281fb368eea27eb |
|
MD5 | 9e6f6e383c9e40a046e0b5ef0386e14d |
|
BLAKE2b-256 | 2daf2b58320c47e1cc99d45b73915c818206cb669e55a8bc4de3d1ff73a74a3d |
File details
Details for the file django_friendship-1.9.6-py2.py3-none-any.whl
.
File metadata
- Download URL: django_friendship-1.9.6-py2.py3-none-any.whl
- Upload date:
- Size: 35.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.10.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.3 CPython/3.10.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | babc1ef3c9775fbf8281ea70f74396ea6fff919b311b7be25001dbbcbcd91219 |
|
MD5 | 1be2a40aa89b174a7f6aea19ea33cb2c |
|
BLAKE2b-256 | caa0a7dbdeb2d4ad9b28e81f6947bb55602d60013a89b92cc56f4cb4e126c87b |