Qweasy is a Python Django DRF-based application designed to streamline the process of creating and managing quizzes within organizations. It empowers employers, educators, or examiners to efficiently assess their employees, interns, or participants through well-structured quizzes. Qweasy simplifies the quiz creation process, offers diverse question types, allows for effective filtering, and ensures a seamless user experience for test-takers.
Qweasy serves as a comprehensive quiz management solution tailored for organizational use. Its primary purpose is to provide a user-friendly platform where administrators can design quizzes, while participants can take tests with ease. The application aims to bridge the gap between examiners and examinees, enabling efficient assessment and evaluation within an organization.
-
Question Creation: Examiners can create a variety of questions, including single-choice, multiple-choice, and open-ended questions. Each question can have one or more correct answers.
-
Question Management: Examiners can categorize questions by difficulty, category, and type. They can also mark questions as favorites for quick access.
-
Quiz Generation: Examiners can create quizzes by selecting questions from their repository. This allows for customization based on desired difficulty, category, and question type.
-
Test Distribution: Upon quiz creation, a unique link is generated. Examiners can share this link with participants by email, enabling them to take the test.
-
Test Submission and Review: After participants complete the quiz and submit their answers, the responses are saved for later review and assessment.
Qweasy utilizes a powerful stack of technologies to ensure a robust and streamlined experience for users:
- Python Django and Django REST Framework: Qweasy leverages the Django framework for building a solid backend foundation. The Django REST Framework enhances API development, allowing for efficient creation of RESTful APIs.
-
JWT Tokens: JSON Web Tokens are employed to ensure secure authentication and authorization mechanisms. This helps in maintaining user sessions and controlling access to various parts of the application.
-
Google OAuth2: Qweasy integrates Google OAuth2 for user authentication. This simplifies the registration and login process by allowing users to use their Google accounts.
- Docker: The application is containerized using Docker. This approach provides consistency across different environments and simplifies the deployment process.
- Git: Git is used for version control, enabling efficient collaboration among developers. It helps manage code changes, track history, and merge contributions seamlessly.
- Celery with Redis as Broker: To handle asynchronous tasks efficiently, Qweasy utilizes Celery with Redis as the message broker. This ensures tasks like email notifications or data processing can be executed in the background without affecting the user experience.
To run Qweasy on your local environment using Docker, follow these steps:
-
Open your terminal and execute the following command to Clone the repository from Github.
git clone https://github.com/nikazkr/qweasy.git
-
- Create a .env file in the project root directory following the structure provided in the .env.sample file, located in the project's main folder.
- This sample file contains placeholders for the variables that need to be defined.
- provide appropriate values for each variable according to your project's needs.
-
Build and start the Docker containers:
docker-compose up --build
-
Access the application in your web browser:
http://localhost/
-
Access Swagger:
http://localhost/docs
-
To stop the Docker containers:
docker-compose down
Qweasy provides a comprehensive API for managing quizzes and users. Here's a brief overview of the available API endpoints:
- Register User:
POST /users/register/
- Login User:
POST /users/login/
- Refresh Token:
POST /users/token/refresh/
- Get User Info:
GET /users/user/
- Update User Profile:
PUT/PATCH /users/user/
- Update User Avatar:
POST /users/profile/avatar/
- Login with Google:
POST /users/login/google/
- Change User Status:
POST /users/admin/status-change/<int:user_id>/
- Resend Status Change:
POST /users/resend-status-change/
- List Categories:
GET /categories/
- Create Category:
POST /categories/
- Retrieve Category Detail:
GET /categories/<int:pk>/
- Create Question:
POST /question/create/
- Select Question:
GET /question/
- Retrieve Question Detail:
GET /question/<int:pk>/
- Favorite Question:
POST /question/<int:pk>/favorite/
- Create Quiz:
POST /quiz/create/
- Retrieve Quiz Detail by Unique Link:
GET /quiz/<str:quiz_unique_link>/
- Update/Delete Quiz:
PUT/PATCH/DELETE /quiz/<int:pk>
- List Quizzes:
GET /quiz/
- Submit Quiz Results:
POST /quiz/submit
- Review Open-Ended Quiz:
POST /quiz/open-ended-review
- List User Results:
GET /quiz/user-results/<int:user_id>/
- View User Result Detail:
GET /quiz/user-result/<int:id>/
- Send Quiz URL by Email:
POST /quiz/send-email/
For detailed information about each API endpoint, request/response formats, and authentication, please refer to the Ararsebuli Linki.
If you have any questions or need assistance, you can reach out to me at:
- Email: [email protected]
- GitHub: @nikazkr
I would like to extend my gratitude to the following resources and libraries that have been instrumental in the development of Qweasy:
- Django: https://www.djangoproject.com/
- Django REST framework: https://www.django-rest-framework.org/
- Docker: https://www.docker.com/
Special thanks to the open-source community for their valuable contributions.
Qweasy is released under the MIT License.