Imagine there was a place in which you could ask someone to fix your bidet and at the same time ask for a service to paint the walls of your house. And as you are at it, home cleaning would be quite handy. Well, in this project you will help to create a website in which all of this and more will be possible.
Imagine there was a place in which you could ask someone to fix your bidet and at the same time ask for a service to paint the walls of your house. And while you are at it, home cleaning would be quite handy. Well, in this project you will help create a website in which all of this and more will be possible.
The website is still in the creation process, so not all features are available. You are going to implement some of the missing features.
This website is still in the creation process, so not all features are available. You are going to implement some of the missing features.
You should also know that the website is being created in Django, a Python framework for web development. You can learn more about this framework in its own [website](https://www.djangoproject.com/). Yeah, you will be messing around with Python, so be aware of the indentation.
You should also know that the website is being created in Django, a Python framework for web development. You can learn more about this framework in its own [website](https://www.djangoproject.com/). Yes, you will be messing around with Python, so be aware of the indentation.
### Instructions
### Instructions
@ -15,7 +15,7 @@ The website should contain two types of users:
- Company: that can create new services
- Company: that can create new services
- Customer: that can request existing services
- Customer: that can request existing services
Both users should be able to register and login. In order to login, users should enter the email and the password to do so. However, to register each type of user has to provide different information:
Both users should be able to register and login. In order to login, users should enter the email and the password to do so. However, to register, each type of user has to provide different information:
- Customer:
- Customer:
- email
- email
@ -30,11 +30,11 @@ Both users should be able to register and login. In order to login, users should
- username
- username
- field of work
- field of work
> Each user should have a unique email and username. So while registering a user should be alerted if the email and/or username are already being used.
> Each user should have a unique email and username. So while registering a user should be alerted if the email and/or username has already been registered.
Every user should have his own profile page in which should be present their information (apart from the password, obviously) and, in case of a customer, all previous requested services. In case of a company profile, along with all their information, should also be present the services provided by it.
Every user should have his own profile page in which their information should be displayed (apart from the password, obviously). And, in case the user is a customer, all previous requested services have to be displayed as well. In case of a company profile, along with all their information, should also be present the services it provides.
The field of work in the companies will restrict the kind of services it can provide. The field of work should only accept these values:
The `field of work` attribute in the companies will restrict the kind of services it can provide. The `field of work` attribute should only accept these values:
- Air Conditioner
- Air Conditioner
- All in One
- All in One
@ -42,14 +42,14 @@ The field of work in the companies will restrict the kind of services it can pro
- Electricity
- Electricity
- Gardening
- Gardening
- Home Machines
- Home Machines
- House Keeping
- Housekeeping
- Interior Design
- Interior Design
- Locks
- Locks
- Painting
- Painting
- Plumbing
- Plumbing
- Water Heaters
- Water Heaters
A `Carpentry` company can only create carpentry services as a `House Keeping` company can only provide house keeping services. However, the `All in One` companies can create any kind of service. But what does a service include? A service must have:
A `Carpentry` company can only create carpentry services as a `Housekeeping` company can only provide housekeeping services. However, the `All in One` companies can create any kind of services. But what does a service include? A service must have:
- name
- name
- description
- description
@ -57,17 +57,17 @@ A `Carpentry` company can only create carpentry services as a `House Keeping` co
- price per hour
- price per hour
- date it was created (this attribute should automatically take a value when creating a service)
- date it was created (this attribute should automatically take a value when creating a service)
The website should have a page displaying the most requested services. There also should be a page showing every service in creation order (last created first) and a page for every service category, that displays the services available for that category.
The website should have a page displaying the most requested services. There should also be a page showing every service in creation order (last created first) and a page for every service category, which displays the services available for that category.
Every service should have its own page, in which should be displayed the above information and also the company name that provides this service. A user should be able to check every service from that company by clicking on the name displayed and seeing the company profile.
Every service should have its own page, in which should be displayed the above information and also the company name that provides this service. A user should be able to check every service from that company by clicking on the name displayed and seeing the company profile.
Once a service is created by a company, every user has access to it. Only customers can request a service by providing the `address` where the service is required and the `service time` (in hours) it is needed for the service to be completed. Once a customer requires a service, it gets added to the list of previously requested services. In this list, for each service requested, the customer can see the service name, service field, calculated service cost, the date in which the service was requested and the company who provided the service.
Once a service is created by a company, every user has access to it. Only customers can request a service by providing the `address` where the service is required and the `service time` (in hours) needed for the service to be completed. Once a customer requires a service, it gets added to the list of previously requested services. In this list, for each service requested, the customer can see the service name, service field, calculated service cost, the date in which the service was requested and the company who provided the service.
You can check out this [video](https://youtu.be/GyRo3CUWQzE) to see what is expected from your project.
You can check out this [video](https://youtu.be/GyRo3CUWQzE) to see what is expected from your project.
#### Django
#### Django
Now, that you know what the project is about, we should explain to you the file system. A Django project is organized by a main folder of the project and different apps.
Now, that you know what the project is about, we will explain you the file system architecture. A Django project is organized by a main folder of the project and different apps.
When starting a new Django project (with the command `django-admin startproject <// name of project \\>`), the main folder (that has the same name of the project) and a file called `manage.py` get created. This file is used to run various commands. The most common ones are:
When starting a new Django project (with the command `django-admin startproject <// name of project \\>`), the main folder (that has the same name of the project) and a file called `manage.py` get created. This file is used to run various commands. The most common ones are:
@ -77,12 +77,12 @@ When starting a new Django project (with the command `django-admin startproject
- `python3 manage.py createsuperuser` -> creates a super user (admin) that can access and change information in the Django database (accessible in the url `localhost:8000/admin`).
- `python3 manage.py createsuperuser` -> creates a super user (admin) that can access and change information in the Django database (accessible in the url `localhost:8000/admin`).
- `python3 manage.py` -> to get a list of all the commands available.
- `python3 manage.py` -> to get a list of all the commands available.
> You may note that we use the command `python3`. You could simply use the command `python` but check if you have the 3.0 version or higher installed.
> You may note that we use the command `python3`. You could simply use the command `python` but you must have the 3.0 version or higher installed.
Each app usually is linked to a different aspect of the project. For example, in this project, there are three apps:
Each app usually is linked to a different aspect of the project. For example, in this project, there are three apps:
- services: handles the essential stuff related to services (service creation, services display, service request ...)
- services: handles the essential features related to services (service creation, services display, service request ...)
- users: handles the essential stuff related to the users (user registration, user profile, user login ...)
- users: handles the essential features related to the users (user registration, user profile, user login ...)
- main: handles the information that is common in all the project (home page, navigation bar, logout page ...)
- main: handles the information that is common in all the project (home page, navigation bar, logout page ...)
By default, when starting an app, Django creates several files that are very useful to the development of a website. The ones in which we spend more time in are:
By default, when starting an app, Django creates several files that are very useful to the development of a website. The ones in which we spend more time in are:
@ -92,7 +92,7 @@ By default, when starting an app, Django creates several files that are very use
In addition to these two files, as a rule of thumb other files are manually created:
In addition to these two files, as a rule of thumb other files are manually created:
- `urls.py` -> here you can specify the urls of your project and associate them to a view (from the `views.py` file), in order to display a web page. For example, to the url `profile/` is associated the view `views.ProfileView`)
- `urls.py` -> here you can specify the urls of your project and associate them to a view (from the `views.py` file), in order to display a web page. For example, the url `profile/` is associated to the view `views.ProfileView`)
- `forms.py` -> here you can create your forms to use in your `views.py` file. For example, you can create a default login form to use in the `LoginView` (present in the `views.py` file).
- `forms.py` -> here you can create your forms to use in your `views.py` file. For example, you can create a default login form to use in the `LoginView` (present in the `views.py` file).
Usually we also create a folder where we can store templates (in HTML). This folder usually follows the following structure:
Usually we also create a folder where we can store templates (in HTML). This folder usually follows the following structure:
@ -115,7 +115,7 @@ netfix/ # project directory
You will also use what it is known as `Django templates`, which is used inside of HTML files. It is a way of coding inside of HTML, allowing to go through objects passed in (for loop) or even make conditional verifications (if/else statement), amongst other cool stuff. To learn more about it, you can check the [Django templates documentation](https://docs.djangoproject.com/en/3.1/topics/templates/).
You will also use what it is known as `Django templates`, which is used inside of HTML files. It is a way of coding inside of HTML, allowing to go through objects passed in (for loop) or even make conditional verifications (if/else statement), amongst other cool stuff. To learn more about it, you can check the [Django templates documentation](https://docs.djangoproject.com/en/3.1/topics/templates/).
You can get the code which is already done [here](https://assets.01-edu.org/netfix/netfix.zip). You may see that there are some code missing, both in HTML and Python files. Your job is to complete it so that the website works as explained above.
You can get the code which is already done [here](https://assets.01-edu.org/netfix/netfix.zip). You may see that there are some code missing, both in HTML and Python files. Your task is to complete it so that the website works as explained above.
A css file is already provided (in the path `netfix/static/css/style.css`), but do feel free to change it up and come up with your own design for your site. This also means that you can change the HTML already provided.
A css file is already provided (in the path `netfix/static/css/style.css`), but do feel free to change it up and come up with your own design for your site. This also means that you can change the HTML already provided.
###### Are you able to register two different types of users (Customers and Companys)?
##### Register a new Customer.
##### Register a new Customer.
###### When registering a Customer, is it asked for a username, an email, a password, a password confirmation and a date of birth?
###### When registering a Customer, does the website request a username, an email, a password, a password confirmation and a date of birth?
##### Register a new electricity Company.
##### Register a new electricity Company.
###### When registering a Company, is it asked for a username, an email, a password, a password confirmation and a field of work?
###### When registering a Company, does the website request a username, an email, a password, a password confirmation and a field of work?
###### Is the field of work restricted in a way that it only accepts one of the following values: Air Conditioner, All in One, Carpentry, Electricity, Gardening, Home Machines, Housekeeping, Interior Design, Locks, Painting, Plumbing, Water Heaters?
###### Is the field of work restricted, so that it only accepts one of the following values: Air Conditioner, All in One, Carpentry, Electricity, Gardening, Home Machines, House Keeping, Interior Design, Locks, Painting, Plumbing, Water Heaters?
###### Are you able to register two different types of users (Customers and Companies)?
##### Try to register a new user (Customer or Company) and use a username that already exists.
##### Try to register a new user (Customer or Company) and use a username that already exists.
###### Were you warned that already exists a user with that username?
###### Were you warned that a user with that username already exists?
##### Try to register a new user (Customer or Company) and use an email that already exists.
##### Try to register a new user (Customer or Company) and use an email that already exists.
###### Were you warned that already exists a user with that email?
###### Were you warned that a user with that email already exists?
##### After registering and being logged in with a Company go to the profile page.
##### After registering and logging in with a Company profile, navigate to the profile page.
###### Is all its information available (apart from the password)?
###### Is all its information available (apart from the password)?
##### While logged in with the electricity Company, create a new service with a price per hour of 10.50.
##### While logged in with the electricity Company, create a new service with a price per hour of 10.50.
###### Were you asked for a name, a description a price and a field?
###### Were you asked for a name, a description, a price and a field?
##### Go to the user (Company) profile.
##### Naviagate to the user (Company) profile.
###### Did the service created before appears in the company page as an available service?
###### Did the service created before, appears in the company page as an available service?
###### Is there a page showing every service created by every companies?
###### Is there a page showing every service created by every company?
###### Is there a page for every type of service which displays every service of that type?
###### Is there a page for every type of service which displays every service of that type?
###### Does a service have its own page, where it gets displayed its information (name, description, field, price per hour and date it was created) along with the name of the company that created it?
###### Does a service have its own page, where its information gets displayed (name, description, field, price per hour and date it was created) along with the name of the company which created it?
##### Logout with the Company and after registering and being logged in with a Customer go to the profile page.
##### Logout from the Company profile and after registering and being logged in with a Customer account, navigate to the profile page.
###### Is all his information available (apart from the password)?
###### Is all his or her information available (apart from the password)?
##### Go to the previous created service and request it with 2 hours of service.
##### Go to the previous created service and request it with a 2 hours interval.
###### Were you asked for an address and a service time (in hours) it is needed for the service to be completed?
###### Were you asked for an address and a service time (in hours)?
###### Go to the user (Customer) profile.
##### Go to the user (Customer) profile.
###### Did the service requested before appears in the customer page as a previously requested service?
###### Does the service requested before, appears in the customer page as a previously requested service?
###### Does the service requested appear with the price of 21.00 (2 hours \* 10.50)?
###### Does the service requested appear with the price of 21.00 (2 hours \* 10.50)?
###### Is there a page showing the most requested services from the whole website?
###### Is there a page showing the most requested services from the whole website?
##### Logout and register a new All in One Company and go to the service creation page.
##### Logout and register a new All in One Company and navigate to the service creation page.
###### Can you choose between all of the types of service for this new service?
###### Can you choose between all of the types of service for this new service?
##### Create a new Painting service. Logout with the Company and login with a Customer. Request two times that same service and go to the most requested services page.
##### Create a new Painting service. Logout from the Company and login with a Customer. Request two times that same service and go to the most requested services page.
###### Is the list of most requested services updated with this new service?
###### Is the list of most requested services updated with this new service?
@ -68,6 +68,6 @@
###### +Is there a page system in the service list page?
###### +Is there a page system in the service list page?
###### +Are there any other bonus implemented?
###### +Are there any other bonuses implemented?
###### +Did the student implemented its own display and design?
###### +Did the student implement its own display and design?