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 details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

Details for the file the-social-network-0.0.7.tar.gz.

File metadata

  • Download URL: the-social-network-0.0.7.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.5 Linux/4.19.0-17-amd64

File hashes

Hashes for the-social-network-0.0.7.tar.gz
Algorithm Hash digest
SHA256 8db885ef304399edf614f86df3558e9203dbe5c44f51c1c4cf58d174b468aeb0
MD5 89b93074048f85e0c350731f501f3806
BLAKE2b-256 881cce1c98468edb8baf06fa2415c297e43c01a4636e5f518ce94231dd74d98c

See more details on using hashes here.

File details

Details for the file the_social_network-0.0.7-py3-none-any.whl.

File metadata

  • Download URL: the_social_network-0.0.7-py3-none-any.whl
  • Upload date:
  • Size: 28.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.5 Linux/4.19.0-17-amd64

File hashes

Hashes for the_social_network-0.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 53bcc5d6df7b324997e001e3ecb9c55b9ba8b55780f94726a741e7911efe39fe
MD5 888c7038eaac32aa6e735983e295fd28
BLAKE2b-256 05be43ad7dd926961834aead28cc17550132f0e920459aebbbc1b5f504f2e691

See more details on using hashes here.

Supported by

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