Requests on django api by javascript with CORS error

I have a web application for many years that uses Django and Django Rest Framework. The API is used by a python application and it works correctly:

import requests
response = requests.options(http://example.com/api/albums/)
200
{'name': 'Album List List', 'description': '', 'renders': ['application/json', 'text/html'], 'parses': ['application/json', 'application/x-www-form-urlencoded', 'multipart/form-data'], 'actions': {'POST': ....

I discovered Svelte and I wanted to work with this API but impossible:

let api_ = "http://example.com/api/albums/"
const getAlbums = async () => {
    var response = await fetch(api, {
        mode: 'cors', method: 'GET', headers: {
            'Content-Type': 'application/json'}});
    var result = await response.json();
    return result.results;
Cross-Origin Request Blocked: The “Same Origin” policy does not allow viewing the remote resource located at http://example.com/api/albums/. Reason: The “Access-Control-Allow-Origin” CORS header is missing. Status Code: 200.

I read that you need to install django-cors-headers. but now I have this error:

Exception in thread django-main-thread:
Traceback (most recent call last):
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 69, in __getitem__
    return self._engines[alias]
KeyError: 'django'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 174, in get_package_libraries
    module = import_module(entry[1])
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/rest_framework/templatetags/rest_framework.py", line 12, in <module>
    from rest_framework.renderers import HTMLFormRenderer
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/rest_framework/renderers.py", line 17, in <module>
    from django.http.multipartparser import parse_header
ImportError: cannot import name 'parse_header' from 'django.http.multipartparser' (/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/http/multipartparser.py)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
File "/usr/lib/python3.10/threading.py", line 953, in run
Traceback (most recent call last):
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 69, in __getitem__
    return self._engines[alias]
KeyError: 'django'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 174, in get_package_libraries
    self._target(*self._args, **self._kwargs)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
    module = import_module(entry[1])
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    fn(*args, **kwargs)
    return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
    self.check(display_num_errors=True)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/base.py", line 486, in check
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
    all_issues = checks.run_checks(
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/checks/registry.py", line 88, in run_checks
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/rest_framework/templatetags/rest_framework.py", line 12, in <module>
    new_errors = check(app_configs=app_configs, databases=databases)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/checks/templates.py", line 10, in check_templates
    from rest_framework.renderers import HTMLFormRenderer
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/rest_framework/renderers.py", line 17, in <module>
    for engine in engines.all():
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 94, in all
    from django.http.multipartparser import parse_header
ImportError: cannot import name 'parse_header' from 'django.http.multipartparser' (/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/http/multipartparser.py)
    return [self[alias] for alias in self]

The above exception was the direct cause of the following exception:

File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 94, in <listcomp>
Traceback (most recent call last):
File "/home/vianney/Documents/django_blog/manage.py", line 22, in <module>
    return [self[alias] for alias in self]
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 85, in __getitem__
    main()
File "/home/vianney/Documents/django_blog/manage.py", line 18, in main
    engine = engine_cls(params)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 26, in __init__
    execute_from_command_line(sys.argv)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    options["libraries"] = self.get_templatetag_libraries(libraries)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 88, in get_templatetag_libraries
    utility.execute()
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/__init__.py", line 436, in execute
    libraries = get_installed_libraries()
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 162, in get_installed_libraries
    self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/base.py", line 413, in run_from_argv
    return {
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 162, in <dictcomp>
    self.execute(*args, **cmd_options)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 75, in execute
    return {
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 151, in get_template_tag_modules
    super().execute(*args, **options)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/base.py", line 459, in execute
    for name in get_package_libraries(pkg):
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 176, in get_package_libraries
    output = self.handle(*args, **options)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 112, in handle
    raise InvalidTemplateLibrary(
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'rest_framework.templatetags.rest_framework': cannot import name 'parse_header' from 'django.http.multipartparser' (/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/http/multipartparser.py)
    self.run(**options)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 119, in run
    autoreload.run_with_reloader(self.inner_run, **options)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/utils/autoreload.py", line 671, in run_with_reloader
    start_django(reloader, main_func, *args, **kwargs)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/utils/autoreload.py", line 660, in start_django
    reloader.run(django_main_thread)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/utils/autoreload.py", line 343, in run
    autoreload_started.send(sender=self)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 189, in send
    response = receiver(signal=self, sender=sender, **named)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/autoreload.py", line 50, in watch_for_template_changes
    for directory in get_template_directories():
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/autoreload.py", line 16, in get_template_directories
    for backend in engines.all():
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 94, in all
    return [self[alias] for alias in self]
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 94, in <listcomp>
    return [self[alias] for alias in self]
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/utils.py", line 85, in __getitem__
    engine = engine_cls(params)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 26, in __init__
    options["libraries"] = self.get_templatetag_libraries(libraries)
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 88, in get_templatetag_libraries
    libraries = get_installed_libraries()
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 162, in get_installed_libraries
    return {
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 162, in <dictcomp>
    return {
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 151, in get_template_tag_modules
    for name in get_package_libraries(pkg):
File "/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/template/backends/django.py", line 176, in get_package_libraries
    raise InvalidTemplateLibrary(
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'rest_framework.templatetags.rest_framework': cannot import name 'parse_header' from 'django.http.multipartparser' (/home/vianney/Documents/.blog/lib/python3.10/site-packages/django/http/multipartparser.py)

my Python version is 3.10.12, Django is 5.1.2 and Rest Framework is 3.12.4 and I installed the Cors Unlocked add-on under firefox.

does anyone have an explanation? why with python I have access to my api and not with javascript?

thank you for your help.

This issue is closer to being compatibility issue. Make sure you're using the right django version. for instance this two are compatible django==4.2.9 djangorestframework==3.14.0

Back to Top