Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 我怎样才能得到“我的”呢;代码“;来自重定向url的值';谁的反应?_Django_Python 3.x_Oauth 2.0 - Fatal编程技术网

Django 我怎样才能得到“我的”呢;代码“;来自重定向url的值';谁的反应?

Django 我怎样才能得到“我的”呢;代码“;来自重定向url的值';谁的反应?,django,python-3.x,oauth-2.0,Django,Python 3.x,Oauth 2.0,我编写了一个函数,以便从重定向url的响应中获取代码值,但是我无法捕获它 功能 def auth_for_app(request): CLIENT_ID = "xxx" CLIENT_SECRET = "xxx" REDIRECT_URI = 'http://127.0.0.1:8000/products/auth' AUTHORIZE_URL = "https://www.example.com/admin/user/auth" ACCESS_TOK

我编写了一个函数,以便从重定向url的响应中获取代码值,但是我无法捕获它

功能

def auth_for_app(request):

    CLIENT_ID = "xxx"
    CLIENT_SECRET = "xxx"

    REDIRECT_URI = 'http://127.0.0.1:8000/products/auth'
    AUTHORIZE_URL = "https://www.example.com/admin/user/auth"
    ACCESS_TOKEN_URL = "https://www.example.com/oauth/v2/token"
    STATE = "2b33fdd45jbevd6nam" # temporary state id

    request.GET.get('{}?client_id={}&response_type=code&state={}&redirect_uri={}'.format(AUTHORIZE_URL, CLIENT_ID, STATE, REDIRECT_URI))

    request.session['code'] = request.GET.get('code')
    code = request.session['code']

    print ("***AUTH START***")
    print (code)
    print ("***AUTH END***") 

    return render (request, 'products/auth.html')
我还写了print,我可以肯定我能抓住它。然而我得到了这个结果

***AUTH START***
None
***AUTH END***
编辑(添加的产品/url.py):

products/url.py

app_name = 'products'
urlpatterns = [
    path('', views.IndexView.as_view(), name='base'),
    path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    path('auth/', views.auth_for_app, name='auth_for_app'),
]
app_name='products'
URL模式=[
路径(“”,views.IndexView.as_view(),name='base'),
路径('/',views.DetailView.as_view(),name='detail'),
path('auth/',views.auth_表示_app,name='auth_表示_app'),
]

您误解了这里的某些内容

request.GET
是通过作为视图函数参数的
request
对象传递给视图的查询。换句话说,如果用户转到
/auth/?foo=bar
,则
request.GET GET('foo')
将给出结果“bar”

这不会向其他网站提出任何请求。为此,您需要一些完全不同的东西—一个名为的第三方库。尽管名字很相似,但它们之间没有任何关系。您需要安装请求,将其导入视图文件,调用它,并对响应执行一些操作:

import requests
...
response = requests.get(AUTHORIZE_URL, params={"client_id": CLIENT_ID, "response_type": "code", "state": STATE, "redirect_uri": REDIRECT_URI})
code = response.json()['code']

对不起,此代码非常不清楚。那
请求.GET.GET…
行的意义是什么?它实际上什么也不做。请求此视图的URL的查询字符串中是否传递了代码?请显示该URL。我添加了URL。。我认为,
request.GET.GET…
line向提供者应用程序发出请求,以便获取代码和状态参数@DanielRosemanI如您在这里所写的那样对其进行了更改,但我收到了以下错误:
从None json.decoder.jsondecoderor中引发JSondecoderError(“期望值”,s,err.value):期望值:第2行第1列(char 1)
,因此API不会返回json。但你们并没有给出它实际是什么的任何细节,所以我们知道它会返回什么。