Ошибка 500 на странице Django, где используется Ajax - PullRequest
0 голосов
/ 18 июня 2020

У меня возникает ошибка 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

Я также пробовал использовать декораторы, но они позволяют избежать загрузки всего сайта .

Ответы [ 2 ]

0 голосов
/ 20 июня 2020

"/ Users / annisasamsi / Projects / iron / apps / technology / views.py", строка 2 , в запросах на импорт

Строка 2: кажется, что это первый модуль ваш код пытается импортировать и не может его найти. Я предполагаю, что то же самое произойдет и с другими модулями.

Пожалуйста, убедитесь, что вы запустили pip install -r requirements.txt в правильном окружении. И проверьте свой проект сайты-пакеты

0 голосов
/ 19 июня 2020

Вероятно, в вашем коде отсутствуют некоторые библиотеки. Вероятно, requests.

Сделайте pip install requests, и он должен работать.

Также примечание: когда ваш проект запущен и работает, используйте эту команду для сохранения всех зависимостей вашего проекта в отдельном файле, чтобы, если вы или кто-то другой клонировали бесплатную sh копию в проекте им не нужно вручную устанавливать зависимости.

pip freeze > requirements.txt

Для установки списка требований.txt вы можете использовать

pip install -r requirements.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...