예제 #1
0
 def link(self):
     """Ссылка на товар/услугу"""
     link = '/product/%s/' % self.id
     if self.code and self.name:
         link = '/product/%s-%s/' % (translit(self.name), self.code)
     elif self.name:
         link = '/product/%s-%s/' % (translit(self.name), self.id)
     return link
예제 #2
0
    def fetch_mapa(self):
        """Получить ссылки на разделы"""
        content = None
        while not content:
            try:
                r = requests.get(self.domain, headers=self.headers)
                content = r.text
            except Exception as e:
                logger.info('[ERROR]: %s' % e)

        tree = lxml_html.fromstring(content)
        box = tree.xpath('//div[@id="categories-2"]')[0]
        ahrefs = box.xpath('.//ul/li/a')
        result = [{
            'href': link.attrib.get('href'),
            'name': link.text,
        } for link in ahrefs]
        for menu in result:
            name = menu['name'].strip()
            link = '/phones/%s/' % translit(name)
            analog = Blocks.objects.filter(container=self.container,
                                           name=name).first()
            if not analog:
                analog = Blocks.objects.create(container=self.container,
                                               name=name,
                                               link=link,
                                               state=4)
            menu['block'] = analog

        return result
예제 #3
0
    def create_menu_link(self, force: bool = False):
        """Создание ссылки для меню
           1) Только тип ссылка (state=4)
              Только без уже имеющейся ссылки
           2) Только с именем
              Только с типом контейнера меню (state=1)
           :param force: создать ссылку независимо от типа контейнера
        """
        if not self.state == 4 or not self.name:
            return

        if not force:
            if not self.container.state == 1 or self.link:
                return
        link = None
        # --------------------------------------------------
        # Если есть родительская ссылка, нужно ее подставить
        # --------------------------------------------------
        parents = None
        if self.parents:
            if '_' in self.parents:
                parent = self.parents.split('_')[-1]
                try:
                    parent = int(parent)
                except ValueError:
                    parent = None
                if parent:
                    parent_menu = Blocks.objects.filter(pk=parent).values_list(
                        'link', flat=True).first()
                    if parent_menu:
                        link = parent_menu
        if link:
            link += translit(self.name) + '/'
        else:
            link = '/' + translit(self.name) + '/'
        link = fix_multiple_dashes(link)
        self.link = link
예제 #4
0
def fast_create_props(request):
    """Быстрое создание свойств пачкой
       :param request: HttpRequest
    """
    result = {}
    perms = get_user_permissions(request.user, props_vars['model'])
    if not request.method == 'POST' or not request.POST.get(
            'props') or not perms['create']:
        result['error'] = 'Недостаточно прав' if not perms[
            'create'] else 'Нет данных для сохранения'
        return JsonResponse(result, safe=False)

    props = []
    props_count = request.POST.get('props', 0)
    try:
        props_count = int(props_count)
    except ValueError:
        return JsonResponse(result, safe=False)
    for i in range(props_count):
        props.append({
            'name': request.POST.get('name_%s' % i).strip(),
            'code': request.POST.get('code_%s' % i).strip(),
        })
    already_exists = 0
    created = 0
    for prop in props:
        if not prop['name']:
            continue
        code = prop['code'] or translit(prop['name'])
        analog = Property.objects.filter(code=code)
        if analog:
            already_exists += 1
            continue
        analog = Property.objects.create(name=prop['name'], code=code)
        created += 1
    result['success'] = 'Данные успешно сохранены'
    if already_exists:
        result['success'] += '<br>Уже найдено свойств: %s' % already_exists
        result['success'] += '<br>Добавлено новых свойств: %s' % created
    if not created:
        result['error'] = 'Не добавлено ни одного свойство'
    return JsonResponse(result, safe=False)
예제 #5
0
def feedback_form(request,
                  q_string: dict = None,
                  files: list = None,
                  lang: str = 'ru',
                  fields: list = None):
    """Форма обратной связи
       q_string используем для дополнительных полей,
       которые хотим обработать аналогично fv
    """
    if not q_string:
        q_string = {}
    if not files:
        files = []
    if not fields:
        fields = []

    fv = {
        'ifuser': None,
        'phone': None,
        'name': None,
        'email': None,
        'address': None,
        'recall': None,
        'msg': None,
        'file': None,
    }
    # ----
    # POST
    # ----
    if request.method == 'POST':
        for key in fv:
            values = request.POST.getlist(key)
            items = [item.strip() for item in values if item.strip()]
            if len(items) == 1:
                items = items[0]
            fv[key] = items
            q_string[key] = items
        # --------------------------------
        # Заносим все отправленные данные,
        # которые еще не занесены
        # --------------------------------
        for key, value in request.POST.items():
            if not key in fv:
                fv[key] = value

        if request.FILES:
            if request.FILES:
                failo = request.FILES.get('file')
                if failo:
                    name = translit(failo.name)
                    ext = ''
                    if '.' in failo.name:
                        name = failo.name.split('.')[0]
                        ext = '.%s' % failo.name.split('.')[-1]
                    fname = name + ext
                    # ---------------------------------------------------
                    # mail.attach(fname, failo.read(), failo.content_type)
                    # ---------------------------------------------------
                    fv['file'] = {
                        'name': fname,
                        'content': failo.read(),
                        'content_type': failo.content_type,
                    }

    lang_vars = {
        'ru': [
            ('name', 'ФИО'),
            ('email', 'Email'),
            ('phone', 'Телефон'),
            ('address', 'Адрес'),
            ('recall', 'Пользователь хочет, чтобы вы ему перезвонили'),
            ('msg', 'Сообщение пользователя'),
        ],
        'en': [
            ('name', 'User Name'),
            ('email', 'Email'),
            ('phone', 'Phone'),
            ('address', 'Address'),
            ('recall', 'User wait for you call him'),
            ('msg', 'Message'),
        ],
    }

    fv['result'] = '<br>\n'.join([
        '%s: %s' % (item[1], request.POST.get(item[0]))
        for item in lang_vars[lang] if request.POST.get(item[0])
    ])

    # -------------------
    # Дополнительные поля
    # -------------------
    for field in fields:
        key = request.POST.get(field['name'])
        if key:
            fv['result'] += '<br>\n%s: %s' % (field['value'], key)
    # --------------
    # Служебные поля
    # --------------
    sys_fields = (
        ('ip', request.META.get('REMOTE_ADDR')),
        ('referer', request.META.get('HTTP_REFERER')),
        ('browser', request.META.get('HTTP_USER_AGENT')),
    )
    fv_sys = '<br>\n'.join(
        ['%s: %s' % (item[0], item[1]) for item in sys_fields if item[1]])

    fv['result'] += '<br><br>\n\n%s' % fv_sys

    domain = request.META.get('HTTP_HOST', '')  #.decode('idna')
    fv['domain'] = domain
    fv['title'] = '%s Пользователь оставил сообщение %s' % (
        domain, datetime.datetime.today().strftime('%d-%m-%Y %H:%M'))

    fv['emails'] = feedback_emails()
    fv['sender'] = settings.EMAIL_HOST_USER

    return fv
예제 #6
0
def translit_tag(text: str):
    """Транслит
     :param text: текст"""
    return translit(text)
예제 #7
0
 def find_genre_altname(self, z=0):
     if self.name:
         self.altname = translit(self.name)