У меня возникает ошибка 500 после попытки отправить файл csv. Ошибка 500 говорит о наличии проблемы в DeproAjaxView. До ноября это работало нормально.
Теперь действующий сайт выдает ошибку 500, но локальный сервер разработки выдает запрещенную ошибку 403 (токен csrf отсутствует или неверен). Я проверил это, и у него есть жетон.
class DeprovisionView(LoginRequiredMixin,UserPassesTestMixin,TemplateView):
template_name = "technology/deprovision.html"
login_url = reverse_lazy('login')
def test_func(self):
user = self.request.user.id
groups = User.objects.filter(pk=user,groups__name__exact='HARDWARE_ADMIN').exists()
return groups
class DeproAjaxView(LoginRequiredMixin,UserPassesTestMixin,View):
login_url = reverse_lazy('login')
def test_func(self):
user = self.request.user.id
groups = User.objects.filter(pk=user,groups__name__exact='HARDWARE_ADMIN').exists()
return groups
def post(self, request, *args, **kwargs):
device_list = defaultdict(list)
error_list = []
success_list = []
devices = []
deprovision = []
csv_data = json.loads(request.body.decode("utf-8"))
data = list(chain.from_iterable(csv_data.get('data')))
loop = asyncio.new_event_loop()
response = sorted(loop.run_until_complete(async_get_chromebook(data, loop)),
key=itemgetter('status'))
for item in response:
device_list[item['status']].append(item)
for key, value in device_list.items():
if key == 'ACTIVE':
devices.extend(value)
else:
error_list.extend(value)
if not devices:
data = {'status': 'error','error_list': error_list}
else:
for item in devices:
deprovision.append(item.get('deviceId'))
depro_resp = loop.run_until_complete(async_deprovision(deprovision, loop))
for item in depro_resp:
if item['status'] == 'SUCCESS':
success_list.append(item)
else:
error_list.append(item)
data = {'status': 'success', 'success_list': success_list, 'error_list': error_list}
return HttpResponse(json.dumps(data))
Я не уверен, почему они вызывают исключения. Tracebacks:
Traceback (most recent call last):
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/annisasamsi/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/lib/python/debugpy/__main__.py", line 45, in <module>
cli.main()
File "/Users/annisasamsi/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 430, in main
run()
File "/Users/annisasamsi/.vscode/extensions/ms-python.python-2020.6.88468/pythonFiles/lib/python/debugpy/../debugpy/server/cli.py", line 267, in run_file
runpy.run_path(options.target, run_name=compat.force_str("__main__"))
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/annisasamsi/Projects/iron/apps/technology/views.py", line 2, in <module>
import requests
ModuleNotFoundError: No module named 'requests'
Если посмотреть глубже, в журнале ошибок Chrome написано:
XHR failed loading: POST "https://irondistrict.org/technology/ajax/depro/".
send @ vendor.d456b52….js:128
ajax @ vendor.d456b52….js:128
complete @ technology.d456b52….js:1
parseChunk @ vendor.d456b52….js:89
_chunkLoaded @ vendor.d456b52….js:89
(anonymous) @ vendor.d456b52….js:89
load (async)
stream @ vendor.d456b52….js:89
parse @ vendor.d456b52….js:89
(anonymous) @ technology.d456b52….js:1
dispatch @ vendor.d456b52….js:128
g.handle @ vendor.d456b52….js:128
Я также пробовал использовать декораторы, но они позволяют избежать загрузки всего сайта .