Advertisement
Guest User

Untitled

a guest
Feb 16th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.01 KB | None | 0 0
  1. class ProductQuerySet(models.query.QuerySet):
  2.  
  3. def active(self):
  4. return self.filter(active=True)
  5.  
  6. class ProductManager(models.Manager):
  7.  
  8. def get_queryset(self):
  9. return ProductQuerySet(self.model, using=self._db)
  10.  
  11. def all(self, *args, **kwargs):
  12. return self.get_queryset().active()
  13.  
  14. def get_related(self, instance):
  15. products_one = self.get_queryset().filter(categories__in=instance.categories.all())
  16. products_two = self.get_queryset().filter(default=instance.default)
  17. qs = (products_one | products_two).exclude(id=instance.id).distinct()
  18. return qs
  19.  
  20.  
  21.  
  22. class Product(models.Model):
  23. user = models.ForeignKey(settings.AUTH_USER_MODEL)
  24. title = models.CharField(max_length=120)
  25. description = models.TextField(blank=True, null=True)
  26. price = models.DecimalField(decimal_places=2, max_digits=20)
  27. active = models.BooleanField(default= True)
  28. categories = models.ManyToManyField('Category', blank=True)
  29. default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)
  30.  
  31. objects = ProductManager()
  32.  
  33. def __str__(self):
  34. return self.title
  35.  
  36. def get_absolute_url(self):
  37. return reverse("product_detail", kwargs={"pk": self.pk})
  38.  
  39. def get_image_url(self):
  40. img = self.productimage_set.first()
  41. if img :`enter code here`
  42. return img.image.url
  43. return img #None
  44.  
  45.  
  46. class Variation(models.Model):
  47. product = models.ForeignKey(Product)
  48. title = models.CharField(max_length=120)
  49. price = models.DecimalField(decimal_places=2, max_digits=20)
  50. sale_price = models.DecimalField(decimal_places=2, max_digits=20, null=True)
  51. active = models.BooleanField(default= True)
  52. inventory = models.IntegerField(default="-1",null=True, blank=True)
  53.  
  54.  
  55. def __str__(self):
  56. return self.title
  57.  
  58.  
  59. def image_upload_to_featured(instance, filename):
  60. title = instance.product.title
  61. slug = slugify(title)
  62. basename, file_extenssion = filename.split(".")
  63. new_filename = "%s-%s.%s" %(slug, instance.id, file_extenssion)
  64. return "products/%s/featured/%s" %(slug, new_filename)
  65.  
  66. class ProductFeatured(models.Model):
  67. product = models.ForeignKey(Product)
  68. image = models.ImageField(upload_to=image_upload_to_featured)
  69. title = models.CharField(max_length=120, null=True, blank=True)
  70. description = models.CharField(max_length=220, null=True, blank=True)
  71. make_image_background = models.BooleanField(default=False)
  72. text_rigth = models.BooleanField(default=False)
  73. show_price = models.BooleanField(default=False)
  74. active = models.BooleanField(default=True)
  75.  
  76. def __str__(self):
  77. return self.product.title
  78.  
  79. def home(request):
  80. title = 'Sign Up Now'
  81. featured_image = ProductFeatured.objects.filter(active=True).order_by("?").first()
  82. products = Product.objects.all().order_by("?")[:8]
  83. products2 = Product.objects.all().order_by("?")[:4]
  84. categories = Category.objects.all()
  85.  
  86. form = SignUpForm(request.POST or None)
  87. context = {
  88. "title": title,
  89. "form": form,
  90. "featured_image": featured_image,
  91. "products":products,
  92. "products2": products2,
  93. "categories": categories,
  94. }
  95. if form.is_valid():
  96. instance = form.save(commit=False)
  97. full_name = form.cleaned_data.get("full_name")
  98. if not full_name:
  99. full_name = "New full name"
  100. instance.full_name = full_name
  101. instance.save()
  102. context = {
  103. "title": "Thank you"
  104. }
  105.  
  106. return render(request, "home.html", context)
  107.  
  108. {% extends "base.html" %}
  109. {% load crispy_forms_tags %}
  110. {% load staticfiles %}
  111.  
  112. {% block head_title %}Welcome | {{ block.super }}{% endblock %}
  113.  
  114. <style>
  115. {% block style %}
  116.  
  117. .jumbotron {
  118. background-color:#5ACDFF;
  119. color: #000;
  120. height: 350px;
  121. margin-top: -22px;
  122. {% if featured_image.make_image_background %}
  123. background-image:url('{{ featured_image.image.url }}');
  124. background-repeat: no-repeat;
  125. background-color: #000;
  126. background-size: cover;
  127. {% endif %}
  128. }
  129. {% endblock %}
  130. </style>
  131.  
  132.  
  133.  
  134. {% block jumbotron %}
  135.  
  136. {% if featured_image %}
  137. <div class="jumbotron" style="">
  138. <div class="container">
  139. <div class="row">
  140. <div class='col-sm-12 text-center{% if featured_image.text_right %} pull-right {% endif %}'>
  141. <p>
  142. <a class="btn btn-lg btn-primary" href="{{ featured_image.product.get_absolute_url }}" role="button">More Details </a>
  143. </p>
  144. </div>
  145. {% if not featured_image.make_image_background %}
  146. <div class='col-sm-6' >
  147. <img src="{{ featured_image.product.get_absolute_url }}" class='img-responsive' />
  148. </div>
  149. {% endif %}
  150. </div>
  151. </div>
  152. </div>
  153.  
  154. {% else %}
  155. <div class="jumbotron">
  156. <div class="container">
  157. <div class="row">
  158. <div class='col-sm-6'>
  159. <h1>Welcome</h1>
  160. <p></p>
  161. </div>
  162. <div class='col-sm-6' >
  163.  
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168.  
  169. {% endif %}
  170. {% endblock %}
  171.  
  172. {% block content %}
  173. <div class="container">
  174. <h3>Recommended Products</h3>
  175. <hr />
  176. {% include "products/products.html" with object_list=products %}
  177. <br />
  178. <h3>Featured Products</h3>
  179. <hr />
  180. {% include "products/products.html" with object_list=products2 %}
  181. </div>
  182. {% endblock %}
  183.  
  184. import os
  185.  
  186. BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  187.  
  188. SECRET_KEY = ''
  189.  
  190. DEBUG = False
  191.  
  192. ALLOWED_HOSTS = ['multi-ecommerce.herokuapp.com']
  193.  
  194. EMAIL_HOST = 'smtp.gmail.com'
  195. EMAIL_HOST_USER = ''
  196. EMAIL_HOST_PASSWORD = ''
  197. EMAIL_PORT = 587
  198. EMAIL_USE_TLS = True
  199. EMAIL_DEBUG = False
  200.  
  201.  
  202. INSTALLED_APPS = (
  203. #django app
  204. 'django.contrib.admin',
  205. 'django.contrib.auth',
  206. 'django.contrib.contenttypes',
  207. 'django.contrib.sessions',
  208. 'django.contrib.sites',
  209. 'django.contrib.messages',
  210. 'django.contrib.staticfiles',
  211. #third party apps
  212. 'crispy_forms',
  213. 'registration',
  214. 'django_filters',
  215. 'storages',
  216. #my apps
  217. 'newsletter',
  218. 'products',
  219. 'carts',
  220. 'orders',
  221. 'sellers',
  222. )
  223.  
  224. ROOT_URLCONF = 'ecommerce2.urls'
  225.  
  226. MIDDLEWARE_CLASSES = (
  227. 'django.contrib.sessions.middleware.SessionMiddleware',
  228. 'django.middleware.common.CommonMiddleware',
  229. 'django.middleware.csrf.CsrfViewMiddleware',
  230. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  231. 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  232. 'django.contrib.messages.middleware.MessageMiddleware',
  233. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  234. 'django.middleware.security.SecurityMiddleware',
  235. )
  236.  
  237. ROOT_URLCONF = 'ecommerce2.urls'
  238.  
  239. TEMPLATES = [
  240. {
  241. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  242. 'DIRS': [os.path.join(BASE_DIR, "templates")],
  243. 'APP_DIRS': True,
  244. 'OPTIONS': {
  245. 'context_processors': [
  246. 'django.template.context_processors.debug',
  247. 'django.template.context_processors.request',
  248. 'django.contrib.auth.context_processors.auth',
  249. 'django.contrib.messages.context_processors.messages',
  250. ],
  251. },
  252. },
  253. ]
  254.  
  255. WSGI_APPLICATION = 'ecommerce2.wsgi.application'
  256.  
  257. DATABASES = {
  258. 'default': {
  259. 'ENGINE': 'django.db.backends.sqlite3',
  260. 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  261. }
  262. }
  263.  
  264. import dj_database_url
  265. db_from_env = dj_database_url.config()
  266. DATABASES['default'].update(db_from_env)
  267.  
  268. LANGUAGE_CODE = 'en-us'
  269.  
  270. TIME_ZONE = 'UTC'
  271.  
  272. USE_I18N = True
  273.  
  274. USE_L10N = True
  275.  
  276. USE_TZ = True
  277.  
  278. STATIC_ROOT = 'staticfiles'
  279. STATIC_URL = '/static/'
  280.  
  281. STATICFILES_DIRS = (
  282. os.path.join(BASE_DIR, "static_in_pro", "our_static"),
  283. )
  284.  
  285. MEDIA_URL = '/media/'
  286. MEDIA_ROOT = os.path.join(BASE_DIR, "media")
  287.  
  288. CRISPY_TEMPLATE_PACK = 'bootstrap3'
  289.  
  290. ACCOUNT_ACTIVATION_DAYS = 7
  291. REGISTRATION_AUTO_LOGIN = True
  292. SITE_ID = 1
  293. LOGIN_REDIRECT_URL = '/'
  294.  
  295. BRAINTREE_PUBLIC = ""
  296. BRAINTREE_PRIVATE = ""
  297. BRAINTREE_MERCHAND_ID = ""
  298. BRAINTREE_ENVIRONMENT = "sandbox"
  299.  
  300.  
  301. # AWS
  302. STATICFILES_LOCATION = 'static'
  303. MEDIAFILES_LOCATION = 'media'
  304.  
  305. AWS_ACCESS_KEY_ID = ""
  306. AWS_SECRET_ACCESS_KEY = ""
  307.  
  308. AWS_FILE_EXPIRE = 200
  309. AWS_PRELOAD_METADATA = True
  310. AWS_QUERYSTRING_AUTH = True
  311.  
  312. DEFAULT_FILE_STORAGE = 'ecommerce2.utils.MediaRootS3BotoStorage'
  313. STATICFILES_STORAGE = 'ecommerce2.utils.StaticRootS3BotoStorage'
  314. AWS_STORAGE_BUCKET_NAME = 'multi-ecommerce'
  315. S3DIRECT_REGION = 'us-west-2'
  316. S3_URL = '//%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
  317. MEDIA_URL = '//%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
  318. MEDIA_ROOT = MEDIA_URL
  319. STATIC_URL = S3_URL + 'static/'
  320. ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
  321.  
  322. import datetime
  323.  
  324. two_months = datetime.timedelta(days=61)
  325. date_two_months_later = datetime.date.today() + two_months
  326. expires = date_two_months_later.strftime("%A, %d %B %Y 20:00:00 GMT")
  327.  
  328. AWS_HEADERS = {
  329. 'Expires': expires,
  330. 'Cache-Control': 'max-age=%d' % (int(two_months.total_seconds()), ),
  331. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement