Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Python 在Views.py中使用外部脚本_Python_Django - Fatal编程技术网

Python 在Views.py中使用外部脚本

Python 在Views.py中使用外部脚本,python,django,Python,Django,我有一个向API发送请求并检索信息的文件。我们将此文件称为get_info.py。我现在正在构建一个GUI,它使用Django和views.py文件,使用方法“GET”和“POST” 我现在将函数从get_info.py导入views.py,并按如下方式使用它 from get_info import get_info @api_view(['GET']) def generate_route(request): """ :param request: 1. lat: p

我有一个向API发送请求并检索信息的文件。我们将此文件称为get_info.py。我现在正在构建一个GUI,它使用Django和views.py文件,使用方法“GET”和“POST”

我现在将函数从get_info.py导入views.py,并按如下方式使用它

from get_info import get_info
@api_view(['GET'])
def generate_route(request):
    """
    :param request:
    1. lat: posx
    2. lng: pos,
    3. r: radius in km
    4. strategy,
    5. edge_num,
    6. deep,
    :return:
    """
    posx = request.query_params.get('lat', None)
    posy= request.query_params.get('lng', None)

    r= request.query_params.get('r', None)
    strategy = request.query_params.get('strategy', None)
    strategy = strategy if strategy else 3
    edge_num = request.query_params.get('edge_num', None)
    edge_num = edge_num if edge_num else 3
    deep = request.query_params.get('deep', None)
    deep = deep if deep else 3
    print("BEFORE", posx, posy, r, strategy, edge_num, deep)
    route = get_info(posx, posy, r)
    print("AFTER", route)
    if request.query_params.get('lat', None) is not None \
            and request.query_params.get('lng', None) is not None \
            and request.query_params.get('r', None) is not None:
        return Response({}, status=status.HTTP_200_OK)
    else:
        return Response({
            "Error": 'Need lat, lng, and r {}'.format(request.query_params.get('lat', None))
        }, status=status.HTTP_400_BAD_REQUEST)
```
然而,我得到了回应

> (u'BEFORE', u'112.34', u'14.55', u'300.3', 3, 3, 3)
  Internal Server Error: /app/api/v1/get_info/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py", line 41, in inner
    response = get_response(request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 483, in dispatch
    response = self.handle_exception(exc)
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 443, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 480, in dispatch
    response = handler(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/decorators.py", line 53, in handler
    return func(*args, **kwargs)
  File "/home/user/Projects/app/views.py", line 750, in generate_route
    route = get_info(posx, posy, r)
  File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 466, in dispatch
    request = self.initialize_request(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/views.py", line 370, in initialize_request
    parser_context=parser_context
  File "/usr/local/lib/python2.7/dist-packages/rest_framework/request.py", line 159, in __init__
    .format(request.__class__.__module__, request.__class__.__name__)
AssertionError: The `request` argument must be an instance of `django.http.HttpRequest`, not `__builtin__.unicode`.
但当我使用from django.httpimport-HttpRequest构建请求时,它告诉我“超出了最大深度”

get_info方法相当长,但简而言之,它看起来是这样的:

def get_info(posx, posy, r, strategy=3, edge_num=0.8, deep=0):  
    req_url = "http://api.map.baidu.com/direction/v2/driving?origin=posx..."
    trip = requests.get(req_url).json()
    return trip

当我在python shell中运行这个get_info方法时,它会返回所需的trip。

如果仔细查看导致问题的是rest框架,如果getinfo是APIView,那么它可能需要request作为其第一个参数,而不是posx(字符串)。

route=get_infoposx,posy,r line导致异常。你能包括获取信息吗?包括在内。它很长,但这应该向您展示了它的要点。我尝试将参数更改为get_inforequest以获取_info,它告诉我:AssertionError:“request”参数必须是“django.http.HttpRequest”的实例,而不是“rest_framework.request.request”。这很奇怪,如果有get_info的函数签名和修饰符,可以显示函数签名和修饰符吗?嗯,它没有任何装饰师也许应该?签名是所有参数都是浮点数。请尝试传递请求。_request获取信息并查看是否解决了问题。这意味着私有请求attr可能就是请求本身,并反复调用自身。您可以查找如何从rest http提取django http。或者更改代码,使其运行更加顺畅。在视图内部调用另一个视图对我来说似乎不是一个好模式。您可以考虑将逻辑提取到自己的类,并使用视图作为传递响应的工具。