Duke ECE 568: Engineering Robust Server Software HW1. It can be used as a template for Django web project.
Note: Looking back a year later, the front-end code was scribbled to death, meaningless copy and paste rather than extracting shared components. Therefore this project is for UI presentation only.
β³ This web-app assembles Uber, which lets users request, drive for, and join rides. It has three roles: Passenger, Driver, and Manager. The functionalities include:
- Create Account
- Login/Logout
- Driver Registration
- Ride Selection
- Ride Requesting
- Ride Request Editing (Owner)
- Ride Request Viewing (Owner / Sharer)
- Ride Status Viewing (Driver)
- Ride Searching (Driver)
- Ride Searching (Sharer) (β Not yet implemented!)
- And some other unlist features...
π See all Demos here.
π« This is my first Django project, and just for learning purpose, I did not correctly use the Django Authentication feature. I store all passwords in PLAIN TEXT. Please fix it yourself in world/models.py:
user = self.model(
email=MyCustomUserManager.normalize_email(email_id),
...
password=password,
...
)Install following packages and dependencies in order:
sudo apt-get install gcc g++ make valgrind
sudo apt-get install emacs screen
sudo apt-get install postgresql
sudo apt-get install python python3-pip
sudo apt-get install libpq-dev
sudo pip3 install django psycopg2 Test your Django version:
$ django-admin --version
4.1.5You need Django>4.0 for some new features in Django. Then install these libraries:
sudo apt-get install libssl-dev libxerces-c-dev libpqxx-dev
sudo apt-get install manpages-posix-dev
pip3 install django-livereloadGit clone my repository:
git clone https://github.com/0HugoHu/Django-Web-App.gitInstall all project-specific requirements:
cd Django-web-app/
pip3 install -r requirements.txtSetup your local postgresql database:
sudo su - postgres
psqlCreate a user, for convenience, I suggest you to choose the name of your linux logged-in username (e.g., abc@dce:~$: then choose abc as your name):
CREATE USER abc;
ALTER USER abc CREATEDB WITH PASSWORD '$PWD'; ## replace $PWD with your password
-- exit postgres (by pressing Ctrl+D)
-- exit the su'ed shellcreatedb $nameOfDB # replace $nameOfDB with a meaningful name for your projectEdit project setting file:
cd ridesharing
emacs settings.py # or use any editor you wantIf you want to use docker and deploy this project on web services (e.g., AWS EC2 or AWS ECR), add '*' to allow all hosts:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '*',]Change your default database to postgresql:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': '$nameOfDB',
'USER': '$USER',
'PASSWORD': '$PWD',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
# replace $nameOfDB with your database name,
# $USER with your username,
# and $PWD with your passwordChange your timezone if you are not in Eastern Standard Time:
TIME_ZONE = 'America/New_York'Configure email sending service API. I'm using the SendGrid API: SendGrid.com
You must first register your personal information on that website, and bind your sender email address. Then use the API Key generator to get your own $KEY. This step is very time-consuming, please refer to other tutorials for help.
SENDGRID_API_KEY = '$KEY'
EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey' # this is exactly the value 'apikey'
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
EMAIL_PORT = 587
EMAIL_USE_TLS = TrueAdd your sender email address:
# The email you'll be sending emails from
DEFAULT_FROM_EMAIL = '$EMAIL'
# replace $EMAIL with your registered and confirmed email addressDjango will automatically create the new table for you based on the world/models.py file. Apply this creation by:
python3 manage.py makemigrations
# or try with python3 manage.py makemigrations ridesharing
# and python3 manage.py makemigrations world
python3 manage.py migrateπ₯ If you have any problems creating the tables, you can do it manually by:
python3 manage.py sqlmigrate world 0001This will generate Postgresql schema, e.g.:
BEGIN;
##
## Create model Question
##
CREATE TABLE "polls_question" (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"question_text" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
);
COMMIT;Copy and execute this schema in psql, and you can check your database by (Remember you must start your postgresql service first):
\l ## to list all databases
\c user_info ## switch to your database
\dt ## show all tables
SELECT * FROM world_user; ## see all records in world_user table
q ## quitsudo service postgresql startpython3 manage.py runserver 0:8080π Now enjoy this project!
π± Developed by Hugo.
Since I didn't really enroll in this course, this project is only used for self-learning. Some of this project requirements are meaningless and time-consuming for me, so I have not implemented (or just leave the interface) yet.
Due to the limited time, I did not clean up and refractor the code. I would be glad if someone can further improve this project.
π§ If you have any questions, feel free to contact me through:
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)
.png)