| 
									
										
										
										
											2015-05-27 12:21:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | from django.shortcuts import get_object_or_404, render | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  | from django.core.urlresolvers import reverse_lazy, reverse | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  | from django.contrib.auth.mixins import LoginRequiredMixin | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  | from django.views.generic import View, CreateView, FormView, ListView, DetailView | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  | from django.http import HttpResponseRedirect | 
					
						
							|  |  |  | from django.contrib.auth import authenticate, login | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | from django.conf import settings | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  | from membership.models import CustomUser, StripeCustomer | 
					
						
							|  |  |  | from utils.stripe_utils import StripeUtils | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | from utils.forms import BillingAddressForm | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  | from utils.models import BillingAddress | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  | from .models import VirtualMachineType, VirtualMachinePlan, HostingOrder | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  | from .forms import HostingUserSignupForm, HostingUserLoginForm | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | from .mixins import ProcessVMSelectionMixin | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | class DjangoHostingView(ProcessVMSelectionMixin, View): | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  |     template_name = "hosting/django.html" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_context_data(self, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  |         context = { | 
					
						
							|  |  |  |             'hosting': "django", | 
					
						
							|  |  |  |             'hosting_long': "Django", | 
					
						
							|  |  |  |             'domain': "django-hosting.ch", | 
					
						
							|  |  |  |             'google_analytics': "UA-62285904-6", | 
					
						
							|  |  |  |             'email': "info@django-hosting.ch", | 
					
						
							|  |  |  |             'vm_types': VirtualMachineType.get_serialized_vm_types(), | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  |         return context | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get(self, request, *args, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  |         context = self.get_context_data() | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-19 01:04:15 -05:00
										 |  |  |         return render(request, self.template_name, context) | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-27 12:21:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | class RailsHostingView(ProcessVMSelectionMixin, View): | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |     template_name = "hosting/rails.html" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_context_data(self, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  |         context = { | 
					
						
							|  |  |  |             'hosting': "rails", | 
					
						
							|  |  |  |             'hosting_long': "Ruby On Rails", | 
					
						
							|  |  |  |             'domain': "rails-hosting.ch", | 
					
						
							|  |  |  |             'google_analytics': "UA-62285904-5", | 
					
						
							|  |  |  |             'email': "info@rails-hosting.ch", | 
					
						
							|  |  |  |             'vm_types': VirtualMachineType.get_serialized_vm_types(), | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return context | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get(self, request, *args, **kwargs): | 
					
						
							|  |  |  |         context = self.get_context_data() | 
					
						
							|  |  |  |         return render(request, self.template_name, context) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | class NodeJSHostingView(ProcessVMSelectionMixin, View): | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |     template_name = "hosting/nodejs.html" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_context_data(self, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  |         context = { | 
					
						
							|  |  |  |             'hosting': "nodejs", | 
					
						
							|  |  |  |             'hosting_long': "NodeJS", | 
					
						
							|  |  |  |             'domain': "node-hosting.ch", | 
					
						
							|  |  |  |             'google_analytics': "UA-62285904-7", | 
					
						
							|  |  |  |             'email': "info@node-hosting.ch", | 
					
						
							|  |  |  |             'vm_types': VirtualMachineType.get_serialized_vm_types(), | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return context | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get(self, request, *args, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         context = self.get_context_data() | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return render(request, self.template_name, context) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class IndexView(View): | 
					
						
							|  |  |  |     template_name = "hosting/index.html" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_context_data(self, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  |         context = { | 
					
						
							|  |  |  |             'hosting': "nodejs", | 
					
						
							|  |  |  |             'hosting_long': "NodeJS", | 
					
						
							|  |  |  |             'domain': "node-hosting.ch", | 
					
						
							|  |  |  |             'google_analytics': "UA-62285904-7", | 
					
						
							|  |  |  |             'email': "info@node-hosting.ch", | 
					
						
							|  |  |  |             'vm_types': VirtualMachineType.get_serialized_vm_types(), | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return context | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get(self, request, *args, **kwargs): | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         context = self.get_context_data() | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return render(request, self.template_name, context) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LoginView(FormView): | 
					
						
							|  |  |  |     template_name = 'hosting/login.html' | 
					
						
							| 
									
										
										
										
											2016-05-03 01:06:43 -05:00
										 |  |  |     success_url = reverse_lazy('hosting:orders') | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |     form_class = HostingUserLoginForm | 
					
						
							|  |  |  |     moodel = CustomUser | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  |     def get_success_url(self): | 
					
						
							|  |  |  |         next_url = self.request.session.get('next', self.success_url) | 
					
						
							|  |  |  |         return next_url | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |     def form_valid(self, form): | 
					
						
							|  |  |  |         email = form.cleaned_data.get('email') | 
					
						
							|  |  |  |         password = form.cleaned_data.get('password') | 
					
						
							|  |  |  |         auth_user = authenticate(email=email, password=password) | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         if auth_user: | 
					
						
							|  |  |  |             login(self.request, auth_user) | 
					
						
							|  |  |  |             return HttpResponseRedirect(self.get_success_url()) | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return HttpResponseRedirect(self.get_success_url()) | 
					
						
							| 
									
										
										
										
											2015-05-27 12:21:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  | class SignupView(CreateView): | 
					
						
							|  |  |  |     template_name = 'hosting/signup.html' | 
					
						
							|  |  |  |     form_class = HostingUserSignupForm | 
					
						
							|  |  |  |     moodel = CustomUser | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |     def get_success_url(self): | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  |         next_url = self.request.session.get('next', reverse_lazy('hosting:signup')) | 
					
						
							|  |  |  |         return next_url | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |     def form_valid(self, form): | 
					
						
							| 
									
										
										
										
											2015-07-30 00:11:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         name = form.cleaned_data.get('name') | 
					
						
							|  |  |  |         email = form.cleaned_data.get('email') | 
					
						
							|  |  |  |         password = form.cleaned_data.get('password') | 
					
						
							| 
									
										
										
										
											2015-07-28 21:22:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         CustomUser.register(name, password, email) | 
					
						
							|  |  |  |         auth_user = authenticate(email=email, password=password) | 
					
						
							|  |  |  |         login(self.request, auth_user) | 
					
						
							| 
									
										
										
										
											2015-08-09 22:13:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-20 01:03:32 -05:00
										 |  |  |         return HttpResponseRedirect(self.get_success_url()) | 
					
						
							| 
									
										
										
										
											2015-07-30 19:07:29 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | class PaymentVMView(FormView): | 
					
						
							|  |  |  |     template_name = 'hosting/payment.html' | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |     form_class = BillingAddressForm | 
					
						
							| 
									
										
										
										
											2016-04-22 08:36:38 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def get_context_data(self, **kwargs): | 
					
						
							|  |  |  |         context = super(PaymentVMView, self).get_context_data(**kwargs) | 
					
						
							|  |  |  |         context.update({ | 
					
						
							|  |  |  |             'stripe_key': settings.STRIPE_API_PUBLIC_KEY | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |         return context | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |     def post(self, request, *args, **kwargs): | 
					
						
							|  |  |  |         form = self.get_form() | 
					
						
							| 
									
										
										
										
											2015-07-30 00:11:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |         if form.is_valid(): | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             context = self.get_context_data() | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |             specifications = request.session.get('vm_specs') | 
					
						
							|  |  |  |             vm_type = specifications.get('hosting_company') | 
					
						
							|  |  |  |             vm = VirtualMachineType.objects.get(hosting_company=vm_type) | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  |             final_price = vm.calculate_price(specifications) | 
					
						
							| 
									
										
										
										
											2015-07-28 21:22:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |             plan_data = { | 
					
						
							|  |  |  |                 'vm_type': vm, | 
					
						
							|  |  |  |                 'cores': specifications.get('cores'), | 
					
						
							|  |  |  |                 'memory': specifications.get('memory'), | 
					
						
							|  |  |  |                 'disk_size': specifications.get('disk_size'), | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  |                 'price': final_price | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  |             token = form.cleaned_data.get('token') | 
					
						
							| 
									
										
										
										
											2015-08-09 22:13:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  |             # Get or create stripe customer | 
					
						
							|  |  |  |             customer = StripeCustomer.get_or_create(email=self.request.user.email, | 
					
						
							|  |  |  |                                                     token=token) | 
					
						
							|  |  |  |             # Create Virtual Machine Plan | 
					
						
							|  |  |  |             plan = VirtualMachinePlan.create(plan_data, request.user) | 
					
						
							| 
									
										
										
										
											2015-08-09 22:13:38 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  |             # Create Billing Address | 
					
						
							|  |  |  |             billing_address = form.save() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Create a Hosting Order | 
					
						
							|  |  |  |             order = HostingOrder.create(VMPlan=plan, customer=customer, | 
					
						
							|  |  |  |                                         billing_address=billing_address) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # Make stripe charge to a customer | 
					
						
							|  |  |  |             stripe_utils = StripeUtils() | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             charge_response = stripe_utils.make_charge(amount=final_price, | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  |                                                        customer=customer.stripe_id) | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             charge = charge_response.get('response_object') | 
					
						
							| 
									
										
										
										
											2015-09-22 05:37:22 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  |             # Check if the payment was approved | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             if not charge: | 
					
						
							|  |  |  |                 context.update({ | 
					
						
							|  |  |  |                     'paymentError': charge_response.get('error'), | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  |                     'form': form | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |                 }) | 
					
						
							|  |  |  |                 return render(request, self.template_name, context) | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             charge = charge_response.get('response_object') | 
					
						
							| 
									
										
										
										
											2016-04-26 01:16:03 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             # Associate an order with a stripe payment | 
					
						
							|  |  |  |             order.set_stripe_charge(charge) | 
					
						
							| 
									
										
										
										
											2015-07-30 01:09:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             # If the Stripe payment was successed, set order status approved | 
					
						
							|  |  |  |             order.set_approved() | 
					
						
							|  |  |  |             request.session.update({ | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  |                 'charge': charge, | 
					
						
							|  |  |  |                 'order': order.id, | 
					
						
							|  |  |  |                 'billing_address': billing_address.id | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  |             }) | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  |             return HttpResponseRedirect(reverse('hosting:orders', kwargs={'pk': order.id})) | 
					
						
							| 
									
										
										
										
											2016-04-23 02:22:44 -05:00
										 |  |  |         else: | 
					
						
							|  |  |  |             return self.form_invalid(form) | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-30 13:55:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  | class OrdersHostingDetailView(LoginRequiredMixin, DetailView): | 
					
						
							|  |  |  |     template_name = "hosting/order_detail.html" | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  |     login_url = reverse_lazy('hosting:login') | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  |     model = HostingOrder | 
					
						
							| 
									
										
										
										
											2016-04-27 01:54:15 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  | class OrdersHostingListView(LoginRequiredMixin, ListView): | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  |     template_name = "hosting/orders.html" | 
					
						
							|  |  |  |     login_url = reverse_lazy('hosting:login') | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  |     context_object_name = "orders" | 
					
						
							|  |  |  |     model = HostingOrder | 
					
						
							|  |  |  |     paginate_by = 10 | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  |     def get_queryset(self): | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  |         user = self.request.user | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  |         self.queryset = HostingOrder.objects.filter(customer__user=user) | 
					
						
							|  |  |  |         return super(OrdersHostingListView, self).get_queryset() | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  | class VirtualMachinesPlanListView(LoginRequiredMixin, ListView): | 
					
						
							|  |  |  |     template_name = "hosting/virtual_machines.html" | 
					
						
							|  |  |  |     login_url = reverse_lazy('hosting:login') | 
					
						
							|  |  |  |     context_object_name = "vms" | 
					
						
							|  |  |  |     model = VirtualMachinePlan | 
					
						
							|  |  |  |     paginate_by = 10 | 
					
						
							| 
									
										
										
										
											2016-04-29 01:53:24 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 00:59:40 -05:00
										 |  |  |     def get_queryset(self): | 
					
						
							|  |  |  |         user = self.request.user | 
					
						
							|  |  |  |         self.queryset = VirtualMachinePlan.objects.active(user) | 
					
						
							|  |  |  |         return super(VirtualMachinesPlanListView, self).get_queryset() | 
					
						
							| 
									
										
										
										
											2016-05-04 00:16:41 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class VirtualMachineDetailListView(LoginRequiredMixin, DetailView): | 
					
						
							|  |  |  |     template_name = "hosting/virtual_machine_detail.html" | 
					
						
							|  |  |  |     login_url = reverse_lazy('hosting:login') | 
					
						
							|  |  |  |     model = VirtualMachinePlan | 
					
						
							|  |  |  |     context_object_name = "virtual_machine" |