def handle(self, *args, **options):
     for filename in args:
         self.stdout.write("Reading {}".format(filename))
         defaults = parse(filename)
         categories = defaults.pop('categories')
         slug = defaults.pop('slug')
         #print(title)
         #print(categories)
         #pprint(defaults)
         # Implement update_or_create only available when 1.7 is out.
         try:
             post = Post.objects.get(slug=slug)
             for key, value in defaults.items():
                 setattr(post, key, value)
             post.save()
             self.stdout.write("Updated article {}".format(post.title))
         except Post.DoesNotExist:
             defaults.update({'slug': slug})
             post = Post(**defaults)
             post.save()
             self.stdout.write("Created article {}".format(post.title))
         for cat_name in categories:
             try:
                 post.categories.get(name=cat_name)
                 self.stdout.write("Found category {}.".format(cat_name))
             except Category.DoesNotExist:
                 try:
                     category = Category.objects.get(name=cat_name)
                     post.categories.add(category)
                     self.stdout.write(
                         "Assigned category {}.".format(cat_name)
                         )
                 except Category.DoesNotExist:
                     post.categories.create(name=cat_name)
                     self.stdout.write(
                         "Created category {}".format(cat_name)
                         )
         # Now do the redirects.
         # the Redirect model has an old_path, a new_path, and a site_id.
         # use settings.SITE_ID
         old_path = "/blogue/" + post.slug + ".html"
         new_path = "/blogue/" + post.slug + "/"
         defaults = {
             'site_id': settings.SITE_ID,
             'old_path': old_path,
             }
         try:
             redirect = Redirect.objects.get(**defaults)
             redirect.new_path = new_path
             redirect.save()
             self.stdout.write(
                 "Updated redirect {} ==> {}".format(old_path, new_path)
                 )
         except Redirect.DoesNotExist:
             defaults.update({'new_path': new_path})
             redirect = Redirect(**defaults)
             redirect.save()
             self.stdout.write(
                 "Created redirect {} ==> {}".format(old_path, new_path)
                 )
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 _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.º 5
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()
 def forwards(self, orm):
     # XXX use the first site
     site = Site.objects.all()[0]
     old_path = '/verification-kit/'
     new_path = '/tools-and-tips/'
     if len(Redirect.objects.filter(old_path=old_path)) == 0:
         redirect = Redirect(old_path=old_path,
                             new_path=new_path,
                             site=site,
                             )
         redirect.save()
Exemplo n.º 7
0
 def forwards(self, orm):
     # XXX use the first site
     site = Site.objects.all()[0]
     old_path = '/verify/'
     new_path = '/racks/'
     if len(Redirect.objects.filter(old_path=old_path)) == 0:
         redirect = Redirect(old_path=old_path,
                             new_path=new_path,
                             site=site,
                             )
         redirect.save()
Exemplo n.º 8
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.º 9
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.º 10
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.º 11
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.º 12
0
    def process_response(self, request, response):
        if response.status_code != 404:
            return response # No need to check for a redirect for non-404 responses.
        path = request.get_full_path()
        r = Redirect.all().filter('site =', db.Key(settings.SITE_ID)).filter(
            'old_path =', path).get()
        if r is None and settings.APPEND_SLASH:
            # Try removing the trailing slash.
            r = Redirect.all().filter('site =', db.Key(settings.SITE_ID)).filter(
                'old_path =', path[:path.rfind('/')]+path[path.rfind('/')+1:]
                ).get()
        if r is not None:
            if r.new_path == '':
                return http.HttpResponseGone()
            return http.HttpResponsePermanentRedirect(r.new_path)

        # No redirect was found. Return the response.
        return response
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.º 14
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.º 15
0
def drupal_redirect_django(path, post):
    from django.contrib.redirects.models import Redirect
    from django.contrib.sites.models import Site
    current = Site.objects.get_current()
    if path:
        dst = '/' + path.dst.strip('/') + '/'
        r = Redirect(site=current, old_path=dst, new_path='/example'+post.get_absolute_url())
        r.save()
        src = '/' + path.src.strip('/') + '/'
        r = Redirect(site=current, old_path=src, new_path='/example'+post.get_absolute_url())
        r.save()
Exemplo n.º 16
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))
Exemplo n.º 17
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.º 18
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.º 19
0
    def pre_save(self, instance, add):

        # get currently entered slug
        value = self.value_from_object(instance)

        manager = self.manager

        # autopopulate
        if self.always_update or (self.populate_from and not value):
            value = utils.get_prepopulated_value(self, instance)

            if __debug__ and not value:
                print 'Failed to populate slug %s.%s from %s' % \
                    (instance._meta.object_name, self.name, self.populate_from)

        slug = self.slugify(value)

        if not slug:
            # no incoming value,  use model name
            slug = instance._meta.module_name

        assert slug, 'slug is defined before trying to ensure uniqueness'

        slug = utils.crop_slug(self, slug)

        # ensure the slug is unique (if required)
        if self.unique or self.unique_with:
            slug = utils.generate_unique_slug(self, instance, slug, manager)

        assert slug, 'value is filled before saving'

        # check if redirect tracking is on and if so prepare
        if not add and self.redirect_tracking:

            # Can we import the needed django.contrib.redirects app
            try:
                from django.contrib.redirects.models import Redirect
                from django.contrib.sites.models import Site

            except ImportError:
                raise Exception("You are using redirect_tracking. Please be sure to add django contrib apps Redirect and Site to your INSTALLED_APPS.")

            # does model instance have get_absolute_url defined
            try:
                # capture current get_absolute_url
                pre_update_absolute_url = instance.get_absolute_url()

            except AttributeError:
                raise Exception("You are using redirect_tracking on a field whose model does not have get_absolute_url defined. You must define this method on your model.")

        # make the updated slug available as instance attribute
        setattr(instance, self.name, slug)

        if not add and self.redirect_tracking:
            # check if the slug update caused a change in get_absolute_url
            # if so and redirect_tracking = True, record in the django contrib redirect app.
            post_update_absolute_url = instance.get_absolute_url()

            if pre_update_absolute_url != post_update_absolute_url:
                # current site
                site = Site.objects.get_current()

                # add a redirect
                redirect = Redirect(
                    site=site,
                    old_path=pre_update_absolute_url,
                    new_path=post_update_absolute_url
                )
                redirect.save()

        return slug
 def setUp(self):
     self.redirect = Redirect(site_id=1, old_path='abc', new_path='cba')
     self.item = models.RedirectWithQueryParams(redirect=self.redirect)
Exemplo n.º 21
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()