Python 在Views.py中使用外部脚本
我有一个向API发送请求并检索信息的文件。我们将此文件称为get_info.py。我现在正在构建一个GUI,它使用Django和views.py文件,使用方法“GET”和“POST” 我现在将函数从get_info.py导入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
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。或者更改代码,使其运行更加顺畅。在视图内部调用另一个视图对我来说似乎不是一个好模式。您可以考虑将逻辑提取到自己的类,并使用视图作为传递响应的工具。