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)
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')
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
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()
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})
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)
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)
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, 'Текст второй новости')
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)
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': '作者不能为空', # }, }
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')
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()
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()
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: ")
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
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()
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)
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'Нету'
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="发布成功")
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()
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)
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)
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
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
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
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()
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 })
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')
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})
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})