Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ProductQuerySet(models.query.QuerySet):
- def active(self):
- return self.filter(active=True)
- class ProductManager(models.Manager):
- def get_queryset(self):
- return ProductQuerySet(self.model, using=self._db)
- def all(self, *args, **kwargs):
- return self.get_queryset().active()
- def get_related(self, instance):
- products_one = self.get_queryset().filter(categories__in=instance.categories.all())
- products_two = self.get_queryset().filter(default=instance.default)
- qs = (products_one | products_two).exclude(id=instance.id).distinct()
- return qs
- class Product(models.Model):
- user = models.ForeignKey(settings.AUTH_USER_MODEL)
- title = models.CharField(max_length=120)
- description = models.TextField(blank=True, null=True)
- price = models.DecimalField(decimal_places=2, max_digits=20)
- active = models.BooleanField(default= True)
- categories = models.ManyToManyField('Category', blank=True)
- default = models.ForeignKey('Category', related_name='default_category', null=True, blank=True)
- objects = ProductManager()
- def __str__(self):
- return self.title
- def get_absolute_url(self):
- return reverse("product_detail", kwargs={"pk": self.pk})
- def get_image_url(self):
- img = self.productimage_set.first()
- if img :`enter code here`
- return img.image.url
- return img #None
- class Variation(models.Model):
- product = models.ForeignKey(Product)
- title = models.CharField(max_length=120)
- price = models.DecimalField(decimal_places=2, max_digits=20)
- sale_price = models.DecimalField(decimal_places=2, max_digits=20, null=True)
- active = models.BooleanField(default= True)
- inventory = models.IntegerField(default="-1",null=True, blank=True)
- def __str__(self):
- return self.title
- def image_upload_to_featured(instance, filename):
- title = instance.product.title
- slug = slugify(title)
- basename, file_extenssion = filename.split(".")
- new_filename = "%s-%s.%s" %(slug, instance.id, file_extenssion)
- return "products/%s/featured/%s" %(slug, new_filename)
- class ProductFeatured(models.Model):
- product = models.ForeignKey(Product)
- image = models.ImageField(upload_to=image_upload_to_featured)
- title = models.CharField(max_length=120, null=True, blank=True)
- description = models.CharField(max_length=220, null=True, blank=True)
- make_image_background = models.BooleanField(default=False)
- text_rigth = models.BooleanField(default=False)
- show_price = models.BooleanField(default=False)
- active = models.BooleanField(default=True)
- def __str__(self):
- return self.product.title
- def home(request):
- title = 'Sign Up Now'
- featured_image = ProductFeatured.objects.filter(active=True).order_by("?").first()
- products = Product.objects.all().order_by("?")[:8]
- products2 = Product.objects.all().order_by("?")[:4]
- categories = Category.objects.all()
- form = SignUpForm(request.POST or None)
- context = {
- "title": title,
- "form": form,
- "featured_image": featured_image,
- "products":products,
- "products2": products2,
- "categories": categories,
- }
- if form.is_valid():
- instance = form.save(commit=False)
- full_name = form.cleaned_data.get("full_name")
- if not full_name:
- full_name = "New full name"
- instance.full_name = full_name
- instance.save()
- context = {
- "title": "Thank you"
- }
- return render(request, "home.html", context)
- {% extends "base.html" %}
- {% load crispy_forms_tags %}
- {% load staticfiles %}
- {% block head_title %}Welcome | {{ block.super }}{% endblock %}
- <style>
- {% block style %}
- .jumbotron {
- background-color:#5ACDFF;
- color: #000;
- height: 350px;
- margin-top: -22px;
- {% if featured_image.make_image_background %}
- background-image:url('{{ featured_image.image.url }}');
- background-repeat: no-repeat;
- background-color: #000;
- background-size: cover;
- {% endif %}
- }
- {% endblock %}
- </style>
- {% block jumbotron %}
- {% if featured_image %}
- <div class="jumbotron" style="">
- <div class="container">
- <div class="row">
- <div class='col-sm-12 text-center{% if featured_image.text_right %} pull-right {% endif %}'>
- <p>
- <a class="btn btn-lg btn-primary" href="{{ featured_image.product.get_absolute_url }}" role="button">More Details </a>
- </p>
- </div>
- {% if not featured_image.make_image_background %}
- <div class='col-sm-6' >
- <img src="{{ featured_image.product.get_absolute_url }}" class='img-responsive' />
- </div>
- {% endif %}
- </div>
- </div>
- </div>
- {% else %}
- <div class="jumbotron">
- <div class="container">
- <div class="row">
- <div class='col-sm-6'>
- <h1>Welcome</h1>
- <p></p>
- </div>
- <div class='col-sm-6' >
- </div>
- </div>
- </div>
- </div>
- {% endif %}
- {% endblock %}
- {% block content %}
- <div class="container">
- <h3>Recommended Products</h3>
- <hr />
- {% include "products/products.html" with object_list=products %}
- <br />
- <h3>Featured Products</h3>
- <hr />
- {% include "products/products.html" with object_list=products2 %}
- </div>
- {% endblock %}
- import os
- BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
- SECRET_KEY = ''
- DEBUG = False
- ALLOWED_HOSTS = ['multi-ecommerce.herokuapp.com']
- EMAIL_HOST = 'smtp.gmail.com'
- EMAIL_HOST_USER = ''
- EMAIL_HOST_PASSWORD = ''
- EMAIL_PORT = 587
- EMAIL_USE_TLS = True
- EMAIL_DEBUG = False
- INSTALLED_APPS = (
- #django app
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- #third party apps
- 'crispy_forms',
- 'registration',
- 'django_filters',
- 'storages',
- #my apps
- 'newsletter',
- 'products',
- 'carts',
- 'orders',
- 'sellers',
- )
- ROOT_URLCONF = 'ecommerce2.urls'
- MIDDLEWARE_CLASSES = (
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- 'django.middleware.security.SecurityMiddleware',
- )
- ROOT_URLCONF = 'ecommerce2.urls'
- TEMPLATES = [
- {
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [os.path.join(BASE_DIR, "templates")],
- 'APP_DIRS': True,
- 'OPTIONS': {
- 'context_processors': [
- 'django.template.context_processors.debug',
- 'django.template.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
- ],
- },
- },
- ]
- WSGI_APPLICATION = 'ecommerce2.wsgi.application'
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
- }
- }
- import dj_database_url
- db_from_env = dj_database_url.config()
- DATABASES['default'].update(db_from_env)
- LANGUAGE_CODE = 'en-us'
- TIME_ZONE = 'UTC'
- USE_I18N = True
- USE_L10N = True
- USE_TZ = True
- STATIC_ROOT = 'staticfiles'
- STATIC_URL = '/static/'
- STATICFILES_DIRS = (
- os.path.join(BASE_DIR, "static_in_pro", "our_static"),
- )
- MEDIA_URL = '/media/'
- MEDIA_ROOT = os.path.join(BASE_DIR, "media")
- CRISPY_TEMPLATE_PACK = 'bootstrap3'
- ACCOUNT_ACTIVATION_DAYS = 7
- REGISTRATION_AUTO_LOGIN = True
- SITE_ID = 1
- LOGIN_REDIRECT_URL = '/'
- BRAINTREE_PUBLIC = ""
- BRAINTREE_PRIVATE = ""
- BRAINTREE_MERCHAND_ID = ""
- BRAINTREE_ENVIRONMENT = "sandbox"
- # AWS
- STATICFILES_LOCATION = 'static'
- MEDIAFILES_LOCATION = 'media'
- AWS_ACCESS_KEY_ID = ""
- AWS_SECRET_ACCESS_KEY = ""
- AWS_FILE_EXPIRE = 200
- AWS_PRELOAD_METADATA = True
- AWS_QUERYSTRING_AUTH = True
- DEFAULT_FILE_STORAGE = 'ecommerce2.utils.MediaRootS3BotoStorage'
- STATICFILES_STORAGE = 'ecommerce2.utils.StaticRootS3BotoStorage'
- AWS_STORAGE_BUCKET_NAME = 'multi-ecommerce'
- S3DIRECT_REGION = 'us-west-2'
- S3_URL = '//%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
- MEDIA_URL = '//%s.s3.amazonaws.com/media/' % AWS_STORAGE_BUCKET_NAME
- MEDIA_ROOT = MEDIA_URL
- STATIC_URL = S3_URL + 'static/'
- ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
- import datetime
- two_months = datetime.timedelta(days=61)
- date_two_months_later = datetime.date.today() + two_months
- expires = date_two_months_later.strftime("%A, %d %B %Y 20:00:00 GMT")
- AWS_HEADERS = {
- 'Expires': expires,
- 'Cache-Control': 'max-age=%d' % (int(two_months.total_seconds()), ),
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement