Рубрики
Без рубрики

Создайте новостное приложение, используя Django

В этой статье мы создадим простое новостное приложение, используя Django, запросы, начальная загрузка и с помощью … Помечено с Django, WebDev, Python, JavaScript.

В этой статье мы создадим простое новостное приложение, используя Django, запросы, начальную загрузку и с помощью новостной ленты из Newsapi

Это приложение является вдохновением от Новости Google

Установка зависимости для проекта

   pip install django
   pip install requests

Настройка проекта Django

Для получения подробной ссылки о Django Посетите страницу Теперь мы можем создать наш проект

   django-admin startproject newsapp
   cd newsapp

Чтобы проверить, что проект работает, запустите эту команду

   python manage.py runserver

Вы увидите страницу ракета, которая означает, что создание проекта является успешным, даже если вы увидите, что предупреждения – это терминал, такой как неисполненные миграции, чтобы удалить эту команду. Эта команда перенесет миграцию по умолчанию в базу данных, такую как сеанс, Пользовательский стол

  python manage.py migration

В этом каталоге вы можете найти файл Manage.py File и NewsApp, после этого создать приложение по вызову читатель

   python manage.py startapp reader

Теперь нам нужно добавить приложение Читатель в setult.py Это поможет Джанго идентифицировать приложение записи

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'reader',
]

Не забудьте получить ключ API от https://newsapi.org/ Анкет Затем добавьте клавишу API в настройку.py

APIKEY = "XXXXXXXXXXXXXXXXXXX"

Просмотр и URL -адреса Где мы напишем логику

Создайте urls.py внутри читатель каталог, после этого подключите файл reader/urls.py с NewsApp/urls.py, этот будет действовать как мастер всех URL -адресов

from django.contrib import admin
from django.urls import path
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include("reader.urls")),
]

Этот API получит лучшие новости из всех источников.

url = https://newsapi.org/v2/top-headlines?country=us&apiKey=XXXXXXXXXXXXXXXXXXX

Чтобы получить данные, мы собираемся пользователь ** запросы Python **

   r = requests.get(url=url) 
   data = r.json()

Данные будут выглядеть так

{
"status": "ok",
"totalResults": 38,
-"articles": [
-{
-"source": {
"id": null,
"name": "CNET"
},
"author": "Amanda Kooser",
"title": "Ancient underground lakes discovered on Mars - CNET",
"description": "Mars could be home to more liquid water than we originally thought.",
"url": "https://www.cnet.com/news/ancient-underground-lakes-found-on-mars/",
"urlToImage": "https://cnet2.cbsistatic.com/img/OJOEhYPBRrJmmwv03JD_1RF2wPI=/1200x630/2015/02/09/3a560b3c-d9eb-4f0c-af5c-9e9671844c93/mars-ice-cap.jpg",
"publishedAt": "2020-09-29T16:14:00Z",
"content": "This beautiful..."
}]}

Позвольте создать представление, чтобы показать контент

def home(request):
    page = request.GET.get('page', 1)
    search = request.GET.get('search', None)

    if search is None or search=="top":
        # get the top news
        url = "https://newsapi.org/v2/top-headlines?country={}&page={}&apiKey={}".format(
            "us",1,settings.APIKEY
        )
    else:
        # get the search query request
        url = "https://newsapi.org/v2/everything?q={}&sortBy={}&page={}&apiKey={}".format(
            search,"popularity",page,settings.APIKEY
        )
    r = requests.get(url=url)

    data = r.json()
    if data["status"] != "ok":
        return HttpResponse("

Request Failed

") data = data["articles"] context = { "success": True, "data": [], "search": search } # seprating the necessary data for i in data: context["data"].append({ "title": i["title"], "description": "" if i["description"] is None else i["description"], "url": i["url"], "image": temp_img if i["urlToImage"] is None else i["urlToImage"], "publishedat": i["publishedAt"] }) # send the news feed to template in context return render(request, 'index.html', context=context)

Вышеупомянутый взгляд на домашний вид вернет трендовые новости или запрошенный запрос, а затем перенесите его в шаблон, чтобы отобразить его на фронте, чтобы нам нужно создать файл шаблона внутри/reader/templates/index.html



var page = 2;


var window_scroll = true;

var search = "{{ search }}";

window.addEventListener('scroll', function(e) {
   console.log("Hi Dude...");
}




  News App
  
  
  
  
  
  



    
{% include 'sidebar.html' %}
{% for value in data %}
{{value.title}}

{{value.description}}

{{value.publishedat}}

...
{% endfor %}

Loading....

После этого создать еще один шаблонный файл внутри/reader/template/sidebar.html django way of отправить параметры запроса в методе Get




В функции домашнего представления он отображает страницу HTML, она также требует дополнительного API для обновления новостей, в то время как пользователь прокручивает страницу, это сделает сеть более неразрешимой без загрузки всей страницы. Используйте AJAX запрос, чтобы получить значение JSON из этого API -контента загрузки

def loadcontent(request):
    try:
        page = request.GET.get('page', 1)
        search = request.GET.get('search', None)
        # url = "https://newsapi.org/v2/everything?q={}&sortBy={}&page={}&apiKey={}".format(
        #     "Technology","popularity",page,settings.APIKEY
        # )
        if search is None or search=="top":
            url = "https://newsapi.org/v2/top-headlines?country={}&page={}&apiKey={}".format(
                "us",page,settings.APIKEY
            )
        else:
            url = "https://newsapi.org/v2/everything?q={}&sortBy={}&page={}&apiKey={}".format(
                search,"popularity",page,settings.APIKEY
            )
        print("url:",url)
        r = requests.get(url=url)

        data = r.json()
        if data["status"] != "ok":
            return JsonResponse({"success":False})
        data = data["articles"]
        context = {
            "success": True,
            "data": [],
            "search": search
        }
        for i in data:
            context["data"].append({
                "title": i["title"],
                "description":  "" if i["description"] is None else i["description"],
                "url": i["url"],
                "image": temp_img if i["urlToImage"] is None else i["urlToImage"],
                "publishedat": i["publishedAt"]
            })

        return JsonResponse(context)
    except Exception as e:
        return JsonResponse({"success":False})

Мы сделали представление и шаблоны, чтобы получить к нему доступ, нам нужно предоставить URL -адреса

from django.urls import path
from reader import views

urlpatterns = [
    path('', views.home, name="Home"),
    path('next', views.loadcontent, name="Loadcontent"),
]

Вы можете использовать этот API только для получения данных JSON, отправьте параметры запроса соответственно

   path('next', views.loadcontent, name="Loadcontent"),

Теперь запустите приложение, вы наконец -то увидите, что мы сделали Это

Это структура проекта

Спасибо вам, хорошего дня впереди. 🤪😎

Оригинал: “https://dev.to/magesh236/news-app-in-django-2dcd”