Django Twitter API错误:“code”:215,“message”:“Bad Authentication data”。

问题描述 投票:0回答:1

我正在为Twitter制作机器人检测系统。我在获取用户帐户信息时遇到问题。我已成功进行了Twitter身份验证,但在请求用户帐户信息时,我收到此错误

“code”:215,“message”:“身份验证错误数据”。

我的views.py代码

from django.http import HttpResponse,HttpResponseRedirect
from django.urls import reverse
from django.shortcuts import render,redirect
from werkzeug.utils import redirect

from .forms import UserLoginForms
from django.contrib.auth import authenticate, login, logout
import requests

def home(request):


    screenname = 'BarackObama'
    r = requests.get('https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=' + screenname + '&count=2')
    print(r.text)

    return render(request,'home.html')

def main_login_page(request):
    return HttpResponseRedirect('/accounts/twitter/login')

def user_logout(request):
    logout(request)
    return HttpResponseRedirect(reverse(home))

我的settings.py文件。在这里我添加它,因为在它,最后我添加了我的twiiter应用程序密钥和秘密。

"""
Django settings for FYPDjango project.

Generated by 'django-admin startproject' using Django 2.1.7.

For more information on this file, see
https://docs.djangoproject.com/en/2.1/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.1/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '+w5xq2*@!0zxi)q2+psrk+p^jd$-ndh9(z(dohb6xx9)aa)0z7'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['mysite.com' , 'localhost', '127.0.0.1']


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django',
# The following apps are required:
    'django.contrib.sites',

    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.twitter',
]

SITE_ID = 1

# for oauth
AUTHENTICATION_BACKEND = [
    # 'social_core_backends.twitter.TwitterOAuth',
    # 'social_core.backends.google.GoogleOAuth2'
    'allauth.account.auth_backends.AuthenticationBackend '
    'django.contrib.auth.backends.ModelBackend',
]

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',
    'social_django.middleware.SocialAuthExceptionMiddleware'
]

ROOT_URLCONF = 'FYPDjango.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_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',
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',  #For redirecting via login page
            ],
        },
    },
]

WSGI_APPLICATION = 'FYPDjango.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators

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',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/2.1/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'

#edited me here
STATIC_DIRS = 'static'

STATICFILES_DIRS = [
    STATIC_DIRS,
]

SOCIAL_AUTH_TWITTER_KEY = 'xqTh9nHX5x4vN6AxKtnSjYsgs  '
SOCIAL_AUTH_TWITTER_SECRET = '4qu506zZFM0t5rcxSb7mWvjMxx3UzxCY7hdlD2Am7ScnwMDhm6'
#
# SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '670284466947-42q8a99b1i76achlua9r4oq9as4kubu6.apps.googleusercontent.com'
# SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'SYx2HCGS1dbCfOIAkrN_ru9E'

LOGIN_REDIRECT_URL = 'home'

我的urls.py文件

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

from FYPapp.views import user_logout, home, main_login_page

urlpatterns = [
    # I want to add my app in the project so do this

    path('',home,name='home'),
    path('login',main_login_page,name='main_login_page'),
    path('logout',user_logout,name='user_logout'),
    path('accounts/', include('allauth.urls')),
    path('admin/', admin.site.urls),

]

我是Django的新手。所以请帮我解决这个问题。谢谢

python django twitter
1个回答
0
投票

这不是Django的问题,而是你的Twitter API访问。根据“Getting Started”文档,您需要先申请帐户并接收您的消费者密钥和访问令牌。然后你需要在打电话给authenticate之前使用那些statuses/user_timeline

考虑使用python包tweepy来更容易地访问API。

© www.soinside.com 2019 - 2024. All rights reserved.