Skip to content

Commit cc90ffa

Browse files
committed
Описание изменений
1 parent 4fc9ec1 commit cc90ffa

File tree

10 files changed

+206
-27
lines changed

10 files changed

+206
-27
lines changed

server/djangoapp/urls.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
# Uncomment the imports before you add the code
2-
# from django.urls import path
2+
from django.urls import path
33
from django.conf.urls.static import static
44
from django.conf import settings
5-
# from . import views
5+
from . import views
66

77
app_name = 'djangoapp'
88
urlpatterns = [
9-
# # path for registration
9+
path(route="register", view=views.registration, name="register"),
10+
11+
path(route="login", view=views.login_user, name="login"),
12+
path(route="logout", view=views.logout_request, name="logout"),
13+
1014

1115
# path for login
1216
# path(route='login', view=views.login_user, name='login'),

server/djangoapp/views.py

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
# Uncomment the required imports before adding the code
22

3-
# from django.shortcuts import render
4-
# from django.http import HttpResponseRedirect, HttpResponse
5-
# from django.contrib.auth.models import User
6-
# from django.shortcuts import get_object_or_404, render, redirect
7-
# from django.contrib.auth import logout
8-
# from django.contrib import messages
9-
# from datetime import datetime
3+
from django.shortcuts import render
4+
from django.http import HttpResponseRedirect, HttpResponse
5+
from django.contrib.auth.models import User
6+
from django.shortcuts import get_object_or_404, render, redirect
7+
from django.contrib.auth import logout
8+
from django.contrib import messages
9+
from datetime import datetime
10+
1011

1112
from django.http import JsonResponse
1213
from django.contrib.auth import login, authenticate
1314
import logging
1415
import json
1516
from django.views.decorators.csrf import csrf_exempt
16-
# from .populate import initiate
17+
from .populate import initiate
1718

1819

19-
# Get an instance of a logger
20+
#Get an instance of a logger
2021
logger = logging.getLogger(__name__)
2122

2223

@@ -39,13 +40,43 @@ def login_user(request):
3940
return JsonResponse(data)
4041

4142
# Create a `logout_request` view to handle sign out request
42-
# def logout_request(request):
43-
# ...
43+
def logout_request(request):
44+
logout(request)
45+
data = {"userName":""}
46+
return JsonResponse(data)
4447

4548
# Create a `registration` view to handle sign up request
46-
# @csrf_exempt
47-
# def registration(request):
48-
# ...
49+
@csrf_exempt
50+
def registration(request):
51+
context = {}
52+
53+
data = json.loads(request.body)
54+
username = data['userName']
55+
password = data['password']
56+
first_name = data['firstName']
57+
last_name = data['lastName']
58+
email = data['email']
59+
username_exist = False
60+
email_exist = False
61+
try:
62+
# Check if user already exists
63+
User.objects.get(username=username)
64+
username_exist = True
65+
except:
66+
# If not, simply log this is a new user
67+
logger.debug("{} is new user".format(username))
68+
69+
# If it is a new user
70+
if not username_exist:
71+
# Create user in auth_user table
72+
user = User.objects.create_user(username=username, first_name=first_name, last_name=last_name,password=password, email=email)
73+
# Login the user and redirect to list page
74+
login(request, user)
75+
data = {"userName":username,"status":"Authenticated"}
76+
return JsonResponse(data)
77+
else :
78+
data = {"userName":username,"error":"Already Registered"}
79+
return JsonResponse(data)
4980

5081
# # Update the `get_dealerships` view to render the index page with
5182
# a list of dealerships

server/djangoproj/settings.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
# SECURITY WARNING: don't run with debug turned on in production!
2929
DEBUG = True
3030

31-
ALLOWED_HOSTS = [https://mikhailovska-8000.theianext-1-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai]
32-
CSRF_TRUSTED_ORIGINS = [https://mikhailovska-8000.theianext-1-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai]
31+
ALLOWED_HOSTS = ['localhost','https://mikhailovska-8000.theianext-1-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai']
32+
CSRF_TRUSTED_ORIGINS = ['https://mikhailovska-8000.theianext-1-labs-prod-misc-tools-us-east-0.proxy.cognitiveclass.ai']
3333

3434
REST_FRAMEWORK = {
3535
'DEFAULT_AUTHENTICATION_CLASSES': [],
@@ -62,7 +62,9 @@
6262
{
6363
'BACKEND': 'django.template.backends.django.DjangoTemplates',
6464
'DIRS': [
65-
os.path.join(BASE_DIR,'frontend/static')
65+
os.path.join(BASE_DIR, 'frontend/static'),
66+
os.path.join(BASE_DIR, 'frontend/build'),
67+
os.path.join(BASE_DIR, 'frontend/build/static'),
6668
],
6769
'APP_DIRS': True,
6870
'OPTIONS': {
@@ -137,6 +139,8 @@
137139
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
138140

139141
STATICFILES_DIRS = [
140-
os.path.join(BASE_DIR,'frontend/static')
142+
os.path.join(BASE_DIR, 'frontend/static'),
143+
os.path.join(BASE_DIR, 'frontend/build'),
144+
os.path.join(BASE_DIR, 'frontend/build/static'),
141145
]
142146

server/djangoproj/urls.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
from django.conf.urls.static import static
2020
from django.conf import settings
2121

22-
urlpatterns = [
22+
urlpatterns = [
23+
path('register/', TemplateView.as_view(template_name="index.html")),
24+
path('login/', TemplateView.as_view(template_name="index.html")),
25+
path('about/', TemplateView.as_view(template_name="About.html")),
2326
path('contact/', TemplateView.as_view(template_name="Contact.html")),
2427
path('admin/', admin.site.urls),
2528
path('djangoapp/', include('djangoapp.urls')),

server/frontend/package-lock.json

Lines changed: 25 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/frontend/src/App.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import LoginPanel from "./components/Login/Login"
2+
import RegisterPanel from "./components/Register/Register"
23
import { Routes, Route } from "react-router-dom";
34

45
function App() {
56
return (
67
<Routes>
78
<Route path="/login" element={<LoginPanel />} />
9+
<Route path="/register" element={<RegisterPanel />} />
810
</Routes>
911
);
1012
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import React, { useState } from "react";
2+
import "./Register.css";
3+
import user_icon from "../assets/person.png"
4+
import email_icon from "../assets/email.png"
5+
import password_icon from "../assets/password.png"
6+
import close_icon from "../assets/close.png"
7+
8+
const Register = () => {
9+
10+
const [userName, setUserName] = useState("");
11+
const [password, setPassword] = useState("");
12+
const [email, setEmail] = useState("");
13+
const [firstName, setFirstName] = useState("");
14+
const [lastName, setlastName] = useState("");
15+
16+
17+
const gohome = ()=> {
18+
window.location.href = window.location.origin;
19+
}
20+
21+
const register = async (e) => {
22+
e.preventDefault();
23+
24+
let register_url = window.location.origin+"/djangoapp/register";
25+
26+
const res = await fetch(register_url, {
27+
method: "POST",
28+
headers: {
29+
"Content-Type": "application/json",
30+
},
31+
body: JSON.stringify({
32+
"userName": userName,
33+
"password": password,
34+
"firstName":firstName,
35+
"lastName":lastName,
36+
"email":email
37+
}),
38+
});
39+
40+
const json = await res.json();
41+
if (json.status) {
42+
sessionStorage.setItem('username', json.userName);
43+
window.location.href = window.location.origin;
44+
}
45+
else if (json.error === "Already Registered") {
46+
alert("The user with same username is already registered");
47+
window.location.href = window.location.origin;
48+
}
49+
};
50+
51+
return(
52+
<div className="register_container" style={{width: "50%"}}>
53+
<div className="header" style={{display: "flex",flexDirection: "row", justifyContent: "space-between"}}>
54+
<span className="text" style={{flexGrow:"1"}}>SignUp</span>
55+
<div style={{display: "flex",flexDirection: "row", justifySelf: "end", alignSelf: "start" }}>
56+
<a href="/" onClick={()=>{gohome()}} style={{justifyContent: "space-between", alignItems:"flex-end"}}>
57+
<img style={{width:"1cm"}} src={close_icon} alt="X"/>
58+
</a>
59+
</div>
60+
<hr/>
61+
</div>
62+
63+
<form onSubmit={register}>
64+
<div className="inputs">
65+
<div className="input">
66+
<img src={user_icon} className="img_icon" alt='Username'/>
67+
<input type="text" name="username" placeholder="Username" className="input_field" onChange={(e) => setUserName(e.target.value)}/>
68+
</div>
69+
<div>
70+
<img src={user_icon} className="img_icon" alt='First Name'/>
71+
<input type="text" name="first_name" placeholder="First Name" className="input_field" onChange={(e) => setFirstName(e.target.value)}/>
72+
</div>
73+
74+
<div>
75+
<img src={user_icon} className="img_icon" alt='Last Name'/>
76+
<input type="text" name="last_name" placeholder="Last Name" className="input_field" onChange={(e) => setlastName(e.target.value)}/>
77+
</div>
78+
79+
<div>
80+
<img src={email_icon} className="img_icon" alt='Email'/>
81+
<input type="email" name="email" placeholder="email" className="input_field" onChange={(e) => setEmail(e.target.value)}/>
82+
</div>
83+
84+
<div className="input">
85+
<img src={password_icon} className="img_icon" alt='password'/>
86+
<input name="psw" type="password" placeholder="Password" className="input_field" onChange={(e) => setPassword(e.target.value)}/>
87+
</div>
88+
89+
</div>
90+
<div className="submit_panel">
91+
<input className="submit" type="submit" value="Register"/>
92+
</div>
93+
</form>
94+
</div>
95+
)
96+
}
97+
98+
export default Register;

server/frontend/static/Contact.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ <h2 style="padding-right: 5%;">Dealerships</h2>
3939
</div>
4040
<div style="display: flex;flex-direction: row; margin:auto">
4141
<div class="card" style="width: 50%;">
42-
<img class="card-img-top" src="/static/person3.png" alt="Card image">
42+
<img class="card-img-top" src="/static/person3.jpeg" alt="Card image">
4343
</div>
4444

4545
<div class="card" style="width: 50%; text-align: center; color:blue">

server/frontend/static/Home.html

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,22 @@
77
<script>
88

99
const logout = async (e) => {
10-
//Include the code for logout here.
10+
let logout_url = window.location.origin+"/djangoapp/logout";
11+
const res = await fetch(logout_url, {
12+
method: "GET",
13+
});
14+
15+
const json = await res.json();
16+
if (json) {
17+
let username = sessionStorage.getItem('username');
18+
sessionStorage.removeItem('username');
19+
window.location.href = window.location.origin;
20+
window.location.reload();
21+
alert("Logging out "+username+"...")
22+
}
23+
else {
24+
alert("The user could not be logged out.")
25+
}
1126
};
1227

1328
let checkSession = ()=>{

server/frontend/static/person3.jpeg

68.7 KB
Loading

0 commit comments

Comments
 (0)