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)  
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.6.tar.gz (35.3 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.6-py3-none-any.whl (39.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: the-social-network-0.0.6.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.5 Linux/5.10.0-9-amd64

File hashes

Hashes for the-social-network-0.0.6.tar.gz
Algorithm Hash digest
SHA256 a23bf37af4eb95a5522d43e33f03a556acdbc3365c73590c2b05ba7d7f4dfc80
MD5 ea73fd5b6036c325eb89f7c1009aa7c9
BLAKE2b-256 387eae4aeb29180680896a2726b9af489229026a2e7ccbc5120ef0ac5205a2ba

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for the_social_network-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 e7de3bac65876cdc04f6e39507dcb48d65b1749a70d5c527bc90b60d63469930
MD5 7b7a35d0d55201e3ae5c446c78b90bec
BLAKE2b-256 118ada1508ccc96bbf6f8c8fd2c87acd7bb9a47b46ae340a958468600c70db21

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