Skip to content

Commit d23ef73

Browse files
Create views and urls
1 parent e3d4392 commit d23ef73

File tree

3 files changed

+154
-7
lines changed

3 files changed

+154
-7
lines changed

server/djangoapp/restapis.py

Lines changed: 88 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,117 @@
11
import requests
22
import json
33
# import related models here
4+
from .models import CarDealer, DealerReview
45
from requests.auth import HTTPBasicAuth
56

67

8+
79
# Create a `get_request` to make HTTP GET requests
810
# e.g., response = requests.get(url, params=params, headers={'Content-Type': 'application/json'},
911
# auth=HTTPBasicAuth('apikey', api_key))
12+
def get_request(url, **kwargs):
13+
#print(kwargs)
14+
print("GET from {} ".format(url))
15+
json_data={}
16+
try:
17+
if "apikey" in kwargs:
18+
response = requests.get(url, headers={'Content-Type':'application/json'}, params=kwargs, auth=HTTPBasicAuth("apikey", kwargs["apikey"]))
19+
else:
20+
response = requests.get(url, headers={'Content-Type':'application/json'}, params=kwargs)
1021

22+
status_code = response.status_code
23+
print("With status {} ".format(status_code))
24+
json_data = json.loads(response.text)
25+
#print(json_data)
26+
except Exception as e:
27+
print("Error " ,e)
28+
29+
return json_data
1130

1231
# Create a `post_request` to make HTTP POST requests
1332
# e.g., response = requests.post(url, params=kwargs, json=payload)
14-
33+
def post_request(url, payload, **kwargs):
34+
print(url)
35+
print(payload)
36+
print(kwargs)
37+
try:
38+
response = requests.post(url, params=kwargs, json=payload)
39+
except Exception as e:
40+
print("Error" ,e)
41+
print("Status Code ", {response.status_code})
42+
data = json.loads(response.text)
43+
return data
1544

1645
# Create a get_dealers_from_cf method to get dealers from a cloud function
1746
# def get_dealers_from_cf(url, **kwargs):
1847
# - Call get_request() with specified arguments
1948
# - Parse JSON results into a CarDealer object list
49+
def get_dealers_from_cf(url, **kwargs):
50+
results = []
51+
# Call get_request with a URL parameter
52+
json_result = get_request(url)
53+
#print(json_result)
54+
if json_result:
55+
# Get the row list in JSON as dealers
56+
dealers = json_result["entries"]
57+
# For each dealer object
58+
for dealer_doc in dealers:
59+
# Get its content in `doc` object
60+
#dealer_doc = dealers["doc"]
61+
# Create a CarDealer object with values in `doc` object
62+
dealer_obj = CarDealer(address=dealer_doc["address"], city=dealer_doc["city"], full_name=dealer_doc["full_name"],
63+
id=dealer_doc["id"], lat=dealer_doc["lat"], long=dealer_doc["long"],
64+
short_name=dealer_doc["short_name"],
65+
st=dealer_doc["st"], zip=dealer_doc["zip"])
66+
results.append(dealer_obj)
67+
68+
return results
69+
#Coding practice: create a get_dealer_by_id or get_dealers_by_state method in restapis.py. HINT, the only difference from the get_dealers_from_cf method is adding a dealer id or state URL parameter argument when calling the def get_request(url, **kwargs): method such as get_request(url, dealerId=dealerId).
2070

2171

2272
# Create a get_dealer_reviews_from_cf method to get reviews by dealer id from a cloud function
2373
# def get_dealer_by_id_from_cf(url, dealerId):
2474
# - Call get_request() with specified arguments
2575
# - Parse JSON results into a DealerView object list
26-
76+
def get_dealer_reviews_from_cf(url, dealer_id):
77+
results = []
78+
# Call get_request with a URL parameter
79+
json_result = get_request(url, dealerId=dealer_id)
80+
81+
if "entries" in json_result:
82+
reviews = json_result["entries"]
83+
# For each review object
84+
for review in reviews:
85+
review_obj = DealerReview(
86+
dealership=review["dealership"],
87+
name=review["name"],
88+
purchase=review["purchase"],
89+
review=review["review"],
90+
purchase_date=review["purchase_date"],
91+
car_make=review["car_make"],
92+
car_model=review["car_model"],
93+
car_year=review["car_year"],
94+
sentiment=analyze_review_sentiments(review["review"]),
95+
id=review['id']
96+
)
97+
results.append(review_obj)
98+
#print(results[0])
99+
return results
27100

28101
# Create an `analyze_review_sentiments` method to call Watson NLU and analyze text
29102
# def analyze_review_sentiments(text):
30103
# - Call get_request() with specified arguments
31104
# - Get the returned sentiment label such as Positive or Negative
32-
33-
34-
105+
def analyze_review_sentiments(dealerreview, **kwargs):
106+
API_KEY="MxFCXuNdAY4i7RdB1PTx0LGspyMbNVmVOKxtpJ5XPxkz"
107+
#API_KEY="0614ccd0-1e9f-4d49-923e-e7741f963747:Q3ZX2R1b3oBEb0XebEO99rpulJ31yoY7X5GfjoQykN4RpM9eThYrrs14If0aOHtG"
108+
NLU_URL='https://api.us-south.natural-language-understanding.watson.cloud.ibm.com/instances/93a549ab-8f15-404e-a8ed-97f6fb8a35aa/v1/analyze?version=2020-08-01'
109+
params = json.dumps({"text": dealerreview, "features": {"sentiment": {}}})
110+
response = requests.post(NLU_URL,data=params,headers={'Content-Type':'application/json'},auth=HTTPBasicAuth("apikey", API_KEY))
111+
112+
#print(response.json())
113+
try:
114+
sentiment=response.json()['sentiment']['document']['label']
115+
return sentiment
116+
except:
117+
return "neutral"

server/djangoapp/urls.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
path(route='', view=views.get_dealerships, name='index'),
2626

2727
# path for dealer reviews view
28+
path('dealer/<int:dealer_id>/', view=views.get_dealer_details, name='dealer_details'),
2829

2930
# path for add a review view
30-
31+
path(route='addreview/<int:dealer_id>/', view=views.add_review, name='add_review')
32+
3133
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

server/djangoapp/views.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
from django.contrib.auth.models import User
44
from django.shortcuts import get_object_or_404, render, redirect
55
# from .models import related models
6+
from .models import CarDealer, DealerReview, CarModel, CarMake
67
# from .restapis import related methods
8+
from .restapis import get_dealers_from_cf,get_dealer_reviews_from_cf,post_request
79
from django.contrib.auth import login, logout, authenticate
810
from django.contrib import messages
911
from datetime import datetime
@@ -74,16 +76,76 @@ def registration_request(request):
7476

7577
# Update the `get_dealerships` view to render the index page with a list of dealerships
7678
def get_dealerships(request):
77-
context = {}
7879
if request.method == "GET":
80+
context={}
81+
url = "https://08663624.us-south.apigw.appdomain.cloud/api/dealership"
82+
# Get dealers from the URL
83+
dealerships = get_dealers_from_cf(url)
84+
# Concat all dealer's short name
85+
context["dealership_list"]=dealerships
86+
# Return a list of dealer short name
7987
return render(request, 'djangoapp/index.html', context)
8088

8189

90+
8291
# Create a `get_dealer_details` view to render the reviews of a dealer
8392
# def get_dealer_details(request, dealer_id):
8493
# ...
94+
def get_dealer_details(request, dealer_id):
95+
context={}
96+
url = "https://08663624.us-south.apigw.appdomain.cloud/api/review"
97+
#print(dealer_id)
98+
# Get dealers from the URL
99+
dealer_details = get_dealer_reviews_from_cf(url,dealer_id)
100+
context["dealer_id"]=dealer_id
101+
context["reviews"]=dealer_details
102+
return render(request, 'djangoapp/dealer_details.html', context)
85103

86104
# Create a `add_review` view to submit a review
87105
# def add_review(request, dealer_id):
88106
# ...
89107

108+
def add_review(request, dealer_id):
109+
context = {}
110+
# If it is a GET request, just render the add_review page
111+
if request.method == 'GET':
112+
url = "https://08663624.us-south.apigw.appdomain.cloud/api/dealership"
113+
# Get dealers from the URL
114+
context = {
115+
"dealer_id": dealer_id,
116+
"dealer_name": get_dealers_from_cf(url)[dealer_id-1].full_name,
117+
"cars": CarModel.objects.all()
118+
}
119+
#print(context)
120+
return render(request, 'djangoapp/add_review.html', context)
121+
elif request.method == 'POST':
122+
if (request.user.is_authenticated):
123+
review = dict()
124+
review["id"]=0#placeholder
125+
review["name"]=request.POST["name"]
126+
review["dealership"]=dealer_id
127+
review["review"]=request.POST["content"]
128+
if ("purchasecheck" in request.POST):
129+
review["purchase"]=True
130+
else:
131+
review["purchase"]=False
132+
print(request.POST["car"])
133+
if review["purchase"] == True:
134+
car_parts=request.POST["car"].split("|")
135+
review["purchase_date"]=request.POST["purchase_date"]
136+
review["car_make"]=car_parts[0]
137+
review["car_model"]=car_parts[1]
138+
review["car_year"]=car_parts[2]
139+
140+
else:
141+
review["purchase_date"]=None
142+
review["car_make"]=None
143+
review["car_model"]=None
144+
review["car_year"]=None
145+
json_result = post_request("https://08663624.us-south.apigw.appdomain.cloud/api/review", review, dealerId=dealer_id)
146+
print(json_result)
147+
if "error" in json_result:
148+
context["message"] = "ERROR: Review was not submitted."
149+
else:
150+
context["message"] = "Review was submited"
151+
return redirect("djangoapp:dealer_details", dealer_id=dealer_id)

0 commit comments

Comments
 (0)