如何使用Django中的Python查询将request.user.id值转换为相同的函数

时间:2016-04-22 06:45:21

标签: python django django-views

我对Django中的类和函数感到很困惑,所以我不确定,如果我尝试这样做的话。

1)我有一个函数,我在那里进行API查询。我想从2)获得API令牌(见下文)。

def API_search(request):
    query = request.GET.get('query')
    final_url =  urllib2.Request('http://api.website.com', None, headers={'Content-Type':'application/json'})
    base64string = base64.encodestring('%s:%s' % ('myusername', 'mypassword')).replace('\n', '')
    final_url.add_header("Authorization", "Basic %s" % base64string)   
    json_obj = urllib2.urlopen(final_url)
    readable_json = json.load(json_obj)
    resultsOpen = []
    for i in readable_json:
        resultsOpen.append({
            'subject': i['subject'],
            })
return render(request, 'index/apiTest.html', {'objects_open': resultsOpen)

2)我有一个基于类的函数,我在其中查询数据库并返回当前用户的API标记。这仅显示现场的API令牌。我希望它在API查询中。

class UserDetail(DetailView):
    model = User
    def get_context_data(self, **kwargs):
        context = super(UserDetail, self).get_context_data(**kwargs)
        context['token_list'] = UserTokens.objects.values_list('apiToken', flat=True).get(pk=1)
        return context

这些都适用于不同的模板,但我不想要它。我想在API查询中使用API​​令牌变量 context 。我怎么能这样做?

编辑:添加了urls.py

from django.conf.urls import url
from index.views import UserDetail
from index import views

urlpatterns = [
    url(r'^dbquery/$', UserDetail.as_view()),
    url(r'^apitest/$', views.API_search),
]

1 个答案:

答案 0 :(得分:1)

urls.py中创建一个调用API_search函数的网址定义。在UserDetailView商店中,这个生成的网址在href内,当用户点击它时,请调用您的API搜索功能。

OR

如果您想在UserDetailView之后直接调用API_Search,请在生成正确的网址后调用HttpRedirectResponse到该网址。

编辑: 根据提供的额外信息,您可以使用:

def API_search(request):
    user = request.user
    token = UserTokens.objects.values_list('apiToken', flat=True).get(pk=user.id)
    query = request.GET.get('query')
    final_url =  urllib2.Request('http://api.website.com', None, headers={'Content-Type':'application/json'})
    #use the token as you like
    base64string = base64.encodestring('%s:%s' % ('myusername', 'mypassword')).replace('\n', '')
    final_url.add_header("Authorization", "Basic %s" % base64string)   
    json_obj = urllib2.urlopen(final_url)
    readable_json = json.load(json_obj)
    resultsOpen = []
    for i in readable_json:
        resultsOpen.append({
            'subject': i['subject'],
            })
return render(request, 'index/apiTest.html', {'objects_open': resultsOpen)