示例#1
0
    def test_category_page(self):
        category = Category()
        category.name = 'Экономика'
        category.description = 'Новости экономики'
        category.slug = 'economy'
        category.save()

        news = News()
        news.title = 'Моя первая новость'
        news.announcement = 'Анонс первой новости'
        news.pub_date = timezone.now()
        news.category = category
        news.save()

        all_news = News.objects.all()
        self.assertEquals(len(all_news), 1)
        only_news = all_news[0]
        self.assertEquals(only_news, news)

        category_url = news.category.get_absolute_url()
        response = self.client.get(category_url)
        self.assertContains(response, news.category.name, status_code=200)

        #проверяем атрибуты
        self.assertEquals(only_news.title, 'Моя первая новость')
        self.assertEquals(only_news.announcement, 'Анонс первой новости')
        self.assertEquals(only_news.pub_date.day, news.pub_date.day)
        self.assertEquals(only_news.pub_date.year, news.pub_date.year)
示例#2
0
def pick_top_headlines():
    newsapi = NewsApiClient(api_key=settings.NEWS_API_KEY)
    for category in categories:
        top = newsapi.get_top_headlines(country='ua', category=category)
        logger.info(f'receive top headlines in {category}')
        category_obj = Category.objects.get(slug=category)
        if top['status'] == 'ok':
            articles = top['articles']
            news = []
            for article in articles:
                one_news = News(
                    category=category_obj,
                    author=article['author'] or '',
                    title=article['title'] or '',
                    description=article['description'] or '',
                    url=article['url'] or '',
                    url_to_image=article['urlToImage'] or '',
                    published_at=make_aware(
                        datetime.datetime.strptime(article['publishedAt'],
                                                   '%Y-%m-%dT%H:%M:%SZ')),
                    content=article['content'] or '',
                )
                news.append(one_news)
            News.objects.bulk_create(news, ignore_conflicts=True)
            logger.info(f'save received news in {category} to db')
示例#3
0
    def search(self, subject) -> list:
        """pesquisa notícias de acordo com o assunto especificado

        Arguments:
            subject {string} -- assunto pesquisado

        Returns:
            list -- lista de notícias encontradas
        """
        url = self.get_url_search(subject)
        page = requests.get(url)
        soup = BeautifulSoup(page.text, 'html.parser')

        container_list = soup.find_all(class_=self.container_class)
        news_list = []

        for news in container_list:
            figure_url = self.get_figure_url(news)
            title = self.get_title(news)
            published_at = news.find(class_=self.published_class).contents[0]

            founded = News(figure_url, title, published_at, subject, self.name)

            news_list.append(founded)

        return news_list
示例#4
0
    def store_db(self, item):
        engine = db_connect()
        session = sessionmaker(bind=engine)
        session = session()
        news = News()

        imgs = []
        if item['imgs'] is not None:
            for img in item['imgs']:
                i = Imgs()
                i.img = img
                imgs.append(i)

        tags = []
        if item['tags'] is not None:
            for tag in item['tags']:
                t = Tags()
                t.tag = tag.lower()
                news.tags.append(t)

        news.link = item['link']
        news.title = item['title']
        news.subtitle = item['subtitle']
        news.session = item['session']
        news.sub_session = item['sub_session']
        news.author = item['author']
        news.publisher = item['publisher']
        news.text = item['text']
        news.imgs = imgs
        news.datetime = convert_datetime(item['date'], item['hour'])

        session.add(news)
        session.commit()
        session.close()
示例#5
0
def Release_News(request):
    '''
    Release_News
    '''
    unsubjected = False
    subject_list = ProjectSingle.objects.all().order_by('school').exclude(
        school__schoolName=u'测试用学校')
    for project in subject_list:
        if project.project_grade.grade == GRADE_UN:
            unsubjected = False
            break

    if unsubjected:
        release = False
    else:
        html = refresh_member_table(subject_list)
        release = True
        title = datetime.datetime.today().year
        data = News(news_title=title.__str__() + '年创新项目级别汇总',
                    news_content=html,
                    news_category=NewsCategory.objects.get(
                        category=NEWS_CATEGORY_ANNOUNCEMENT))
        data.save()
    loginfo(p=release, label="release")
    return simplejson.dumps({'release': release})
示例#6
0
    def test_delete_new(self):
        category = Category()
        category.name = 'Экономика'
        category.description = 'Новости экономики'
        category.slug = 'economy'
        category.save()

        news = News()
        news.title = 'Моя первая новость'
        news.announcement = 'Анонс первой новости ++'
        news.text = 'Текст первой новости!!!'
        news.pub_date = timezone.now()
        news.category = category
        news.save()

        all_news = News.objects.all()
        self.assertEquals(len(all_news), 1)

        self.client.login(username='******', password='******')

        response = self.client.post('/admin/news/news/' + str(news.id) +
                                    '/delete/', {'post': 'yes'},
                                    follow=True)
        self.assertContains(response, 'успешно удален', status_code=200)

        all_news = News.objects.all()
        self.assertEquals(len(all_news), 0)
示例#7
0
文件: views.py 项目: ITYf/webDemo
def news_add(request):
    if request.method == 'POST':
        '''
        每创建一条记录时,
        字段都要填写完整,
        这里由于用户模块还没完善,
        所以写死了user_id=1,
        并把此实例传给表单保存
        '''
        user = Users.objects.get(user_id=1)
        news = News(user=user)
        # 这里有上传文件的功能,所以可用request.FILES代替request.POST
        form = NewsAddModelForm(request.POST or None,
                                request.FILES or None,
                                instance=news)
        if form.is_valid():
            form.save()
            print('success')
            messages.add_message(request, messages.SUCCESS, '文章发布成功,等待管理员审核!')
            return redirect('/')
        else:
            messages.add_message(request, messages.WARNING, '检查您输入的信息是否正确!')
    else:
        form = NewsAddModelForm()
        messages.add_message(request, messages.WARNING,
                             '如果要发布信息,那么每一个字段都要填写...')
    template = get_template('news_add.html')
    request_context = RequestContext(request)
    request_context.push(locals())
    html = template.render(request_context)

    return HttpResponse(html)
示例#8
0
    def test_edit_news(self):
        category = Category()
        category.name = 'Экономика'
        category.description = 'Новости экономики'
        category.slug = 'economy'
        category.save()

        news = News()
        news.title = 'Моя первая новость'
        news.announcement = 'Анонс первой новости ++'
        news.text = 'Текст первой новости!!!'
        news.pub_date = timezone.now()
        news.category = category
        news.save()

        self.client.login(username='******', password='******')

        response = self.client.post('/admin/news/news/' + str(news.id) + '/', {
            'title': 'Моя вторая новость',
            'announcement': 'Анонс второй новости',
            'text': 'Текст второй новости',
            'pub_date_0': '2014-10-15',
            'pub_date_1': '16:07:00',
            'category': str(category.id)
        },
                                    follow=True)

        self.assertContains(response, 'успешно изменен', status_code=200)

        all_news = News.objects.all()
        self.assertEquals(len(all_news), 1)
        only_news = all_news[0]
        self.assertEquals(only_news.title, 'Моя вторая новость')
        self.assertEquals(only_news.announcement, 'Анонс второй новости')
        self.assertEquals(only_news.text, 'Текст второй новости')
示例#9
0
def addnews(request):
    if request.method == 'POST':
        form = NewsForm(request.POST, request.FILES)
        if form.is_valid():
            current_user = request.user
            data = News()
            data.user_id = current_user.id
            data.title = form.cleaned_data['title']
            data.keywords = form.cleaned_data['keywords']
            data.description = form.cleaned_data['description']
            data.image = form.cleaned_data['image']
            data.category = form.cleaned_data['category']
            data.slug = form.cleaned_data['slug']
            data.detail = form.cleaned_data['detail']
            data.status = 'New'
            data.save()
            messages.success(request, 'Your news has been added!')
            return HttpResponseRedirect('/user/mynews')
        else:
            messages.warning(request, "Error")
            return HttpResponseRedirect('/user/addnews')

    else:
        news = News.objects.all()
        category = Category.objects.all()
        menu = Menu.objects.all()
        form = NewsForm()
        context = {
            'category': category,
            'form': form,
            'menu': menu,
            'news': news,
        }
        return render(request, 'user_addnews.html', context)
示例#10
0
    class Meta:  # 元数据信息
        # 指定那个数据库模型来创建表单
        model = News()  # 与数据库模型关联

        # fields = ['title', 'author', 'digest', 'content', 'image_url', 'tag']
        fields = ['title', 'digest', 'content', 'image_url', 'tag']

        error_messages = {
            'title': {
                'max_length': "文章标题长度不能超过150",
                'min_length': "文章标题长度大于1",
                # 传入字符串为空和,传入为空格是有区别的
                'required': '文章标题不能为空',
            },
            'digest': {
                'max_length': "文章摘要长度不能超过200",
                'min_length': "文章标题长度大于1",
                'required': '文章摘要不能为空',
            },
            'content': {
                'required': '文章内容不能为空',
            },
            # 'author': {
            #     'required': '作者不能为空',
            # },
        }
示例#11
0
    def test_displays_news(self):
        news_1 = News()
        news_1.title = 'Новость 1'
        news_1.text = 'Текст новости 1'
        news_1.save()

        news_2 = News()
        news_2.title = 'Новость 2'
        news_2.text = 'Текст новости 2'
        news_2.save()

        response = self.client.get('/news/')
        self.assertContains(response, 'Новость 1')
        self.assertContains(response, 'Текст новости 1')
        self.assertContains(response, 'Новость 2')
        self.assertContains(response, 'Текст новости 2')
示例#12
0
def save_news(title, url, published):
    news_exist = News.query.filter(News.url == url).count()
    print(news_exist)
    if not news_exist:
        new_news = News(title=title, url=url, published=published)
        db.session.add(new_news)
        db.session.commit()
示例#13
0
文件: test_model.py 项目: qira03/vcb
 def test_slug_unique(self):
     """Comprueba que el slug sea único."""
     news = News(name="Noticia 1",
                 abstract="Resumen de la noticia 1",
                 description="Contenido de la noticia 1")
     with self.assertRaises(IntegrityError):
         news.save()
示例#14
0
def post_news(text):
    news = News(text=text)
    try:
        news.save()
        for t in TeamProfile.objects.all():
            t.nb_unread_news += 1
            t.save()
    except Exception:
        logger.exception("Error adding news: ")
示例#15
0
def news_factory():
    fake = Faker(locale=['en'])
    title = fake.name()
    preview_content = fake.name()
    content = f'{title}\n{preview_content}'
    news = News(title=title,
                preview_content=preview_content,
                content=content)
    news.save()
    return news
示例#16
0
文件: test_model.py 项目: qira03/vcb
 def test_name_length_validation(self):
     """Comprueba la longitud del nombre."""
     news = News(
         name="Officia mollit esse eiusmod dolor mollit Lorem. Ut sint"\
             "deserunta eiusmod dolor mollit",
         slug="test-slug",
         abstract="Officia mollit",
         description="Nulla consectetur"
     )
     with self.assertRaisesRegex(ValidationError, "(name).*(64)"):
         news.full_clean()
示例#17
0
    def test_news_expiry_date_is_today(self):
        t1 = timezone.make_aware(timezone.datetime(2017, 11, 22))
        t2 = timezone.make_aware(timezone.datetime(2017, 11, 23))
        news_1 = News(publish_date=t1,
                      status=CONTENT_STATUS_PUBLISHED,
                      expiry_date=t2)

        self.assertIsNotNone(news_1)
        news_1.save()
        homepage_list = News.objects.published()
        self.assertTrue(len(homepage_list) == 0)
示例#18
0
def import_news():
    author = UserData.objects.get(id=1)
    print author.username
    for new_old in Stats.objects.all():
        if new_old.catid != 0 and (new_old.catid == 2 or new_old.catid == 3):
            print new_old.id, new_old.name, new_old.catid
            stci = News()

            print author
            # stci.id = new_old.id
            stci.article = new_old.full.replace('http://centrinform.info/', 'http://ci.ua/')
            stci.author = author
            stci.foreword = new_old.min.replace('http://centrinform.info/', 'http://ci.ua/')
            stci.slug = new_old.url
            stci.title = new_old.name
            stci.creation_date = new_old.dat_created
            stci.description = new_old.opisanie
            stci.key_words = new_old.klucheviki
            stci.category = NewsCategory.objects.get(id=new_old.catid)

            stci.save()
            # News.objects.get_or_create(
            #
            #     id=new_old.id,
            #     article=new_old.full.replace('http://centrinform.info/', 'http://ci.ua/'),
            #     author=author,
            #     foreword=new_old.min.replace('http://centrinform.info/', 'http://ci.ua/'),
            #     slug=new_old.url,
            #     title=new_old.name,
            #     creation_date=new_old.dat_created,
            #     description=new_old.opisanie,
            #     key_words=new_old.klucheviki,
            #     category=NewsCategory.objects.get(id=new_old.catid)
            # #   defaults={'category': NewsCategory.objects.get(id=new_old.catid)}  # default применится в случае create
            # )
            # new.article = new_old
            # # new.article = new_old.full.replace('http://centrinform.info/', 'http://ci.ua/')
            # new.author = author
            # new.category = NewsCategory.objects.get(id=new_old.catid)
            # new.foreword = new_old.min.replace('http://centrinform.info/', 'http://ci.ua/')
            # new.part_url = new_old.url
            # new.title = new_old.name
            # new.save()







        # try:
        #
        # except Stats.DoesNotExist:
        #     print u'Нету'
示例#19
0
def news_release():
    #进行页面渲染
    if request.method == "GET":
        try:
            categories = Category.query.all()
        except Exception as e:
            current_app.logger.error(e)
            return jsonify(errno=Code.DBERR, errmsg="获取分类失败")

        category_list = []
        for category in categories:
            category_list.append(category.to_dict())

        return render_template("news/user_news_release.html",
                               categories=category_list)

    # 数据提交
    title = request.form.get("title")
    category_id = request.form.get("category_id")
    digest = request.form.get("digest")
    index_image = request.files.get("index_image")
    content = request.form.get("content")

    if not all([title, category_id, digest, index_image, content]):
        return jsonify(errno=Code.PARAMERR, errmsg="参数不全")

    try:
        #读取图片为二进制数据,上传
        image_name = image_storage(index_image.read())
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=Code.THIRDERR, errmsg="七牛云异常")

    if not image_name:
        return jsonify(errno=Code.NODATA, errmsg="图片上传失败")

    news = News()
    news.title = title
    news.source = g.user.nick_name
    news.digest = digest
    news.content = content
    news.index_image_url = constants.QINIU_DOMIN_PREFIX + image_name
    news.category_id = category_id
    news.user_id = g.user.id
    news.status = 1  #表示审核中

    try:
        db.session.add(news)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=Code.DBERR, errmsg="新闻发布失败")
    # print("发布成功")
    return jsonify(errno=Code.OK, errmsg="发布成功")
示例#20
0
文件: test_model.py 项目: qira03/vcb
 def test_abstract_length_validation(self):
     """Comprueba la longitud del resumen."""
     news = News(
         name="Officia mollit esse eiusmod dolor mollit Lorem.",
         slug=slugify("Officia mollit esse eiusmod dolor mollit Lorem."),
         abstract="Lorem ipsum dolor sit amet, consectetuer adipiscing"\
             "elit. Aenean commodo ligula eget dolor. Aenean massa. Cum"\
             "sociis natoque penatibus et magnis dis parturient montes, na",
         description="Nulla consectetur"
     )
     with self.assertRaisesRegex(ValidationError, "(abstract).*(140)"):
         news.full_clean()
示例#21
0
    def test_news(self):
        news = News()

        news.headline = "Israel Gaza conflict: Netanyahu vows to continue strikes"
        news.original_link = "https://www.bbc.com/news/world-middle-east-57131272"
        news.img_link = "https://ichef.bbci.co.uk/news/976/cpsprodpb/9F76/production/_118522804_gazabbc.jpg"
        news.newspaper_name = "BBC News"

        news.save()

        record = News.objects.get(pk=1)
        self.assertEqual(record, news)
示例#22
0
    def done(self, request, cleaned_data):

        # http://stackoverflow.com/questions/628132/django-form-preview-how-to-work-with-cleaned-data
        #  **cleaned_data
        # news = News(**{'key':'value',})
        news = News(**cleaned_data)
        news.publish_date = datetime.now()
        news.save()

        # Redirect
        url = reverse('news-detail', kwargs={'slug': news.slug})
        return HttpResponseRedirect(url)
示例#23
0
 def process_item(self, item, spider):
     # print item['owner'], item['title'], item['time_way']
     if self.NAME not in getattr(spider, 'pipelines', []):
         return item
     news = News()
     news.content = item['content']
     # news.editor = item['editor']
     news.pub_time = item['pub_time']
     news.source = item['source']
     news.title = item['title']
     news.abstract = item['abstract']
     news.save()
     return item
示例#24
0
def addnews(csvfile):
    csvdata = csv.reader(open(csvfile), dialect="excel")
    print csvdata.next()
    userinput = raw_input("Is this ok? yes/no: ")
    if userinput == "yes":
        for line in csvdata:
            news = News(title=unicode(line[0]),
                        body=unicode(line[1]),
                        author=unicode(line[2]))
            news.save()
    else:
        ret = "Aborted by user"
        return ret
示例#25
0
    def create(self, validated_data):
        news = News(**validated_data)
        request = self.context['request']
        user = User.objects.get(id=request.user.id)
        fi = News.objects.create(sender=user,
                                 title=news.title,
                                 description=news.description)
        files = request.data.getlist('file')
        for file in files:
            f = File.objects.create(news=fi, file=file)
            f.save()

        return fi
示例#26
0
    def get_news(self):
        newsapi = NewsApiClient(api_key='03adf0de54094295b2a5cdbdb0bc85e2')
        topheadlines = newsapi.get_top_headlines(sources='bbc-news,the-verge')

        articles = topheadlines['articles']

        for i in range(len(articles)):
            myarticles = articles[i]

            n = News(title=myarticles['title'],
                     description=myarticles['description'],
                     create_at=myarticles['publishedAt'],
                     image=myarticles['urlToImage']).save()
示例#27
0
 def post(self, request):
     today_news = News.objects.filter(updated_at__gte=date.today()).all()
     form = NewsForm(self.request.POST)
     if form.is_valid():
         _new = News(title=self.request.POST["title"],
                     body=self.request.POST["body"])
         _new.save()
         form = NewsForm1()
     return render(self.request,
                   'news/index.html',
                   context={
                       'news': today_news,
                       'form': form
                   })
示例#28
0
    def test_saving_and_retrieving_items(self):
        first_news = News()
        first_news.title = 'Новость 1'
        first_news.text = 'Текст новости 1'
        first_news.save()

        second_news = News()
        second_news.title = 'Новость 2'
        second_news.text = 'Текст новости 2'
        second_news.save()

        saved_first_news = News.objects.first()
        self.assertEqual(first_news, saved_first_news)

        saved_news = News.objects.all()
        self.assertEqual(saved_news.count(), 2)

        first_saved_news = saved_news[0]
        second_saved_news = saved_news[1]
        self.assertEqual(first_saved_news.title, 'Новость 1')
        self.assertEqual(first_saved_news.text, 'Текст новости 1')
        self.assertEqual(second_saved_news.title, 'Новость 2')
        self.assertEqual(second_saved_news.text, 'Текст новости 2')
示例#29
0
def index(request):
    datas = newscraw()
    newsAdded = False
    for data in datas:
        title, content, link, fulltext = data["title"], data["content"], data[
            "link"], data["fulltext"]
        if len(News.objects.filter(title=title)) == 0:
            newNews = News(title=title,
                           content=content,
                           link=link,
                           fulltext=fulltext)
            newNews.save()
            newsAdded = True
    return render(request, 'index.html', {"added": newsAdded})
示例#30
0
    def form_valid(self, form):
        tags = self.request.POST.get('tags')
        news = News(**form.cleaned_data)
        news.save()
        self.increase_news_quantity(self.request)
        if len(tags):
            tags_list = tags.split()
            for elem in tags_list:
                tag, _ = Tag.objects.get_or_create(name=elem)
                news.tags.add(tag)
                news.save()
            return HttpResponseRedirect(reverse('news_details', kwargs={'pk': news.id}))

        news = NewsForm()
        return render(self.request, 'news/create_news.html', {'news': news})