views.py code
user_6242850
plain_text
2 years ago
7.0 kB
10
Indexable
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404, render, redirect
from .models import CarModel
from .restapis import get_dealer_by_id, get_dealers_from_cf, get_dealers_by_state, get_dealer_reviews_from_cf, post_request
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
from datetime import datetime
import logging
import json
# Getting an instance of a logger
logger = logging.getLogger(__name__)
def dealership_list(request):
url = "https://us-south.functions.appdomain.cloud/api/v1/web/54ee907b-434c-4f03-a1b3-513c235fbeb4/default/myAction"
dealerships = get_dealers_from_cf(url) # provide the url argument
return render(request, 'djangoapp/dealership_list.html', {'dealerships': dealerships})
# View to render the index page with a list of dealerships
def get_dealerships(request):
if request.method == "GET":
context = {}
url = "https://9bebcb01.eu-de.apigw.appdomain.cloud/api/dealership"
# Get dealers from the Cloudant DB
context["dealerships"] = get_dealers_from_cf(url)
# dealer_names = ' '.join([dealer.short_name for dealer in context["dealerships"]])
# return HttpResponse(dealer_names)
return render(request, 'djangoapp/index.html', context)
# View to render a static about page
def about(request):
context = {}
if request.method == "GET":
return render(request, 'djangoapp/about.html', context)
# View to return a static contact page
def contact(request):
context = {}
if request.method == "GET":
return render(request, 'djangoapp/contact.html', context)
# View to handle sign in request
def login_request(request):
context = {}
if request.method == "POST":
username = request.POST['username']
password = request.POST['psw']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('djangoapp:index')
else:
context['message'] = "Invalid username or password."
return render(request, 'djangoapp/login.html', context)
else:
return render(request, 'djangoapp/login.html', context)
# View to handle sign out request
def logout_request(request):
# Get the user object based on session id in request
print("Logging out `{}`...".format(request.user.username))
# Logout user in the request
logout(request)
# Redirect user back to course list view
return redirect('djangoapp:index')
# View to handle sign up request
def registration_request(request):
context = {}
# If it is a GET request, just render the registration page
if request.method == 'GET':
return render(request, 'djangoapp/registration.html', context)
# If it is a POST request
elif request.method == 'POST':
# Get user information from request.POST
username = request.POST['username']
password = request.POST['psw']
first_name = request.POST['firstname']
last_name = request.POST['lastname']
user_exist = False
try:
# Check if user already exists
User.objects.get(username=username)
user_exist = True
except:
# If not, simply log this is a new user
logger.debug("{} is new user".format(username))
# If it is a new user
if not user_exist:
# Create user in auth_user table
user = User.objects.create_user(username=username, first_name=first_name, last_name=last_name,
password=password)
# Login the user and redirect to course list page
login(request, user)
return redirect("/djangoapp/")
else:
return render(request, 'djangoapp/registration.html', context)
# View to render the reviews of a dealer
def get_dealer_details(request, dealer_id):
context = {}
if request.method == "GET":
url = 'https://9bebcb01.eu-de.apigw.appdomain.cloud/api/review'
reviews = get_dealer_reviews_from_cf(url, dealer_id=dealer_id)
context = {
"reviews": reviews,
"dealer_id": dealer_id
}
return render(request, 'djangoapp/dealer_details.html', context)
# View to submit a new review
def add_review(request, dealer_id):
# User must be logged in before posting a review
if request.user.is_authenticated:
# GET request renders the page with the form for filling out a review
if request.method == "GET":
url = f"https://5b93346d.us-south.apigw.appdomain.cloud/dealerships/dealer-get?dealerId={dealer_id}"
# Get dealer details from the API
context = {
"cars": CarModel.objects.all(),
"dealer": get_dealer_by_id(url, dealer_id=dealer_id),
}
return render(request, 'djangoapp/add_review.html', context)
# POST request posts the content in the review submission form to the Cloudant DB using the post_review Cloud Function
if request.method == "POST":
form = request.POST
review = dict()
review["name"] = f"{request.user.first_name} {request.user.last_name}"
review["dealership"] = dealer_id
review["review"] = form["content"]
review["purchase"] = form.get("purchasecheck")
if review["purchase"]:
review["purchase_date"] = datetime.strptime(form.get("purchasedate"), "%m/%d/%Y").isoformat()
car = CarModel.objects.get(pk=form["car"])
review["car_make"] = car.car_make.name
review["car_model"] = car.name
review["car_year"] = car.year
# If the user bought the car, get the purchase date
if form.get("purchasecheck"):
review["purchase_date"] = datetime.strptime(form.get("purchasedate"), "%m/%d/%Y").isoformat()
else:
review["purchase_date"] = None
url = "https://9bebcb01.eu-de.apigw.appdomain.cloud/api/review" # API Cloud Function route
json_payload = {"review": review} # Create a JSON payload that contains the review data
# Performing a POST request with the review
result = post_request(url, json_payload, dealerId=dealer_id)
if int(result.status_code) == 200:
print("Review posted successfully.")
# After posting the review the user is redirected back to the dealer details page
return redirect("djangoapp:dealer_details", dealer_id=dealer_id)
else:
# If user isn't logged in, redirect to login page
print("User must be authenticated before posting a review. Please log in.")
return redirect("/djangoapp/login")
Editor is loading...
Leave a Comment