调用Google数据QnA API时Django中出现503 DNS服务不可用错误

2024-03-29 13:08:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个Django web应用程序,用户可以在一个简单的搜索栏中搜索数据。然后使用用户输入调用Google的数据QNAAPI,从BigQuery接收数据并将其转换为自然语言,以便用户有一个可读的响应

然而,当我尝试调用API时,我得到一个503服务不可用错误。当我在终端中本地调用API时,它工作正常

这是我的密码:

视图.py

from django.shortcuts import render
import os
from google.api_core.client_options import ClientOptions
from google.cloud.dataqna import AutoSuggestionServiceClient, Question, QuestionServiceClient
from google.cloud import bigquery

client_options = ClientOptions(api_endpoint = f"us-dataqna-googleapis.com:443")
suggest_client = AutoSuggestionServiceClient(client_options = client_options)
questions_client = QuestionServiceClient(client_options = client_options)
bq_client = bigquery.Client()

def index(request):
    return render(request, 'index.html')

def response(request):

    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[path to .json]"
    project = "[project name]"
    location = "us"
    scope = f"[scope of project]"

    parent = questions_client.common_location_path(project, location)

    if request.method == "POST":
        title = request.POST.get("q")
        question = Question(scopes = [scope], query = title)
        question_response = questions_client.create_question(parent = parent, question = question)

        chosen_interpretation_index = 0

        question_response = questions_client.execute_question(name = question_response.name, interpretation_index = chosen_interpretation_index)
        chosen_interpretation = question_response.interpretations[chosen_interpretation_index]

        bigquery_job = chosen_interpretation.execution_info.bigquery_job
        job = bq_client.get_job(bigquery_job.job_id, bigquery_job.project_id, bigquery_job.location)
        job_results = job.result()

        headers = [schema_field.name for schema_field in job_results.schema]
        results = [dict(row) for row in job_results]

        return render(request,'response.html', { 'title' : title},
        { 'interpretation' : chosen_interpretation.human_readable.generated_interpretation.text_formatted },
        { 'sql' : chosen_interpretation.data_query.sql },
        { 'results' : results})

    else:
        return render(request, "index.html")

url.py

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

from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name="index"),
    path('response', views.response, name="response")
]

设置.py

from pathlib import Path
import os

BASE_DIR = Path(__file__).resolve().parent.parent
PROJECT_DIR = os.path.join(BASE_DIR, "dataqna_website")

SECRET_KEY = '[key]'

DEBUG = True

ALLOWED_HOSTS = []

STATICFILES_DIRS = [
    "[path to static file]"
]

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

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'dataqna_website.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(PROJECT_DIR, "templates")],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'dataqna_website.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny',
    ]
}

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


STATIC_URL = '/static/'

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

以下是我在应用程序的搜索栏中键入后看到的内容:

503 DNS Service Unavailable


Tags: pathdjangofromimportclientauthindexresponse