VideoShare is a videosharing site that allowes users to share video, and interact with the video. VideoShare was built using Django as a backend and JavaScript the frontend.
- VideoShare uses NodeJs and Vite
- Use of Class Based Views
- Use of Django built-in auth views
- Use of 6 different models
- Use of django built-in forms to supplement my own
- Use of python-ffmpeg to generate video thumbnail
- Use of django file upload storage method
Here, I'll provide an overview of the main files and directories in the project and how they contribute to the functionality of VideoShare:
-
media/
: This directory is used to store user-uploaded media files, such as videos and images. -
project5/
: The root directory of the Django project. -
static/
: This directory contains static assets like JavaScript, CSS, and images.-
dist/
: Compiled and minified assets generated by Vite. -
src/
: The source directory for static assets.-
css/
: CSS files for styling the application. -
js/
: JavaScript files responsible for various functionalities:-
UserWatched.js
: Handles tracking user-watched videos. -
commentLike.js
: Manages user interactions with video comments. -
getCookie.js
: Utility for retrieving cookies in JavaScript. -
like.js
: Handles user likes on videos. -
main.js
: Main JavaScript file responsible for overall application behavior. -
myVideoEdit.js
: Supports editing user-uploaded videos. -
newComment.js
: Enables adding new comments to videos. -
uploader.js
: Manages video uploading functionality.
-
-
scss/
: SCSS files for styling the application using Sass.
-
-
-
templates/
: Contains HTML templates used by Django to render pages.- Various HTML templates like
history.html
,index.html
,layout.html
, and others, each representing different parts of the application's user interface.
- Various HTML templates like
-
videoshare/
: The main Django app for VideoShare.-
migrations/
: Contains database migration files. -
MyVideos.py
: Logic for managing user's own videos. -
admin.py
: Django admin configurations. -
apps.py
: Django app configuration. -
fileuploader.py
: Logic for handling file uploads. -
forms.py
: Django forms for user input. -
models.py
: Defines the database models for VideoShare. -
tests.py
: Unit tests for the app. -
urls.py
: URL routing for the app, mapping URLs to views. -
views.py
: Contains class-based views and functions that handle user interactions.
-
-
README.md
: Documentation providing an overview of the project, how to set it up, and its main features.
Install nodejs and python
git clone https://github.com/me50/ananito/blob/web50/projects/2020/x/capstone.git
cd capstone
pip install -r requirements.txt
mkdir media media/uploads/ media/uploads/images media/uploads/videos static/dist
npm install
npx vite
python manage.py makemigrations
python manage.py runserver
-
-
index(request)
: Renders the index page with a list of videos. -
register(request)
: Handles user registration. Allows users to create accounts. -
watch_view(request)
: Displays a video for viewing. -
like_dislike(request, action)
: Handles likes and dislikes for videos. -
update_views(request, video_id)
: Updates video views when a user watches a video. -
random_video(self)
: Redirects users to a random video. -
most_viewed_videos(request)
: Displays a list of videos sorted by the number of views. -
new_comment(request)
: Adds new comments to videos. -
CommentLikes(request)
: Handles likes on comments. -
history_view(request)
: Displays the user's video view history. -
getVideoInfo(request, video_id)
: Fetches video information. -
search_view(request)
: Displays search results for videos.
-
-
MyVideos
: Class based Viewpost(self, request)
: Update the details of a user's uploaded video.delete(self, request, video_id)
: Delete a user's uploaded video.get(self, request)
: View a list of videos uploaded by the logged-in user.
-
fileuploader
: Video Upload functionsget(self, request)
: Redirect to homepage.post(self, request)
: Upload a video along with title, description, thumbnail(optional), and privacy settings.generate_thumbnail(self, video)
: Generates a thumbnail image for the uploaded video at a random time within the video's duration.generate_video_id(self)
: Generates a unique video ID of length 8 using letters, digits, underscores, and hyphens. Returns a unique video ID that doesn't already exist in the database.is_valid_video_file(self, video)
: Checks if the uploaded video file is mp4 based on its content type.
The User
model extends Django's built-in AbstractUser
model, representing registered users of the application.
The VideoUpload
model represents uploaded videos and their associated details. Each video has the following attributes:
unique_id
: A unique UUID generated for each video.user
: A foreign key to the user who uploaded the video.title
: The title of the video.description
: The description of the video (optional).video
: The video file uploaded by the user.thumbnail
: An optional thumbnail image for the video.private
: A boolean field indicating whether the video is private.views
: The number of views the video has received.video_id
: A unique identifier for the video.date
: The timestamp when the video was uploaded.
The Like
model represents likes and dislikes for videos. Each like has the following attributes:
video
: A foreign key to the associated video.liked_by
: A ManyToMany field containing users who liked the video.disliked_by
: A ManyToMany field containing users who disliked the video.date
: The timestamp when the like was recorded.
The UserViewHistory
model tracks the viewing history of users. It has the following attributes:
user
: A foreign key to the user whose history is being tracked.videos
: A ManyToMany field containing videos viewed by the user.date
: The timestamp when the history entry was recorded.
The Comment
model represents comments made by users on videos. Each comment has the following attributes:
user
: A foreign key to the user who made the comment.comment
: The text of the comment.video
: A foreign key to the associated video.likes
: The number of likes received by the comment.created_at
: The timestamp when the comment was created.
The CommentLike
model tracks likes on comments. Each comment like has the following attributes:
comment
: A foreign key to the associated comment.user
: A ManyToMany field containing users who liked the comment.date
: The timestamp when the like was recorded.
The UserRegistrationForm
class is a custom form that extends Django's built-in UserCreationForm
. It provides a registration form for new users to sign up for the VideoShare platform. The form includes the following fields:
username
: The desired username for the user's account.first_name
: The user's first name.last_name
: The user's last name.email
: The user's email address.password1
: The user's desired password.password2
: The confirmation of the user's password.