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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters