Exemplo n.º 1
0
    def get(self, request, sku_id):
        # 查询商品SKU信息
        try:
            sku = GoodsSKU.objects.get(id=sku_id)
        except GoodsSKU.DoesNotExist:
            return Redirect(reverse('goods:index'))

        # 查询所有商品分类信息
        categories = GoodsCategory.objects.all()
        # 查询最新商品推荐
        try:
            news_skus = GoodsSKU.objects.filter(
                category=sku.category).order_by('-create_time')[0:2]
        except:
            news_skus = None
        # 如果已登录,查询购物车信息
        cart_count = self.get_cart_count(request)
        # 查询其他规格商品
        other_skus = GoodsSKU.objects.filter(spu=sku.spu).exclude(id=sku_id)

        # 保存用户的浏览记录
        if request.user.is_authenticated():
            strict_redis = get_redis_connection()  # StrictRedis
            key = 'history_%s' % request.user.id
            strict_redis.lrem(key, 0, sku_id)
            strict_redis.lpush(key, sku_id)
            strict_redis.ltrim(key, 0, 4)
        context = {
            'sku': sku,
            'categories': categories,
            'news_skus': news_skus,
            'cart_count': cart_count,
            'other_skus': other_skus
        }
        return render(request, 'detail.html', context)
Exemplo n.º 2
0
def reslug(modeladmin, request, queryset):
    """
    admin action to reset the slug of an entry

    creates a redirect too

    - If the slug hasnt changed, do nothing
    - If the redirect already exists, don't create a new redirect
    - If there is a redirect that will send this into a loop,
        remove that redirect and create a new one
    """
    for obj in queryset:
        old_url = obj.get_absolute_url()

        obj.slug = None
        obj.save()

        if old_url != obj.get_absolute_url():
            try:
                redirect = Redirect.objects.get(site=get_current_site(request), old_path=old_url, new_path=obj.get_absolute_url())
            except ObjectDoesNotExist:
                try:
                    looping_redirect = Redirect.objects.get(site=get_current_site(request), old_path=obj.get_absolute_url(), new_path=old_url)
                    looping_redirect.delete()
                except ObjectDoesNotExist:
                    pass
                redirect = Redirect(site=get_current_site(request), old_path=old_url, new_path=obj.get_absolute_url())
                redirect.save()
Exemplo n.º 3
0
def create_redirect(sender, instance, raw, **kwargs):

    # Only proceed if not raw, we're dealing with an existing object, and the
    # contrib redirects app is installed.
    if not raw and instance.pk \
            and 'django.contrib.redirects' in settings.INSTALLED_APPS:

        from django.contrib.redirects.models import Redirect

        # Only proceed if an existing object exists
        try:
            existing = sender.objects.get(pk=instance.pk)
        except sender.DoesNotExist:
            return

        existing_path = existing.get_absolute_url()
        new_path = instance.get_absolute_url()

        if hasattr(instance, 'site') and existing.site != instance.site:
            new_path = '//{0}{1}'.format(instance.site.domain, new_path)

        if existing_path != new_path:
            try:
                redirect = Redirect.objects.get(site=existing.site,
                                                old_path=existing_path)
            except Redirect.DoesNotExist:
                redirect = Redirect(site=existing.site, old_path=existing_path)
            redirect.new_path = new_path
            redirect.save()
Exemplo n.º 4
0
def create_redirect(old_path, new_path):
    obj, is_exists = check_redirect_exists(old_path)
    if is_exists:
        obj.update(new_path=new_path)
    else:
        Redirect(site_id=settings.SITE_ID,
                 old_path=old_path,
                 new_path=new_path).save()
Exemplo n.º 5
0
 def _setup_redirect(self, old, new):
     if old != new:
         try:
             r = Redirect(site=self.conf['pages']['site'],
                          old_path=old,
                          new_path=new)
             r.save()
         except:
             self.logger.warn("Could not setup redirect %s to %s " %
                              (old, new))
Exemplo n.º 6
0
 def _setup_redirects(self, page):
     """
     Setup redirects for new URLs
     """
     for url in self.document.old_urls():
         if url != page.url:
             r = Redirect(site=self.conf['pages']['site'],
                          old_path=url,
                          new_path=page.url)
             r.save()
Exemplo n.º 7
0
    def save(self, *args, **kwargs):
        if hasattr(self, 'get_absolute_url'):
            model = self.__class__
            if self.pk is not None:
                old_object = model.objects.get(pk=self.pk)
                if old_object.slug != self.slug:
                    redirect = Redirect(site=self.site,
                                        old_path=old_object.get_absolute_url(),
                                        new_path=self.get_absolute_url())
                    redirect.save()

        super(Slugged, self).save(*args, **kwargs)
Exemplo n.º 8
0
    def get(self, request, category_id, page_num):
        '''

        :param request:
        :param category_id: 商品类别id
        :param page_num: 页码
        :return:
        '''
        # 获取请求参数(排序方式)
        sort = request.GET.get('sort')
        # 校验参数合法性
        try:
            category = GoodsCategory.objects.get(id=category_id)
        except GoodsCategory.DoesNotExist:
            return Redirect(reverse('goods:index'))
        categories = GoodsCategory.objects.all()
        try:
            new_skus = GoodsSKU.objects.filter(
                category=category).order_by('-create_time')[0:2]
        except GoodsSKU.DoesNotExist:
            new_skus = None
        if sort == 'price':
            skus = GoodsSKU.objects.filter(category=category).order_by('price')
        elif sort == 'hot':
            skus = GoodsSKU.objects.filter(
                category=category).order_by('-sales')
        else:
            skus = GoodsSKU.objects.filter(category=category)
            sort = 'default'
        # 分页内容
        # 分页显示
        # 参数1:一页显示多少条数据
        # 参数2 要分页的数据
        paginator = Paginator(skus, 2)
        try:
            page = paginator.page(page_num)
        except EmptyPage:
            # 页码不存在
            page = paginator.page(1)
        cart_count = self.get_cart_count(request)
        context = {
            'category': category,
            'categories': categories,
            'sort': sort,
            'new_skus': new_skus,
            'page': page,
            'page_range': paginator.page_range,
            'cart_count': cart_count
        }
        return render(request, 'list.html', context)
Exemplo n.º 9
0
def create_redirect(request):

    if request.method == 'POST':

        next = request.GET.get('next', '/admin/djangodblog/report/')
        form = RedirectForm(request.POST)
        if form.is_valid():
            redirect = form.save()
            all_errors = Error.objects.filter(
                url=FULL_SITE_URL +
                form.cleaned_data['old_path']).update(redirected=True)
            request.user.message_set.create(
                message="Successfully created a redirect from %s to %s" %
                (redirect.old_path, redirect.new_path))
            return HttpResponseRedirect(next)

    old_path = request.GET.get('old_path', None)
    url = ('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=' +
           old_path)
    response = urllib2.urlopen(
        urllib2.Request(url, None, {'Referer': 'localhost'}))
    try:
        results = simplejson.load(response)['responseData']['results']
        suggested_urls = [
            trim_host(x['url']) for x in results
            if x['url'].startswith(FULL_SITE_URL)
        ]
        new_path = suggested_urls[0]
    except:
        new_path = None
    form = RedirectForm(instance=Redirect(old_path=trim_host(old_path),
                                          new_path=trim_host(new_path),
                                          site=Site.objects.all()[0]), )

    context = {
        'form': form,
        'old_url': trim_host(old_path),
        'new_url': new_path,
        'next': request.META.get("HTTP_REFERER", None),
        'suggested_urls': suggested_urls[1:],
        'full_site_url': FULL_SITE_URL,
    }

    return render_to_response('admin/create_redirect.html', context,
                              RequestContext(request))
def create_job_redirect(job):
    if not job.unique_slug:
        job.generate_slug()

    for url in [
            "job_view",
            "thumbnail_view",
            "applied_users_details",
            "get_job_applications",
            "job_application_challenge_submission",
    ]:

        redirect = Redirect(
            site_id=settings.SITE_ID,
            old_path=reverse(url, kwargs={"unique_slug": job.pk}),
            new_path=reverse(url, kwargs={"unique_slug": job.unique_slug}),
        )

        redirect.save()
Exemplo n.º 11
0
def redirect_series(sender: Type[Series], instance: Series, **kwargs):
    """
    Receive a signal when a series is about to be saved.

    If the series exists and its slug has changed,
    rename its directory and create a new
    :class:`~django.contrib.redirects.models.Redirect`.

    :param sender: The model class that sent the signal.
    :param instance: The instance of the model.
    """
    if not instance.id:
        return
    try:
        current = Series.objects.get(id=instance.id)
    except Series.DoesNotExist:
        return
    if current.slug != instance.slug:
        old_path = current.get_absolute_url()
        old_dir = current.get_directory()
        new_path = instance.get_absolute_url()
        new_dir = instance.get_directory()
        # Update any existing redirects that are pointing to the old path
        for redirect in Redirect.objects.filter(new_path=old_path):
            redirect.new_path = new_path
            if redirect.new_path == redirect.old_path:
                redirect.delete()
            else:
                redirect.save()
        # Now add the new redirects
        Redirect.objects.bulk_create([
            Redirect(site_id=site_id, old_path=old_path, new_path=new_path)
            for site_id in Site.objects.values_list('id', flat=True)
        ])
        _move(old_dir, str(new_dir))
        instance.cover = instance.cover.name.replace(str(old_dir),
                                                     str(new_dir))
        for chapter in instance.chapters.prefetch_related('pages').iterator():
            pages = chapter.pages.all()
            for page in pages:
                page.image = page.image.name.replace(str(old_dir),
                                                     str(new_dir))
            Page.objects.bulk_update(pages, ('image', ))
Exemplo n.º 12
0
    def save(self, *args, **kwargs):
        """Override default save method.

        Create new slug if necessary.
        Create new redirect if slug/URL changes.

        The slug changes when the date or title of the event changes. We want to always use the current
        slug/URL, but don't invalidate the old URLs.
        """
        try:
            old_url = self.get_absolute_url()
        except NoReverseMatch:
            old_url = None

        self.slug = self.generate_slug()
        new_url = self.get_absolute_url()

        if old_url and old_url != new_url:
            site = Site.objects.get_current()
            Redirect(old_path=old_url, new_path=new_url, site=site).save()

        super(Event, self).save(*args, **kwargs)
Exemplo n.º 13
0
def _create_redirects(site, rows):
    for row in rows:
        old_path = row["from"]
        new_path = row["to"]
        redirect = Redirect(site=site, old_path=old_path, new_path=new_path)
        redirect.save()
 def setUp(self):
     self.redirect = Redirect(site_id=1, old_path='abc', new_path='cba')
     self.item = models.RedirectWithQueryParams(redirect=self.redirect)