sak
parent
71694f09c3
commit
fd83b11c4a
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
215
django.log
215
django.log
|
@ -5724,3 +5724,218 @@ Traceback (most recent call last):
|
||||||
FileNotFoundError: [WinError 2] Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë: 'temp_invoice.html'
|
FileNotFoundError: [WinError 2] Íå óäàåòñÿ íàéòè óêàçàííûé ôàéë: 'temp_invoice.html'
|
||||||
WARNING 2024-03-07 13:43:03,802 log Not Found: /favicon.ico
|
WARNING 2024-03-07 13:43:03,802 log Not Found: /favicon.ico
|
||||||
WARNING 2024-03-07 14:16:25,678 log Not Found: /about/
|
WARNING 2024-03-07 14:16:25,678 log Not Found: /about/
|
||||||
|
INFO 2024-03-07 14:23:21,732 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 14:51:45,073 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 14:52:05,942 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\urls.py changed, reloading.
|
||||||
|
INFO 2024-03-07 14:52:06,781 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-07 15:09:22,235 log Not Found: /favicon.ico
|
||||||
|
INFO 2024-03-07 15:21:24,376 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 15:32:48,767 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 15:56:26,232 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 15:59:13,792 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-07 16:00:22,353 log Not Found: /test/
|
||||||
|
WARNING 2024-03-07 16:00:22,414 log Not Found: /favicon.ico
|
||||||
|
INFO 2024-03-07 17:05:14,210 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-07 17:05:15,845 log Not Found: /test/
|
||||||
|
INFO 2024-03-07 17:12:04,397 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-07 17:12:05,032 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 17:16:07,037 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-07 17:16:07,685 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 17:16:14,853 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-07 17:16:15,395 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 17:17:35,050 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-07 17:17:35,607 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 17:18:15,440 autoreload C:\Users\fhjj3\djangoProject1\users\urls.py changed, reloading.
|
||||||
|
INFO 2024-03-07 17:18:15,991 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-07 17:18:25,344 log Not Found: /login/
|
||||||
|
WARNING 2024-03-07 17:18:37,362 log Not Found: /profile/
|
||||||
|
INFO 2024-03-07 17:21:13,878 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 17:22:25,019 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-07 17:33:01,757 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-07 17:33:02,266 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-07 17:33:32,219 log Not Found: /oidc/
|
||||||
|
INFO 2024-03-07 17:37:03,877 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:13:02,692 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:13:37,832 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 09:13:38,392 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:13:51,952 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 09:13:52,388 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:14:11,218 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 09:14:12,034 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:14:20,204 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 09:14:20,789 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:17:50,550 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 09:17:51,130 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 09:18:30,398 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 09:18:31,137 autoreload Watching for file changes with StatReloader
|
||||||
|
ERROR 2024-03-10 09:18:33,336 log Internal Server Error: /
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
|
||||||
|
response = get_response(request)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
|
||||||
|
response = wrapped_callback(request, *callback_args, **callback_kwargs)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\main\views.py", line 18, in product_list
|
||||||
|
return render(request,'main/product/list.html',
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\shortcuts.py", line 25, in render
|
||||||
|
content = loader.render_to_string(template_name, context, request, using=using)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\loader.py", line 62, in render_to_string
|
||||||
|
return template.render(context, request)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\backends\django.py", line 61, in render
|
||||||
|
return self.template.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 171, in render
|
||||||
|
return self._render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 163, in _render
|
||||||
|
return self.nodelist.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in render
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in <listcomp>
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 961, in render_annotated
|
||||||
|
return self.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\loader_tags.py", line 159, in render
|
||||||
|
return compiled_parent._render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 163, in _render
|
||||||
|
return self.nodelist.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in render
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in <listcomp>
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 961, in render_annotated
|
||||||
|
return self.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\defaulttags.py", line 479, in render
|
||||||
|
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\urls\base.py", line 88, in reverse
|
||||||
|
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\urls\resolvers.py", line 851, in _reverse_with_prefix
|
||||||
|
raise NoReverseMatch(msg)
|
||||||
|
django.urls.exceptions.NoReverseMatch: Reverse for '' not found. '' is not a valid view function or pattern name.
|
||||||
|
WARNING 2024-03-10 09:18:33,623 log Not Found: /favicon.ico
|
||||||
|
INFO 2024-03-10 20:25:29,486 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:19:47,677 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:36:37,174 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:37:04,173 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 21:37:04,880 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:37:20,234 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 21:37:20,739 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:41:02,577 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-10 21:41:03,167 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:44:24,191 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 21:44:24,822 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:45:06,053 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 21:45:06,702 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 21:45:14,549 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
INFO 2024-03-10 21:45:15,050 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 22:49:49,452 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 22:51:33,350 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-10 22:52:48,830 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-10 22:53:07,221 log Not Found: /summ/
|
||||||
|
WARNING 2024-03-10 22:53:58,229 log Not Found: /summ/
|
||||||
|
INFO 2024-03-10 22:55:29,949 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-10 22:55:30,607 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-10 22:55:31,638 log Not Found: /summ/
|
||||||
|
INFO 2024-03-10 22:55:38,830 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-10 22:55:42,560 log Not Found: /summ/
|
||||||
|
INFO 2024-03-12 11:12:23,669 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-12 11:13:10,048 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-12 17:45:56,825 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-12 18:08:53,134 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-13 14:56:52,009 autoreload Watching for file changes with StatReloader
|
||||||
|
WARNING 2024-03-13 14:57:46,688 log Not Found: /favicon.ico
|
||||||
|
WARNING 2024-03-13 14:57:59,967 log Not Found: /favicon.ico
|
||||||
|
WARNING 2024-03-13 15:09:23,373 log Not Found: /accounts/keycloak/login/callback/
|
||||||
|
INFO 2024-03-14 14:14:26,285 autoreload Watching for file changes with StatReloader
|
||||||
|
ERROR 2024-03-14 14:14:29,517 log Internal Server Error: /
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
|
||||||
|
response = get_response(request)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
|
||||||
|
response = wrapped_callback(request, *callback_args, **callback_kwargs)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\main\views.py", line 20, in product_list
|
||||||
|
return render(request,'main/product/list.html',
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\shortcuts.py", line 25, in render
|
||||||
|
content = loader.render_to_string(template_name, context, request, using=using)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\loader.py", line 62, in render_to_string
|
||||||
|
return template.render(context, request)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\backends\django.py", line 61, in render
|
||||||
|
return self.template.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 171, in render
|
||||||
|
return self._render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 163, in _render
|
||||||
|
return self.nodelist.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in render
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in <listcomp>
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 961, in render_annotated
|
||||||
|
return self.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\loader_tags.py", line 159, in render
|
||||||
|
return compiled_parent._render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 163, in _render
|
||||||
|
return self.nodelist.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in render
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 1000, in <listcomp>
|
||||||
|
return SafeString("".join([node.render_annotated(context) for node in self]))
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\base.py", line 961, in render_annotated
|
||||||
|
return self.render(context)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\template\defaulttags.py", line 479, in render
|
||||||
|
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\urls\base.py", line 88, in reverse
|
||||||
|
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
File "C:\Users\fhjj3\djangoProject1\venv\Lib\site-packages\django\urls\resolvers.py", line 851, in _reverse_with_prefix
|
||||||
|
raise NoReverseMatch(msg)
|
||||||
|
django.urls.exceptions.NoReverseMatch: Reverse for 'keycloak_login' not found. 'keycloak_login' is not a valid view function or pattern name.
|
||||||
|
WARNING 2024-03-14 14:14:29,713 log Not Found: /favicon.ico
|
||||||
|
INFO 2024-03-14 14:15:15,583 autoreload C:\Users\fhjj3\djangoProject1\users\urls.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:15:16,351 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:18:54,860 autoreload C:\Users\fhjj3\djangoProject1\users\urls.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:18:55,622 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:21:13,974 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:21:14,798 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:22:06,659 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:22:07,789 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:22:54,462 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:22:55,204 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:23:00,369 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:23:01,227 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:24:06,443 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:24:26,277 views Çàïðîñ óñïåøíî îáðàáîòàí 1
|
||||||
|
INFO 2024-03-14 14:24:41,003 autoreload C:\Users\fhjj3\djangoProject1\users\views.py changed, reloading.
|
||||||
|
INFO 2024-03-14 14:24:42,283 autoreload Watching for file changes with StatReloader
|
||||||
|
INFO 2024-03-14 14:25:00,106 autoreload C:\Users\fhjj3\djangoProject1\djangoProject1\settings.py changed, reloading.
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"realm": "Harmony",
|
||||||
|
"auth-server-url": "https://auth.myterior.kz",
|
||||||
|
"ssl-required": "external",
|
||||||
|
"resource": "admin-cli",
|
||||||
|
"credentials": {
|
||||||
|
"secret": "wOVphEiLVBS1AlNKRpaQpD4yQh5Wm3TJ"
|
||||||
|
},
|
||||||
|
"confidential-port": 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,12 @@ CART_SESSION_ID = 'cart'
|
||||||
# Application definition
|
# Application definition
|
||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
|
|
||||||
'django.contrib.sites',
|
'django.contrib.sites',
|
||||||
'allauth',
|
'allauth',
|
||||||
'allauth.account',
|
'allauth.account',
|
||||||
'allauth.socialaccount',
|
'allauth.socialaccount',
|
||||||
|
'allauth.socialaccount.providers.openid_connect',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django_extensions',
|
'django_extensions',
|
||||||
|
@ -47,7 +48,7 @@ INSTALLED_APPS = [
|
||||||
'cart.apps.CartConfig',
|
'cart.apps.CartConfig',
|
||||||
'orders.apps.OrdersConfig',
|
'orders.apps.OrdersConfig',
|
||||||
'users.apps.UsersConfig',
|
'users.apps.UsersConfig',
|
||||||
|
'mozilla_django_oidc',
|
||||||
|
|
||||||
]
|
]
|
||||||
SESSION_COOKIE_AGE = 86400 # 24 часа в секундах
|
SESSION_COOKIE_AGE = 86400 # 24 часа в секундах
|
||||||
|
@ -63,7 +64,6 @@ MIDDLEWARE = [
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||||
'allauth.account.middleware.AccountMiddleware',
|
'allauth.account.middleware.AccountMiddleware',
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
ROOT_URLCONF = 'djangoProject1.urls'
|
ROOT_URLCONF = 'djangoProject1.urls'
|
||||||
|
@ -166,53 +166,47 @@ KEYCLOAK_CONFIG = {
|
||||||
'CLIENT_ID': 'admin-cli',
|
'CLIENT_ID': 'admin-cli',
|
||||||
'CLIENT_SECRET': 'wOVphEiLVBS1AlNKRpaQpD4yQh5Wm3TJ',
|
'CLIENT_SECRET': 'wOVphEiLVBS1AlNKRpaQpD4yQh5Wm3TJ',
|
||||||
'CALLBACK_URL': 'http://127.0.0.1:8000/products/',
|
'CALLBACK_URL': 'http://127.0.0.1:8000/products/',
|
||||||
|
'POST_LOGOUT_REDIRECT_URI': 'http://127.0.0.1:8000/',
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LOGGING = {
|
LOGGING = {
|
||||||
'version': 1,
|
'version': 1,
|
||||||
'disable_existing_loggers': False,
|
'disable_existing_loggers': False,
|
||||||
'formatters': {
|
|
||||||
'verbose': {
|
|
||||||
'format': '{levelname} {asctime} {module} {message}',
|
|
||||||
'style': '{',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
'handlers': {
|
'handlers': {
|
||||||
'console': {
|
|
||||||
'class': 'logging.StreamHandler',
|
|
||||||
'formatter': 'verbose',
|
|
||||||
},
|
|
||||||
'file': {
|
'file': {
|
||||||
'level': 'INFO',
|
'level': 'DEBUG',
|
||||||
'class': 'logging.FileHandler',
|
'class': 'logging.FileHandler',
|
||||||
'filename': 'django.log',
|
'filename': 'debug.log',
|
||||||
'formatter': 'verbose',
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'loggers': {
|
'loggers': {
|
||||||
'': { # 'root' logger
|
'django': {
|
||||||
'handlers': ['console', 'file'],
|
'handlers': ['file'],
|
||||||
'level': 'INFO',
|
'level': 'DEBUG',
|
||||||
|
'propagate': True,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
# settings.py
|
|
||||||
|
|
||||||
# ... ваш предыдущий код ...
|
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = [
|
||||||
|
# ...
|
||||||
|
'allauth.account.auth_backends.AuthenticationBackend',
|
||||||
|
# ...
|
||||||
|
]
|
||||||
SOCIALACCOUNT_PROVIDERS = {
|
SOCIALACCOUNT_PROVIDERS = {
|
||||||
'openid': {
|
"openid_connect": {
|
||||||
'SERVERS': [
|
"APPS": [
|
||||||
{
|
{
|
||||||
'id': 'keycloak',
|
"provider_id": "keycloak",
|
||||||
'name': 'Keycloak',
|
"name": "Keycloak",
|
||||||
'openid_config_url': 'https://auth.myterior.kz/realms/Harmony/.well-known/openid-configuration',
|
"client_id": "admin-cli",
|
||||||
'client_id': 'admin-cli',
|
"secret": "wOVphEiLVBS1AlNKRpaQpD4yQh5Wm3TJ",
|
||||||
'client_secret': 'wOVphEiLVBS1AlNKRpaQpD4yQh5Wm3TJ',
|
"settings": {
|
||||||
|
"server_url": "https://auth.myterior.kz/realms/Harmony/.well-known/openid-configuration",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ urlpatterns = [
|
||||||
path('orders/', include('orders.urls', namespace='orders')),
|
path('orders/', include('orders.urls', namespace='orders')),
|
||||||
path('auth/', include('users.urls')),
|
path('auth/', include('users.urls')),
|
||||||
path('', include('main.urls', namespace='main')),
|
path('', include('main.urls', namespace='main')),
|
||||||
|
path('accounts/', include('allauth.urls')),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.7 MiB After Width: | Height: | Size: 1.9 MiB |
Binary file not shown.
Binary file not shown.
|
@ -37,7 +37,7 @@
|
||||||
/* Стили для основного контента и боковой панели категорий */
|
/* Стили для основного контента и боковой панели категорий */
|
||||||
.main-content {
|
.main-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,33 +1,52 @@
|
||||||
{% extends "main/base.html" %} <!-- Предполагается, что у вас есть базовый шаблон -->
|
{% extends "main/base.html" %}
|
||||||
|
|
||||||
{% load static %}
|
{% load static %}
|
||||||
{% block title %}О магазине{% endblock %}
|
{% block title %}О магазине{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css">
|
||||||
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.1.3/css/bootstrap.min.css">
|
||||||
|
|
||||||
<div class="container py-5">
|
<style>
|
||||||
<h2 class="mb-4">О магазине "Гармония Эзотерики"</h2>
|
.bg-semi-transparent {
|
||||||
<p>
|
background: rgba(236, 219, 255, 0.8); /* Белый фон с небольшой прозрачностью */
|
||||||
"Гармония Эзотерики" - это ваш уникальный магазин товаров для практикующих эзотерику и всех, кто интересуется мистическими аспектами жизни. Мы предлагаем широкий ассортимент товаров, включая кристаллы, таро карты, эзотерические книги, амулеты и многое другое.
|
border-radius: 15px; /* Скругленные углы для контейнера */
|
||||||
</p>
|
padding: 20px; /* Дополнительный внутренний отступ */
|
||||||
<p>
|
}
|
||||||
Наш магазин создан для тех, кто ищет гармонию в себе и вокруг. Мы верим, что правильные инструменты и знания могут открыть дверь в мир энергий, интуиции и самопознания.
|
.contact-icon {
|
||||||
</p>
|
width: 24px; /* Установите размер иконок */
|
||||||
|
margin-right: 10px; /* Отступ справа от иконки */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
<h3 class="mt-5 mb-3">Контакты</h3>
|
<div class="container py-5 position-relative">
|
||||||
<ul>
|
<div class="bg-semi-transparent">
|
||||||
<li>Email: info@harmony-esoterics.com</li>
|
<h2 class="mb-4 border-bottom pb-2">О магазине "Гармония Эзотерики"</h2>
|
||||||
<li>Телефон: +7 (999) 999-99-99</li>
|
<p class="text-muted">
|
||||||
<li>Адрес: Город N, Улица Мистическая, д. 42</li>
|
"Гармония Эзотерики" - это ваш уникальный магазин товаров для практикующих эзотерику и всех, кто интересуется мистическими аспектами жизни. Мы предлагаем широкий ассортимент товаров, включая кристаллы, таро карты, эзотерические книги, амулеты и многое другое.
|
||||||
</ul>
|
</p>
|
||||||
|
<p class="text-muted">
|
||||||
|
Наш магазин создан для тех, кто ищет гармонию в себе и вокруг. Мы верим, что правильные инструменты и знания могут открыть дверь в мир энергий, интуиции и самопознания.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 class="mt-5 mb-3">Следите за нами в социальных сетях</h3>
|
<h3 class="mt-5 mb-3">Контакты</h3>
|
||||||
<p>Узнавайте о новинках, акциях и мероприятиях первыми!</p>
|
<ul class="list-unstyled">
|
||||||
<div>
|
<li><img src="https://example.com/path/to/email-icon.png" alt="" class="contact-icon"> Email: info@harmony-esoterics.com</li>
|
||||||
<a href="https://instagram.com/yourinstagram" class="btn btn-outline-dark btn-sm mb-2" target="_blank">Instagram <i class="fa fa-instagram"></i></a>
|
<li><img src="https://example.com/path/to/phone-icon.png" alt="" class="contact-icon"> Телефон: +7 (999) 999-99-99</li>
|
||||||
<a href="https://facebook.com/yourfacebookpage" class="btn btn-outline-dark btn-sm mb-2" target="_blank">Facebook <i class="fa fa-facebook"></i></a>
|
<li><img src="https://example.com/path/to/location-icon.png" alt="" class="contact-icon"> Адрес: Город N, Улица Мистическая, д. 42</li>
|
||||||
<!-- Добавьте другие социальные сети по аналогии -->
|
</ul>
|
||||||
|
|
||||||
|
<h3 class="mt-5 mb-3">Следите за нами в социальных сетях</h3>
|
||||||
|
<div>
|
||||||
|
<a href="https://instagram.com/" class="btn btn-outline-dark btn-sm mb-2" target="_blank">Instagram <i class="fab fa-instagram"></i></a>
|
||||||
|
<a href="https://facebook.com/" class="btn btn-outline-dark btn-sm mb-2" target="_blank">Facebook <i class="fab fa-facebook-f"></i></a>
|
||||||
|
<!-- Добавьте другие социальные сети по аналогии -->
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script src="https://kit.fontawesome.com/your-fontawesome-kit-code.js"></script>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.0.slim.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js"></script>
|
||||||
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/5.1.3/js/bootstrap.min.js"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
|
|
||||||
|
|
||||||
<li><a class="dropdown-item text-white" href="#">Контактная информация</a></li>
|
<li><a class="dropdown-item text-white" href="{% url "main:about" %}">Контактная информация</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -60,7 +60,7 @@
|
||||||
|
|
||||||
<li><a class="dropdown-item text-white" href="#">Личный кабинет</a></li>
|
<li><a class="dropdown-item text-white" href="#">Личный кабинет</a></li>
|
||||||
<li><a class="dropdown-item text-white" href="{% url 'keycloak_login' %}">Войти</a></li>
|
<li><a class="dropdown-item text-white" href="{% url 'keycloak_login' %}">Войти</a></li>
|
||||||
<li><a class="dropdown-item text-white" href="#">Выйти</a></li>
|
<li><a class="dropdown-item text-white" href="{% url 'keycloak_logout' %}">Выйти</a></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
@ -93,7 +93,7 @@
|
||||||
<!-- Адаптация под мобильные устройства -->
|
<!-- Адаптация под мобильные устройства -->
|
||||||
<div class="col-12 col-sm-4 col-md-3 col-lg-2">
|
<div class="col-12 col-sm-4 col-md-3 col-lg-2">
|
||||||
<div class="list-group">
|
<div class="list-group">
|
||||||
<a href="#" class="list-group-item list-group-item-action active w-100% " aria-current="true">Категории</a>
|
<a href="#" class="list-group-item list-group-item-action active " aria-current="true">Категории</a>
|
||||||
{% for category in categories %}
|
{% for category in categories %}
|
||||||
<a href="{% url 'main:product_list_by_category' category.slug %}" class="list-group-item list-group-item-action">{{ category.name }}</a>
|
<a href="{% url 'main:product_list_by_category' category.slug %}" class="list-group-item list-group-item-action">{{ category.name }}</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
{% load static %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>CALLBACK</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -12,11 +12,12 @@
|
||||||
<p class="product-price">{{ product.price }}₸</p>
|
<p class="product-price">{{ product.price }}₸</p>
|
||||||
<p class="product-description">{{ product.description|linebreaks }}</p>
|
<p class="product-description">{{ product.description|linebreaks }}</p>
|
||||||
<div class="product-actions">
|
<div class="product-actions">
|
||||||
<form action="{% url 'cart:cart_add' product.id %}" method="post">
|
<form action="{% url 'cart:cart_add' product.id %}" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
<input type="hidden" name="quantity" value="1">
|
||||||
<input type="submit" value="Добавить в корзину" class="btn btn-primary">
|
<input type="hidden" name="override" value="False">
|
||||||
</form>
|
<button style="color: #00ffb6" type="submit" class="btn btn-primary btn-sm">Добавить в корзину</button>
|
||||||
|
</form>
|
||||||
<a href="{% url 'main:product_list' %}" class="btn btn-secondary">Продолжить покупки</a>
|
<a href="{% url 'main:product_list' %}" class="btn btn-secondary">Продолжить покупки</a>
|
||||||
<a href="{% url "orders:order_create"%}" class="btn btn-secondary">Оформить заказ</a>
|
<a href="{% url "orders:order_create"%}" class="btn btn-secondary">Оформить заказ</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<link rel="stylesheet" href="{% static 'deps/css/my_css.css' %}">
|
<link rel="stylesheet" href="{% static 'deps/css/my_css.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'deps/css/exo.css' %}">
|
<link rel="stylesheet" href="{% static 'deps/css/exo.css' %}">
|
||||||
|
|
||||||
<div class="main-content d-flex flex-column-reverse flex-sm-row align-items-center">
|
<div class="main-content d-flex flex-column-reverse flex-sm-row ">
|
||||||
<div id="main" class="product-list">
|
<div id="main" class="product-list">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{% for product in products %}
|
{% for product in products %}
|
||||||
|
|
|
@ -4,12 +4,15 @@ from . import views
|
||||||
app_name = 'main'
|
app_name = 'main'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', views.product_list, name='product_list'),
|
path('callback/', views.callback, name='callback'),
|
||||||
|
|
||||||
|
path('', views.product_list, name='product_list'),
|
||||||
|
path('about/', views.about, name='about'),
|
||||||
path('products/', views.product_list, name='product_list'),
|
path('products/', views.product_list, name='product_list'),
|
||||||
path('<slug:category_slug>/', views.product_list,
|
path('<slug:category_slug>/', views.product_list,
|
||||||
name='product_list_by_category'),
|
name='product_list_by_category'),
|
||||||
path('<int:id>/<slug:slug>/', views.product_detail,
|
path('<int:id>/<slug:slug>/', views.product_detail,
|
||||||
name='product_detail'), path('about/', views.about, name='about'),
|
name='product_detail'),
|
||||||
|
path('about/', views.about, name='about'),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
|
import json
|
||||||
|
|
||||||
from django.shortcuts import render,get_object_or_404
|
from django.shortcuts import render,get_object_or_404
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse, JsonResponse
|
||||||
from .models import Category, Product
|
from .models import Category, Product
|
||||||
from cart.forms import CartAddProductForm
|
from cart.forms import CartAddProductForm
|
||||||
|
|
||||||
|
@ -35,4 +37,6 @@ def product_detail(request, id, slug):
|
||||||
|
|
||||||
# Функция для страницы "О нас"
|
# Функция для страницы "О нас"
|
||||||
def about(request):
|
def about(request):
|
||||||
return render(request, 'main/about.html') # предполагается, что у вас есть шаблон about.html в папке main
|
return render(request, 'main/about.html')
|
||||||
|
def callback(request):
|
||||||
|
return render(request,'main/callback.html')
|
Binary file not shown.
Binary file not shown.
|
@ -4,6 +4,8 @@ from django.urls import path
|
||||||
from . import views
|
from . import views
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('test/', views.test_payment, name='test-payment'),
|
|
||||||
path('login/', views.keycloak_login, name='keycloak_login'),
|
path('login/', views.keycloak_login, name='keycloak_login'),
|
||||||
|
path('keycloak_logout/', views.keycloak_logout, name='keycloak_logout'),
|
||||||
|
path('products/', views.keycloak_redirect, name='keycloak_redirect'),
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,28 +1,62 @@
|
||||||
# views.py
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from django.http import JsonResponse
|
||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.urls import reverse
|
from django.conf import settings
|
||||||
from keycloak import KeycloakOpenID
|
from keycloak import KeycloakOpenID
|
||||||
from django.http import HttpResponse
|
from urllib.parse import urlencode, urljoin
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth import logout
|
||||||
|
|
||||||
from djangoProject1 import settings
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
|
||||||
def test_payment(request):
|
|
||||||
# Assuming the user's username is what you want to return
|
|
||||||
return HttpResponse(request.user.username)
|
|
||||||
# Inside your_app/views.py
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
def keycloak_login(request):
|
def keycloak_login(request):
|
||||||
|
|
||||||
keycloak_openid = KeycloakOpenID(
|
keycloak_openid = KeycloakOpenID(
|
||||||
server_url=settings.KEYCLOAK_CONFIG['SERVER_URL'],
|
server_url=settings.KEYCLOAK_CONFIG['SERVER_URL'],
|
||||||
client_id=settings.KEYCLOAK_CONFIG['CLIENT_ID'],
|
client_id=settings.KEYCLOAK_CONFIG['CLIENT_ID'],
|
||||||
realm_name=settings.KEYCLOAK_CONFIG['REALM'],
|
realm_name=settings.KEYCLOAK_CONFIG['REALM'],
|
||||||
client_secret_key=settings.KEYCLOAK_CONFIG['CLIENT_SECRET']
|
client_secret_key=settings.KEYCLOAK_CONFIG['CLIENT_SECRET']
|
||||||
)
|
)
|
||||||
auth_url = keycloak_openid.auth_url(redirect_uri=settings.KEYCLOAK_CONFIG['CALLBACK_URL'])
|
|
||||||
|
|
||||||
return redirect(auth_url)
|
|
||||||
|
redirect_uri = settings.KEYCLOAK_CONFIG['CALLBACK_URL']
|
||||||
|
auth_url = keycloak_openid.auth_url(redirect_uri=redirect_uri)
|
||||||
|
logger.info('Запрос успешно обработан')
|
||||||
|
return redirect(auth_url)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def keycloak_logout(request):
|
||||||
|
logout(request)
|
||||||
|
|
||||||
|
keycloak_server_url = settings.KEYCLOAK_CONFIG['SERVER_URL']
|
||||||
|
realm_name = settings.KEYCLOAK_CONFIG['REALM']
|
||||||
|
redirect_uri = settings.KEYCLOAK_CONFIG['POST_LOGOUT_REDIRECT_URI']
|
||||||
|
|
||||||
|
|
||||||
|
params = {'redirect_uri': redirect_uri}
|
||||||
|
keycloak_logout_url = (
|
||||||
|
f'{keycloak_server_url}/realms/{realm_name}/protocol/openid-connect/logout'
|
||||||
|
f'?{urlencode(params)}'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
return redirect(keycloak_logout_url)
|
||||||
|
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.views.decorators.http import require_http_methods
|
||||||
|
|
||||||
|
import logging
|
||||||
|
@require_http_methods(["GET"])
|
||||||
|
def keycloak_redirect(request):
|
||||||
|
|
||||||
|
# Extract the authorization code from the query parameters
|
||||||
|
authorization_code = request.GET.get('code')
|
||||||
|
|
||||||
|
if authorization_code:
|
||||||
|
# Proceed with the token exchange process here
|
||||||
|
print(authorization_code)
|
||||||
|
logger.info(' 2 Запрос успешно обработан')
|
||||||
|
return HttpResponse("Authorization code received.")
|
||||||
|
else:
|
||||||
|
return HttpResponse("Authorization code not found.", status=400)
|
Loading…
Reference in New Issue