如何将http请求作为python函数的参数传递?

exdqitrt  于 2021-09-08  发布在  Java
关注(0)|答案(3)|浏览(420)

我正在调用一个python函数并将http请求作为参数传递,但它不起作用。我在一个视图中创建了这个函数,并在另一个视图中调用了它,但是参数失败了。
这是我正在调用的函数

def load_colmeias(request):
    apiario = request.GET.get('apiario')
    if apiario != "":
        colmeias = Colmeia.objects.filter(apiario=apiario)
        return render(request, 'colmeias_choices.html', {'colmeias': colmeias})
    else:
        return render(request, 'colmeias_choices.html')

我给她打电话

load_colmeias(request)

但是出现了以下错误

NameError: name 'request' is not defined

我已经导入了“urlib”和“requests”库,但它总是给出相同的错误:

AttributeError: module has no attribute 'GET'

有人能帮我吗??我是python/django新手,我还在学习如何做事

62lalag4

62lalag41#

看看你有没有 requests 安装:

import requests
r=requests.get("https://automatetheboringstuff.com/files/rj.txt")
print(len(r.text))

现在,检查:
在里面 load_colmeias(request) ,请确保参数实际为 request 而不是 requests 自始至终
您的文件名不正确 requests.py ; 否则,您将导入自己的文件。

vnjpjtjt

vnjpjtjt2#

请求和请求是两个不同的东西,一个没有“s”是参数,而有“s”是方法。要使用请求,您必须导入请求库,这是一个从api获取数据的第三方库。
如果要调用此函数,必须通过api发出请求。为此函数创建api,然后发出请求。
您的views.py文件:

def load_colmeias(request):
    apiario = request.GET.get('apiario')
    if apiario != "":
        colmeias = Colmeia.objects.filter(apiario=apiario)
        return render(request, 'colmeias_choices.html', {'colmeias': colmeias})
    else:
        return render(request, 'colmeias_choices.html')

您的URL.py文件:

from django.urls import path
from . import views

urlpatterns = [

path('load_colmeias', views.load_colmeias)
]

现在,您的api是:
http://127.0.0.1:8000/load_colmeias?apiario=1234
在发出请求之前,请确保您在api中使用了正确的端口并启动了服务器,并传递了正确的apiario值。
使用请求库调用此函数还有另一种方法:

import requests

res = requests.get('http://127.0.0.1:8000/load_colmeias?apiario=1234')
print(res.text)

您可以在任何文件中使用此函数,并再次使用此库调用函数。服务器必须正在运行并传递正确的Apario值。如果你正在传递一个请求参数,那么你必须发出请求。你不能这样称呼它。

0aydgbwb

0aydgbwb3#

我解决了这个问题!!基本上,我只是创建了一个调用另一个函数的函数,并将相同的参数传递给这两个函数。。。如下所示:

def load_colmeias(request):
    return carregar_colmeia(request)

我不知道是否推荐它,但它解决了我在多个视图中重写同一代码的问题。

相关问题