Beispiel #1
0
def register(request):
    if request.method == 'POST':
        form = RegisterForm(request.POST)
        if form.is_valid() and not request.user.is_authenticated():
            data = form.cleaned_data
            new_user = User.objects.create_user(username=data['nickname'],
                                                password=data['password'])
            new = CustomUser(user=new_user,
                             sex=data.get('sex'),
                             phone=data.get('phone'))
            new.save()
            login(
                request,
                authenticate(username=new_user.username,
                             password=data.get('password2')))
            _return = {'message': '感谢您的注册'}
            _return.update(get_header(request))
            return render(request, 'redirect.html', _return)
        else:
            return render(request, 'register.html', {'form': form})
    elif request.method == 'GET':
        if request.user.is_authenticated():
            return render(request, 'redirect.html', {'message': '您已登陆'})
        form = RegisterForm()
        _return = {'form': form}
        _return.update(get_header(request))
        return render(request, 'register.html', _return)
Beispiel #2
0
 def setUp(self):
     self.user = CustomUser(username="******", password="******")
     self.user.save()
     self.create_like_article_url = reverse("create_like_article", args=[1, 'testuser'])
     self.data_like_article = {
         "reaction": 1
     }
 def setUp(self):
     self.list_categories = ['boisson', 'tartine', 'sandwich', 'viande']
     self.list_products = ['coca', 'tartine nutella', 'club', 'entrecote']
     self.command = Command()
     self.login = CustomUser(username='******',
                             email='*****@*****.**',
                             password='******')
     self.login.save()
Beispiel #4
0
def order_page(request, id):

    # Объявление начальных значений переменных
    order_img = Q()
    main_photo = Q()
    list_note = []
    order = None

    try:
        # Проверка принадлежности запрашиваемого заказа к текущему пользователю
        # Получения пользователя
        user = CustomUser.get_user(request)

        if user:
            # Получение заказа
            order = Order.get_order_by_client(id, user)

        if order != None:

            # Получаем список приложений данного ПО (ФАЙЛЫ, ФОТОГРАФИИ)
            if order.kind == "buy":
                software = Software.objects.get( order_software = id )

                #  Получение главного фото
                main_photo_query = software.get_main_photo()
                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for photo in main_photo_query:
                    main_photo = photo

                order_img = software.get_addition()
            else:
                #  Получение главного фото
                main_photo_query = order.get_main_photo()
                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for photo in main_photo_query:
                    main_photo = photo

                order_img = order.get_addition()

            # Исключения главного фото (main_photo) из списка фото
            if order_img:
                order_img = order_img.exclude(pk=main_photo.id)

            #  Для разрыва текста (скрытого и открытого)
            # Сплит строки по '\n' по первому вхождению - получаем массив элементов одной переменной
            if order.note:
                list_note = order.note.split('\n', 1)

            # Получение текущего пользователя 
            user = CustomUser.get_user(request)
            
            return render(request, 'order/order.html', {'order':order,  'user':user, 'list_note':list_note, 'order_img':order_img, 'main_photo':main_photo})

    except:
        raise Http404("Заказ не найден")

    raise Http404("Заказ не найден")
Beispiel #5
0
class TestManageNotification(TestCase):
    def setUp(self):
        self.user = CustomUser(username="******", password="******")
        self.user.save()

    def test_create_notification(self):
        ManageNotification().create_notification(self.user, "testuser", 1)
        notif_is_exist = Notification.objects.all().count()

        self.assertEquals(notif_is_exist, 1)
Beispiel #6
0
 def setUp(self):
     self.user = CustomUser(username="******", password="******")
     self.user.save()
     self.create_article_url = reverse("create_article")
     self.categories = Categories.objects.get_or_create(id=64)
     self.data_article = {
         "title": "testTile",
         "content_article": "test content",
         "id_category": 64
     }
Beispiel #7
0
class TestCommentsEndpoint(APITestCase):
    def setUp(self):
        self.user = CustomUser(username="******", password="******")
        self.user.save()
        self.category = Categories(name_category="TestCategory")
        self.category.save()
        self.article = Article(
            title="TestTitle",
            content_article="Test Content",
            id_category=self.category,
            id_user=self.user,
        ).save()
        self.get_all_url = reverse("getAll",
                                   args=[Article.objects.all()[0].id, 1])
        self.create_like_comment_url = reverse("create_like_comment",
                                               args=[0, 'testuser'])
        self.create_comment_url = reverse("Create_comment",
                                          args=[0, 'testuser'])
        self.data_like_comment = {"recation_comment": 1}
        self.data_comment = {"content_comment": "test comment"}

    def test_get_all_comment(self):
        response = self.client.get(self.get_all_url)
        self.assertEquals(response.status_code, status.HTTP_200_OK)

    def test_post_like_comment_unauthenticated(self):
        response = self.client.post(self.create_like_comment_url,
                                    self.data_like_comment,
                                    format='json')
        self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_post_like_comment_authenticated(self):
        self.client.force_login(
            CustomUser.objects.get_or_create(username='******')[0])
        response = self.client.post(self.create_like_comment_url,
                                    self.data_like_comment,
                                    format='json')
        self.assertEquals(response.status_code, status.HTTP_400_BAD_REQUEST)

    def test_post_create_comment_article_unauthenticated(self):
        response = self.client.post(self.create_comment_url,
                                    self.data_comment,
                                    format='json')
        self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_post_create_comment_article_authenticated(self):
        self.client.force_login(
            CustomUser.objects.get_or_create(username='******')[0])
        response = self.client.post(self.create_comment_url,
                                    self.data_comment,
                                    format='json')
        self.assertEquals(response.status_code, status.HTTP_400_BAD_REQUEST)
Beispiel #8
0
 def post(self, request):
     serializer = self.serializer_class(data=request.data)
     if serializer.is_valid():
         logger.info("Valid incoming data")
         username = serializer.data['username']
         password1 = serializer.data['password1']
         password2 = serializer.data['password2']
         email = serializer.data['email']
         user = CustomUser(username=username,
                           password=password1,
                           email=email)
         user.save()
         return Response(status=201)
     else:
         return Response(status=400)
Beispiel #9
0
def render_block_software(request, soft_list):

    # Хэш классификаций ПО
    tags_dict = {}
    photo_dict = {}

    for soft in soft_list:

        soft_tags_list = soft.get_tags()

        soft_photo = soft.get_main_photo()

        # Добавляем ключ и значение в словарь
        tags_dict[soft.id] = soft_tags_list

        if soft_photo is not None:

            # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
            for s in soft_photo:
                photo_dict[soft.id] = s

    # Получение текущего пользователя
    user = CustomUser.get_user(request)

    # Получение списка тегов похожих ПО

    result = ''

    result = render_to_string('soft/pattern_block_software.html', {
        'soft_list': soft_list,
        'photo_dict': photo_dict,
        'user': user
    })
    return result
Beispiel #10
0
def chat(request, id):

    # Объявление начальных значений переменных
    order = None

    try:

        # Проверка принадлежности запрашиваемого заказа к текущему пользователю
        # Получения пользователя
        user = CustomUser.get_user(request)

        if user:
            # Получение заказа
            order = Order.get_order_by_client(id, user)

            # Получение пременных из запроса
            next_messages = request.GET.get('next', None)
            # count_messages = request.GET.get('count', None)

            # Тогда просто отрисовывается страница чата с полседними 20 сообщениями
            if next_messages == None:

                dbl.log("111" )
                next_messages = 0

                message_block, count = get_messages(request, order, next_messages=next_messages)

                next_messages = 20

                return render(request, 'order/chat.html', {'order':order, 'message_block':message_block})

            # Догрузка сообщений
            else:

                dbl.log("444444444444444444" )

                # Данные по умолчанию - код ответа
                data = {'status': 'error'}

                # dbl.log("111" )
                
                message_block, count = get_messages(request, order, next_messages=next_messages)

                next_messages = int(next_messages)+20
                dbl.log(str(next_messages) )
                data['status'] = 'success'
                data['next'] = next_messages
                data['count'] = count
                data['result'] = message_block
                dbl.log("10101001" )


                return HttpResponse(json.dumps(data), content_type='application/json')


    except Exception as error:
            pass
            dbl.log("Ошибка работы" + str(error))

    return render(request, 'order/chat.html', {'order':order, 'chat':chat})
Beispiel #11
0
def favourites(request):
    # Получения пользователя
    user = CustomUser.get_user(request)
    dbl.log("1")

    if user:
        dbl.log("1")
        favourites = Software.get_favourites_by_user(user)
        dbl.log("1"+str(favourites))

        # Словарь главных фото
        photo_dict = {}
        dbl.log("1")
        for soft in favourites:

            # Получение главного фото
            soft_photo = soft.get_main_photo()

            if soft_photo is not None:

                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for s in soft_photo:
                    dbl.log("1")
                    photo_dict[soft.id] = s
        dbl.log("1")
        response= render(request, 'user/favourites.html', {'favourites':favourites, 'user':user, 'photo_dict':photo_dict})
        return response
Beispiel #12
0
 def setUp(self):
     self.user = CustomUser(username="******", password="******").save()
     self.id_user = CustomUser.objects.get(username="******").id
     self.research_user_url = reverse("research_user", args=['test'])
     self.create_subscribed_url = reverse("create_subscribed", args=['testuser'])
     self.all_info_user = reverse("all_info_user", args=[self.id_user])
     self.data_post_subscribe = {"id_receiving": self.id_user}
Beispiel #13
0
def software_download(request, software_id):

    form = Register_by_email_phone_Form()
    url_to_download = ""

    try:
        # Объявление начальных значений
        user = None
        cookie = {}

        # Получение текущего пользователя
        user, cookie = CustomUser.get_user_or_create(request)

        if user:

            software = Software.objects.get(id=int(software_id))

            # if software:
            # Строка запроса к платежной системе
            # url_to_download = "/software_id=" + str(software.pk) + "&amount=" + str(software.cost)

            response = render(request, 'soft/download.html', {
                'software': software,
                'user': user
            })
            response = util.views.wrap_cookie(response, cookie)
            return response

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    return redirect('software:catalog')
Beispiel #14
0
    def test_get_myaccount_with_bad_id(self):
        self.client.force_login(CustomUser.objects.get_or_create(username='******')[0])
        CustomUser(username="******").save()
        myaccount_url = reverse('myaccount', args=[CustomUser.objects.all()[1].id])
        account_url = reverse('account', args=[CustomUser.objects.all()[1].id])
        response = self.client.get(myaccount_url)

        self.assertRedirects(response, account_url, status_code=302)
Beispiel #15
0
def review_page(request, id):

    # Объявление начальных значений переменных
    similar_block = ""
    similar_tags_block = ""
    user = None

    try:

        # Получение текущего пользователя
        user = CustomUser.get_user(request)

        this_object = Review.objects.get(id=id)

        # Получаем список приложений данного отзыва
        review_img = this_object.get_addition()

        software = Software()
        photo_dict = {}

        if this_object.software is not None:

            software = Software.objects.get(id=this_object.software.id)

            if software:

                soft_photo = software.get_main_photo()

                if soft_photo is not None:
                    for s in soft_photo:
                        photo_dict[software.id] = s

                # Второстепенные объекты - похожие ПО
                similar_block = software_views.render_similars(
                    software, id_widget="same_software")
                similar_tags_block = software_views.render_similars_tags(
                    software)

    # except:
    #     raise Http404("Отзыв не найден")

    except Exception as error:
        pass
        dbl.log("Ошибка работы с отзывом" + str(error))

    rating = [1, 2, 3, 4, 5]
    return render(
        request, 'review/review.html', {
            'review': this_object,
            'rating': rating,
            'review_img': review_img,
            'software': software,
            'photo_dict': photo_dict,
            'similar_block': similar_block,
            'similar_tags_block': similar_tags_block,
            'user': user
        })
Beispiel #16
0
def favourites_clean(request):
    # Получения пользователя
    user = CustomUser.get_user(request)

    if user:
        favourites = Favourite.get_favourites_by_user(user)
        for fav in favourites:
            fav.delete()
        return render(request, 'user/favourites.html', {'favourites':None})
Beispiel #17
0
 def setUp(self):
     self.user = CustomUser(username="******", password="******")
     self.user.save()
     self.category = Categories(name_category="TestCategory")
     self.category.save()
     self.article = Article(
         title="TestTitle",
         content_article="Test Content",
         id_category=self.category,
         id_user=self.user,
     ).save()
     self.get_all_url = reverse("getAll",
                                args=[Article.objects.all()[0].id, 1])
     self.create_like_comment_url = reverse("create_like_comment",
                                            args=[0, 'testuser'])
     self.create_comment_url = reverse("Create_comment",
                                       args=[0, 'testuser'])
     self.data_like_comment = {"recation_comment": 1}
     self.data_comment = {"content_comment": "test comment"}
Beispiel #18
0
def review_create(request):

    # Получение данных из формы в переменную
    form = ReviewForm(request.POST)
    dbl.log("Форма" + str(form))

    # global list_crumb_for_software
    list_crumb_for_software = [['Главная', 'main:index'],
                               ['Отзывы', 'review:list_review']]
    #  Получение данных из формы и сохранение в бд
    if request.method == "POST":
        try:

            # Проверка принадлежности запрашиваемого заказа к текущему пользователю
            # Получения пользователя
            user = CustomUser.get_user(request)

            # Здесь автоматически проверяются все поля формы методами clean_...
            if form.is_valid():

                new_review = Review()
                new_review.kind = 'com'
                if user:
                    new_review.client = user

                new_review.content = form.cleaned_data['content']
                new_review.star = form.cleaned_data['star']
                new_review.name = form.cleaned_data['name']
                new_review.email_phone = form.cleaned_data['email_phone']
                new_review.save()

                addition_file = request.FILES.getlist('file')

                # Сохранение приложений файлов к отзыву (происходит тогда, когда все поля валидны)
                for file in addition_file:
                    dbl.log("777")
                    new_addition = Review_Addition()

                    new_addition.review = new_review
                    new_addition.photo = file
                    new_addition.save()

                return redirect('review:review_success')

        except Exception as error:
            pass
            dbl.log("Ошибка работы с отзывом" + str(error))

    rating = [5, 4, 3, 2, 1]
    return render(request, 'review/review_create.html', {
        'form': form,
        'rating': rating,
        'list_crumb': list_crumb_for_software
    })
Beispiel #19
0
def add_download(request, software_id):

    message = ""
    download_link = ""
    list_crumb = []

    try:

        # Получения пользователя
        user = CustomUser.get_user(request)

        if user:

            software = Software.objects.get(id=int(software_id))

            Download.objects.get_or_create(client=user, software=software)

            message = "Благодарим вас за доверие! Через 5 секунд начнется автоматическая загрузка."

            # download_url = software.file
            # download_url = '/softwares/download?id='+str(software.id)
            download_url = '/softwares/' + str(
                software.id) + '/download/send_file'

            dbl.log(str(download_url))
            h1 = "Успешная загрузка"
            list_crumb = [['Главная', 'software:catalog'],
                          ['Каталог', 'software:catalog'],
                          [
                              software.name, 'software:software_page',
                              software.id
                          ],
                          [
                              'Скачать бесплатно',
                              'software:software_download', software.id
                          ]]

            return render(
                request, 'common/successfull.html', {
                    'message': message,
                    'download_link': download_link,
                    'h1': h1,
                    'list_crumb': list_crumb,
                    'download_url': download_url
                })

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    message = "К сожалению, что-то пошло не так. Возможно вам стоит попробовать в следующий раз."

    return render(request, 'common/fail.html', {'message': message})
Beispiel #20
0
class TestCreateArticle(APITestCase):

    def setUp(self):
        self.user = CustomUser(username="******", password="******")
        self.user.save()
        self.create_article_url = reverse("create_article")
        self.categories = Categories.objects.get_or_create(id=64)
        self.data_article = {
            "title": "testTile",
            "content_article": "test content",
            "id_category": 64
        }

    def test_post_create_article_unauthenticate(self):
        response = self.client.post(self.create_article_url, self.data_article)
        self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_post_create_article_authenticated(self):
        self.client.force_login(CustomUser.objects.get_or_create(username='******')[0])
        response = self.client.post(self.create_article_url, self.data_article, format='json')
        self.assertEquals(response.status_code, 200)
Beispiel #21
0
def software_buy(request, software_id):

    form = Register_by_email_phone_Form()

    try:
        # Объявление начальных значений
        user = None
        cookie = {}

        # Получение текущего пользователя
        user, cookie = CustomUser.get_user_or_create(request)
        dbl.log("заказ " + str(user))

        if user:

            # Объявление начальных значений
            order = None
            url_to_pay = ""

            software = Software.objects.get(id=int(software_id))

            # Создание заказа
            new_order = Order()
            new_order.software = software
            new_order.client = user
            new_order.cost = software.price
            new_order.name = software.name
            # todo
            # Еще добавить тип ПО надо!
            # Еще добавить тип заказа надо!

            order = new_order.get_order_or_create()
            dbl.log("заказ " + str(order))

            if order:
                # Строка запроса к платежной системе
                url_to_pay = "/order_id=" + str(order.pk) + "&amount=" + str(
                    order.cost)

            response = render(request, 'soft/buy.html', {
                'software': software,
                'user': user,
                'url_to_pay': url_to_pay
            })
            response = util.views.wrap_cookie(response, cookie)
            return response

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    return redirect('software:catalog')
Beispiel #22
0
class TestPostLikeEndpoint(APITestCase):

    def setUp(self):
        self.user = CustomUser(username="******", password="******")
        self.user.save()
        self.create_like_article_url = reverse("create_like_article", args=[1, 'testuser'])
        self.data_like_article = {
            "reaction": 1
        }

    def test_post_create_like_article_unaunthenticated(self):

        response = self.client.post(
            self.create_like_article_url,
            self.data_like_article
        )
        self.assertEquals(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_post_create_like_article_authenticated(self):
        self.client.force_login(CustomUser.objects.get_or_create(username='******')[0])
        response = self.client.post(self.create_like_article_url, self.data_like_article, format='json')

        self.assertEquals(response.status_code, 400)
class TestCommand(TestCase):
    def setUp(self):
        self.list_categories = ['boisson', 'tartine', 'sandwich', 'viande']
        self.list_products = ['coca', 'tartine nutella', 'club', 'entrecote']
        self.command = Command()
        self.login = CustomUser(username='******',
                                email='*****@*****.**',
                                password='******')
        self.login.save()

    def test_get_email_user_subscribe(self):
        UserSubscribeEmail(id_user=self.login).save()
        self.command.get_email_user_subscribe()
        self.assertEquals(self.command.list_email, ['*****@*****.**'])

    def test_get_random_products(self):
        for i in range(3):
            category = Categories(name_category=self.list_categories[i])
            category.save()
            Products(id_category=category,
                     product_name=self.list_products[i]).save()

        self.command.get_random_products()
        self.command.text_content()

        self.assertEquals(len(self.command.txt.split('\n')), 4)
        self.assertEquals(len(self.command.list_products), 3)
        self.assertEquals(len(self.command.list_categories), 3)

    def test_send_all_email(self):
        self.command.list_email = ['*****@*****.**']
        msg = ('Toujours pleins de substituants chez PureButterWeb',
               "ahahahah", '*****@*****.**', self.command.list_email)
        mail.send_mass_mail((msg, ), fail_silently=False)

        self.assertEquals(len(mail.outbox), 1)
 def setUp(self):
     CustomUser(username="******").save()
     Categories(name_category="TestCategory").save()
     Article(
         title="TestTitle",
         content_article="Test Content",
         id_category=Categories.objects.all()[0],
         id_user=CustomUser.objects.all()[0],
     ).save()
     Comment(
         id_article=Article.objects.all()[0],
         id_user=CustomUser.objects.all()[0],
         content_comment="test comment",
     ).save()
     self.all_data_article = AllDataArticle()
     self.all_data_comment = AllDataComment()
     self.obj_article = Article.objects.all()
     self.obj_comment = Comment.objects.all()
Beispiel #25
0
def add_favourite(request, software_id):

    try:
        # Объявление начальных значений
        user = None
        cookie = {}

        # Получение текущего пользователя
        user, cookie = CustomUser.get_user_or_create(request)

        if user:

            software = Software.objects.get(id=int(software_id))

            data = {'status': 'success'}

            fav = software.is_favourite(user)

            if fav:

                fav.delete()

                data['result'] = False

            else:
                Favourite.objects.create(client=user, software=software)

                data['result'] = True

            response = HttpResponse(json.dumps(data),
                                    content_type='application/json')
            response = util.views.wrap_cookie(response, cookie)
            return response

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    return redirect('software:catalog')
Beispiel #26
0
def downloads(request):
    # Получения пользователя
    user = CustomUser.get_user(request)

    if user:
        downloads = Software.get_downloads_by_user(user)

        # Словарь главных фото
        photo_dict = {}

        for soft in downloads:

            # Получение главного фото
            soft_photo = soft.get_main_photo()

            if soft_photo is not None:

                # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
                for s in soft_photo:
                    photo_dict[soft.id] = s

        response= render(request, 'user/downloads.html', {'downloads':downloads, 'user':user, 'photo_dict':photo_dict})
        return response
Beispiel #27
0
def check_is_admin(request):
    return CustomUser.get_by_email(request.user.email).role == 1
Beispiel #28
0
def software_page(request, id):

    # Объявление начальных значений переменных
    # Хэш классификаций ПО
    classif = {}
    software = Software()
    software_img = Q()
    main_photo = Q()
    software_tag = Q()
    list_descr = []
    similar_block = ""
    similar_tags_block = ""
    discussion_comment_block = ""

    # Строка фильтра для хлебных крошек
    str_filter_for_breadcrumb = ""

    try:
        software = Software.objects.get(id=id)

        #  Получение главного фото
        main_photo_query = software.get_main_photo()
        dbl.log("сойт 2  " + str(main_photo_query))

        # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
        for photo in main_photo_query:
            main_photo = photo

        dbl.log("сойт 3  " + str(main_photo))

        # Получаем список приложений данного ПО (ФАЙЛЫ, ФОТОГРАФИИ)
        software_img = software.get_addition()

        dbl.log("сойт 4  " + str(software_img))

        # Исключения главного фото (main_photo) из списка фото
        if software_img:
            software_img = software_img.exclude(pk=main_photo.id)

        # Получаем список тегов данного ПО
        software_tag = software.get_tags()

        #  Для разрыва текста (скрытого и открытого)
        # Сплит строки по '\n' по первому вхождению - получаем массив элементов одной переменной
        list_descr = software.description.split('\n', 1)

        # Получаем список классификаций данного ПО
        classif, str_filter_for_breadcrumb = software.get_classifications()

        # Второстепенные объекты - похожие ПО
        similar_block = render_similars(software, id_widget="same_software")
        similar_tags_block = render_similars_tags(software)
        discussion_comment_block = render_discussion_comment(software,
                                                             request,
                                                             limit=5)

        # Получение текущего пользователя
        user = CustomUser.get_user(request)

        return render(
            request, 'soft/software.html', {
                'software': software,
                'software_img': software_img,
                'main_photo': main_photo,
                'classif': classif,
                'list_descr': list_descr,
                'software_tag': software_tag,
                'similar_block': similar_block,
                'similar_tags_block': similar_tags_block,
                'discussion_comment_block': discussion_comment_block,
                'user': user,
                'str_filter_for_breadcrumb': str_filter_for_breadcrumb
            })

    # except:
    #     raise Http404("ПО не найдено")

    except Exception as error:
        pass
        dbl.log("Ошибка работы " + str(error))

    # return render(request, 'soft/software.html', {'software':software, 'software_img':software_img, 'main_photo':main_photo, 'classif':classif,
    # 'list_descr':list_descr, 'software_tag':software_tag, 'similar_block':similar_block, 'similar_tags_block':similar_tags_block,
    # 'discussion_comment_block':discussion_comment_block})

    raise Http404("ПО не найдено")
Beispiel #29
0
 def save(self, commit=True):
     return CustomUser.create(self.cleaned_data.get("email"), self.cleaned_data.get("password1"),
                              self.cleaned_data.get("first_name"), self.cleaned_data.get("middle_name"),
                              self.cleaned_data.get("last_name"))
Beispiel #30
0
def catalog(request):
    soft_list = Software.objects.all().filter(date_of_delete=None,
                                              visibility=True)

    dbl.log("mmmmm")
    dbl.log("бббб" + str(request))

    # Получение пременных из формы поиска
    search_query_name = request.GET.get('soft_name', '')
    search_query_tags = request.GET.get('soft_tags', '')
    soft_price = request.GET.get('soft_price', '')
    soft_pricefrom = request.GET.get('soft_pricefrom', '')
    soft_priceto = request.GET.get('soft_priceto', '')
    modification = request.GET.get('modification', '')
    sort_param = request.GET.get('sort', '')
    if sort_param is None:
        sort_param = ""
    count = request.GET.get('count', '10')
    if count == "":
        count = 10
    count = int(count)
    try:
        page = int(request.GET.get('page', '1'))
    except:
        page = 1

    # Словарь для фильтра классификаций
    classification_dict = {}
    vertical_widget = None
    list_tags = []

    # Перебор всех пришедших аргументов
    for req in request.GET.items():

        # Проверка валидности значения имени (классификации)
        if re.match(r'classification_(\d+)_value_(\d+)', str(req[0])):

            # Проверка значения поля формы поиска
            if str(req[1]) != "" and str(req[1]).isdigit():

                # Добавление значения в словарь
                classification_dict[str(req[0])] = str(req[1])

    #  Перменная составления запроса с фильтрами по классификациям
    cond = Q()

    # Перебор словаря классификаций
    for cl_val in classification_dict.values():

        # Добавление условия фильтрации
        cond |= Q(classification_value=int(cl_val))

    # Фильтрация списка всех ПО по выбранным классификациям
    soft_list = soft_list.filter(cond)

    # Исключение повторений ПО
    soft_list = soft_list.order_by('id').distinct()

    # Фильтрация по цене (бесплатные ПО)
    if soft_price == "soft_price_free":
        soft_list = soft_list.filter(price=0)

    # Фильтрация по цене (платные ПО)
    if soft_price == "soft_price_paid":
        soft_list = soft_list.exclude(price=0)

    # Фильтрация по начальной цене
    if soft_pricefrom:
        soft_list = soft_list.filter(price__gte=soft_pricefrom)

    # Фильтрация по конечной цене
    if soft_priceto:
        soft_list = soft_list.filter(price__lte=soft_priceto)

    # Фильтрация по наименованию ПО
    if search_query_name:
        soft_list = soft_list.filter(name__icontains=search_query_name)

    # Фильтрация по полю доработки
    if modification:
        soft_list = soft_list.filter(modification=True)

    # Фильтрация по списку тегов ПО
    if search_query_tags:

        # Сплит строки запроса
        dbl.log("ввввввв  " + str(search_query_tags))
        list_tags = re.split(r'[ ,]+', search_query_tags)
        dbl.log("ртртртрт  " + str(list_tags))

        # Фильтрация ПО по списку тегов
        soft_list = Software.get_softwares_by_tags(soft_list, list_tags)
        dbl.log("ddddddddd " + str(soft_list))

    # Хэш классификаций ПО
    tags_dict = {}
    photo_dict = {}
    vertical_widget_photo_dict = {}

    for soft in soft_list:

        soft_tags_list = soft.get_tags()

        soft_photo = soft.get_main_photo()

        # Добавляем ключ и значение в словарь
        tags_dict[soft.id] = soft_tags_list

        if soft_photo is not None:

            # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
            for s in soft_photo:
                photo_dict[soft.id] = s

    # Получение текущего пользователя
    user = CustomUser.get_user(request)

    # Получение списка всех видов ПО
    classifications = Classification.objects.all().filter(
        date_of_delete=None, visibility=True).order_by('id')

    # if request.is_ajax():
    #     dbl.log("hhhh")
    #     for soft in soft_list:
    #         dbl.log("---  " + str(soft))
    #     response = sort( request, soft_list)
    #     dbl.log("hhhh "+str(response))
    #     return response

    # Сортировка, показать по, перейти на страницу
    soft_list = util.views.sort_show_by(soft_list, sort_param, count, page)

    # Составление вертикального виджета
    # Список типов виджетов
    choice_widget_list = ['popular', 'new']
    # Выбор типа
    choice_widget = random.choice(choice_widget_list)
    # dbl.log("виджеты " + str(choice_widget))

    # Популярные ПО
    if choice_widget == "popular":
        vertical_widget_all = Software.get_popular()
        # dbl.log("виджеты " + str(vertical_widget_all))

        if len(vertical_widget_all) > 6:
            vertical_widget = random.sample(vertical_widget_all, 6)
        else:
            vertical_widget = vertical_widget_all
        # dbl.log("виджеты " + str(vertical_widget))

    # Новые ПО
    elif choice_widget == "new":
        vertical_widget = Software.get_new()

    for soft in vertical_widget:

        vertical_widget_soft_photo = soft.get_main_photo()

        if vertical_widget_soft_photo is not None:

            # Здесь перебор в цикле, но на самом деле в этом запросе всего 1 объект
            for s in vertical_widget_soft_photo:
                vertical_widget_photo_dict[soft.id] = s

    response = render(
        request, 'soft/catalog.html', {
            'soft_list': soft_list,
            'photo_dict': photo_dict,
            'count': count,
            'sort_param': sort_param,
            'page': page,
            'modification': modification,
            'search_query_name': search_query_name,
            'soft_price': soft_price,
            'soft_pricefrom': soft_pricefrom,
            'list_tags': list_tags,
            'soft_priceto': soft_priceto,
            'tags_dict': tags_dict,
            'classifications': classifications,
            'classification_dict': classification_dict,
            'user': user,
            'choice_widget': choice_widget,
            'vertical_widget': vertical_widget,
            'vertical_widget_photo_dict': vertical_widget_photo_dict
        })
    return response