Skip to main content

Basic social network core.

Project description

The Social Network

The package "The Social Network" is a django base backend core element for any possible social network you can think of. You can easily create clones for all popular social networks.

Installation

Minimum requierments are:

Python >= 3.9
Django >= 3.2.9
Pillow >= 8.4.0
djangorestframework >= 3.12.4

Intallation can be done by pip like

pip install the-social-network

or download manuel on Pypi.

How to use

If you not have already created a django python project, create it at first in a new directory with the command

django-admin startproject mysite

This will create a mysite directory in your current directory.

Open the mysite directory and open the settings.py. Add 'the_social_network' to INSTALLED_APPS and save the file.

Next open the urls.py and add the following lines to your urlpatterns

url(r'^authentication/', include('the_social_network.urls.authenticationUrls')),
url(r'^accounts/', include('the_social_network.urls.accountUrls')),
url(r'^search/', include('the_social_network.urls.searchUrls')),
url(r'^contents/', include('the_social_network.urls.contentUrls'))

Now everything is ready to run django with the-social-network. Create the database with

python manage.py migrate

and start the server with

python manage.py runserver

the default django information page should showup if you open http://127.0.0.1:8000/ in your browser.

Request API for the URLs

In all requests (except for the request of authentication/register/ or /authentication/login/) you need to send the authentification token inside the header. For authorization use the header name "Authorization" and the value "Token "

Authentication

POST url: ".../authentication/register/"

Register a user

Requestbody:

{  
    "username": "username",  
    "password": "password",  
    "email": "email"  
} 

Responsebody:

{  
    "token": "token"  
}  
POST url: ".../authentication/login/"

Login a user

Requestbody:

{  
    "username": "username",  
    "password": "password"  
}  

Responsebody:

{  
    "token": "token"  
}  
POST url: ".../authentication/logout/"

Logout a user

Requestbody: None
Responsebody: None
Success: HTTP/200

GET url: ".../authentication/validate/"

Validate a token

Requestbody: None
Responsebody: None
Success: HTTP/200

Account

GET url: ".../accounts/show/<user_id>/"

Show a public user

Requestbody: None
Responsebody:

[{  
    "user": {  
        "id": ...,  
        "username": ...,  
        "email": ...,  
        "date_joined": "..."  
    },  
    "image": "...",  
    "biography": "...",  
    "related_by": [],  
    "related_to": [],  
    "statements": []  
}]  
GET url: ".../accounts/show/own/"

Show the own user

Requestbody: None
Responsebody:

[{  
    "user": {  
        "id": ...,  
        "username": ...,  
        "email": ...,  
        "date_joined": "..."  
    },  
    "image": "...",  
    "biography": "...",  
    "related_by": [],  
    "related_to": [],  
    "statements": []  
}]  
GET url: ".../accounts/show/all/"

Show all public users

Requestbody: None
Responsebody:

[{  
    "user": {  
        "id": ...,  
        "username": ...,  
        "email": ...,  
        "date_joined": "..."  
    },  
    "image": "...",  
    "biography": "...",  
    "related_by": [],  
    "related_to": [],  
    "statements": []  
},  
...  
]  
PUT url: ".../accounts/update/"

Updates the own account. Only "Biography" and "Image" are allowed to be updated.

Requestbody:

{  
    "biography": "...",  
    "file": "..."  
}  

Responsebody: None
Success: HTTP/200

PUT url: ".../accounts/follow/<user_id>/"

Follow a user

Requestbody: None
Responsebody: None
Success: HTTP/200

PUT url: ".../accounts/unfollow/<user_id>/"

Unfollow a user

Requestbody: None
Responsebody: None
Success: HTTP/200

PUT url: ".../accounts/operation/add/statement/"

Add a statement to the own account

Requestbody:

{  
    "input": "<statement>"  
    "reactions": { "to": <reaction_to_a_statement_id>, "relation": <"attack" or "support">}   <--- optional  
}  

Responsebody:

{  
    "id": ...,  
    "author": {  
        "user": {  
            "id": ...,  
            "username": "..."  
        },  
        "image": "..."  
    },  
    "content": "...",  
    "tagged": [],  
    "mentioned": [],  
    "created": "...",  
    "relation_to_parent": ...  
}  

Success: HTTP/200

Contents

GET url: ".../contents/statements/get/<statement_id>/"

Get a statement

Requestbody: None
Responsebody:

[  
    {  
        "id": ...,  
        "author": {  
            "user": {  
                "id": ...,  
                "username": "..."  
            },  
            "image": "..."  
        },  
        "content": "...",  
        "tagged": [],  
        "mentioned": [],  
        "created": "...",  
        "relation_to_parent": ...,  
        "reactions": []  
    }  
]  
GET url: ".../contents/statements/with/hashtag/"

Get all statements with a hashtag

Requestbody: None
Queryparameters: "?q="
Responsebody:

[  
    {  
        "id": ...,  
        "author": {  
            "user": {  
                "id": ...,  
                "username": "..."  
            },  
            "image": "..."  
        },  
        "content": "...",  
        "tagged": [],  
        "mentioned": [],  
        "created": "...",  
        "relation_to_parent": ...,  
        "reactions": []  
    },  
    ...  
]  
GET url: ".../contents/statements/feed/"

Get all statements of the accounts that are followed by the user

Requestbody: None
Responsebody:

[  
    {  
        "id": ...,  
        "author": {  
            "user": {  
                "id": ...,  
                "username": "..."  
            },  
            "image": "..."  
        },  
        "content": "...",  
        "tagged": [],  
        "mentioned": [],  
        "created": "...",  
        "relation_to_parent": ...,  
        "reactions": []  
    },  
    ...  
]  
GET url: ".../contents/statements/feed/pagination"

Get statements of the accounts that are followed by the user

Requestbody: None
Queryparameters: "?page=<page_number>&size=<number_of_statements_per_page>" Responsebody:

{
    "total": ...,  
    "data": [  
        {  
            "id": ...,  
            "author": {  
                "user": {  
                    "id": ...,  
                    "username": "..."  
                },  
                "image": "..."  
            },  
            "content": "...",  
            "tagged": [],  
            "mentioned": [],  
            "created": "...",  
            "relation_to_parent": ...,  
            "reactions": []  
        },  
        ...  
    ]  
}  
GET url: ".../contents/trending/hashtag/"

Get all trending hashtags which are most used in statements

Requestbody: None
Reponsebody: ++++++ TODO: Setting of a hashtag not clear ++++++

Search

GET url: ".../search/"

Searchs for a user or hashtag

Requestbody: None
Queryparameters: "?q=<search_query>&filter=<"user" or "hashtag">"
Responsebody:

{  
    "accounts": [  
                    {  
                    "user": {  
                        "id": ...,  
                        "username": "...",  
                        },  
                    "image": "..."  
                    },  
                    ...  
    ],  
    "hashtags": [  
                    {  
                    "id": ...,  
                    "tag": "..."  
                    },  
                    ...  
    ]  
}  

Core Database structure

The project requieres the base authentication database structure from django and extends it with the following tables:

the_social_network_account

with  
user_id: int as primary key and foreign key to django auth_user  
image: varchar(100) -> default image is 'account/default/Argunaut.png', it's not inside the package and default path to store image is "account/images"
biography: varchar(1000)  

the_social_network_statement

with  
id: int as primary key  
author_id: int as foreign key to the_social_network_account  
content: varchar(120)  
created: datetime  

the_social_network_accounttagging

with  
id: int as primary key  
created: datetime  
account_id: int as foreign key to the_social_network_account  
statement_id: int as foreign key to the_social_network_statement  

the_social_network_hashtag

with  
id: int as primary key  
tag: varchar(30)  
created: datetime  

the_social_network_hashtagtagging

with  
id: int as primary key  
created: datetime  
hashtag_id: int as foreign key to the_social_network_hashtag  
statement_id: int as foreign key to the_social_network_statement  

the_social_network_reaction

with  
id: int as primary key  
created: datetime  
vote: small uint  
child_id: int as foreign key to the_social_network_statement  
parent_id: int as foreign key to the_social_network_statement  

the_social_network_relationship

with  
id: int as primary key  
created: datetime  
from_account_id: int as foreign key to the_social_network_account  
to_account_id: int as foreign key to the_social_network_account  

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

the-social-network-0.0.7.tar.gz (23.8 kB view hashes)

Uploaded Source

Built Distribution

the_social_network-0.0.7-py3-none-any.whl (28.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page