From 0081cb28404a17767796d542dd1d49fc3ca206cf Mon Sep 17 00:00:00 2001 From: Beloded1 Date: Mon, 27 Nov 2023 14:22:15 +0400 Subject: [PATCH 1/2] Finished first level --- django_views_routing_homework/urls.py | 8 +++++++- .../views/level_1/a_welcome_user.py | 6 +++--- .../views/level_1/b_bye_user.py | 4 ++-- .../views/level_1/c_baned_username.py | 5 +++-- .../views/level_1/d_user_info.py | 10 +++++----- .../views/level_1/e_month_title.py | 16 ++++++++------- requirements.txt | 1 + setup.cfg | 20 +++++++++++++++++++ 8 files changed, 50 insertions(+), 20 deletions(-) create mode 100644 setup.cfg diff --git a/django_views_routing_homework/urls.py b/django_views_routing_homework/urls.py index 269591b..db41170 100644 --- a/django_views_routing_homework/urls.py +++ b/django_views_routing_homework/urls.py @@ -9,9 +9,13 @@ from django_views_routing_homework.views.level_3.b_validate_user_data import validate_user_data_view from django_views_routing_homework.views.level_3.c_github_full_name import fetch_name_from_github_view from django_views_routing_homework.views.level_3.d_file_generation import generate_file_with_text_view +from django_views_routing_homework.views.level_1.b_bye_user import bye_user_view +from django_views_routing_homework.views.level_1.d_user_info import get_user_info_view +from django_views_routing_homework.views.level_1.e_month_title import get_month_title_view from django_views_routing_homework.views.level_3.a_user_ip import show_user_ip_view + urlpatterns = [ path('admin/', admin.site.urls), path('welcome/', welcome_user_view), @@ -24,5 +28,7 @@ path('user/validate/', validate_user_data_view), path('user/github//full-name/', fetch_name_from_github_view), path('text/generate/', generate_file_with_text_view), - # добавлять пути тут + path('bye/', bye_user_view), + path('user_info//', get_user_info_view), + path('month-title//', get_month_title_view), ] diff --git a/django_views_routing_homework/views/level_1/a_welcome_user.py b/django_views_routing_homework/views/level_1/a_welcome_user.py index c45ef16..b4010a9 100644 --- a/django_views_routing_homework/views/level_1/a_welcome_user.py +++ b/django_views_routing_homework/views/level_1/a_welcome_user.py @@ -1,4 +1,4 @@ -from django.http import HttpResponse +from django.http import HttpResponse, HttpRequest """ У нас есть вьюха welcome_user_view, в которой должно формироваться приветствие, а формируется прощание. @@ -9,6 +9,6 @@ """ -def welcome_user_view(request): - welcome_message = 'Bye, user' +def welcome_user_view(request: HttpRequest) -> HttpResponse: + welcome_message = 'Hello, user' return HttpResponse(welcome_message) diff --git a/django_views_routing_homework/views/level_1/b_bye_user.py b/django_views_routing_homework/views/level_1/b_bye_user.py index 9d37478..4114fdd 100644 --- a/django_views_routing_homework/views/level_1/b_bye_user.py +++ b/django_views_routing_homework/views/level_1/b_bye_user.py @@ -1,4 +1,4 @@ -from django.http import HttpResponse +from django.http import HttpResponse, HttpRequest """ У нас есть вьюха bye_user_view, но она не привязана ни к какому пути. @@ -9,6 +9,6 @@ """ -def bye_user_view(request): +def bye_user_view(request: HttpRequest) -> HttpResponse: bye_message = 'Bye, user' return HttpResponse(bye_message) diff --git a/django_views_routing_homework/views/level_1/c_baned_username.py b/django_views_routing_homework/views/level_1/c_baned_username.py index 54bb122..1bff20f 100644 --- a/django_views_routing_homework/views/level_1/c_baned_username.py +++ b/django_views_routing_homework/views/level_1/c_baned_username.py @@ -1,4 +1,4 @@ -from django.http import HttpResponse +from django.http import HttpResponse, HttpRequest """ @@ -14,5 +14,6 @@ def is_username_banned_view(request, username: str): - # код писать тут + if username in BANNED_USERNAMES: + return HttpResponse('User banned') return HttpResponse('User not banned') diff --git a/django_views_routing_homework/views/level_1/d_user_info.py b/django_views_routing_homework/views/level_1/d_user_info.py index 99db774..244e49a 100644 --- a/django_views_routing_homework/views/level_1/d_user_info.py +++ b/django_views_routing_homework/views/level_1/d_user_info.py @@ -1,4 +1,4 @@ -from django.http import JsonResponse +from django.http import JsonResponse, HttpRequest """ @@ -17,8 +17,8 @@ } -def get_user_info_view(request, user_id: int): - if user_id in USER_ID_TO_USER_INFO_MAPPER: - return JsonResponse(data=USER_ID_TO_USER_INFO_MAPPER[user_id]) - else: +def get_user_info_view(request: HttpRequest, user_id: int) -> JsonResponse: + user = USER_ID_TO_USER_INFO_MAPPER.get(user_id) + if not user: return JsonResponse(data={'error': 'There is no user info'}, status=404) + return JsonResponse(data=user) diff --git a/django_views_routing_homework/views/level_1/e_month_title.py b/django_views_routing_homework/views/level_1/e_month_title.py index 77b266c..caf567c 100644 --- a/django_views_routing_homework/views/level_1/e_month_title.py +++ b/django_views_routing_homework/views/level_1/e_month_title.py @@ -1,4 +1,4 @@ -from django.http import HttpResponse, HttpResponseNotFound +from django.http import HttpResponse, HttpResponseNotFound, HttpRequest """ @@ -11,12 +11,14 @@ 3. Добавьте путь в файле urls.py, чтобы при открытии http://127.0.0.1:8000/month-title/тут номер месяца/ вызывалась вьюха get_month_title_view. Например http://127.0.0.1:8000/month-title/3/ """ +MONTHS = {1: 'January', 2: 'Febriary', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August',9: 'September', 10: 'October', 11: 'November', 12: 'December'} +def get_month_title_by_number(month_number: int) -> str | None: + return MONTHS.get(month_number) -def get_month_title_by_number(month_number: int): - pass # код писать тут - -def get_month_title_view(request, month_number: int): - # код писать тут - return HttpResponseNotFound('Месяца с таким номером не существует') +def get_month_title_view(request: HttpRequest,month_number: int) -> HttpResponseNotFound | HttpResponse: + month_title = get_month_title_by_number(month_number) + if not month_title: + return HttpResponseNotFound(f'{month_number} not found') + return HttpResponse(month_title) diff --git a/requirements.txt b/requirements.txt index 41125cc..96af11e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ django==4.2.3 +mypy==1.7.0 \ No newline at end of file diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..bf0471d --- /dev/null +++ b/setup.cfg @@ -0,0 +1,20 @@ +[flake8] +max-module-members = 12 +max-local-variables = 12 +max-line-length = 99 + + +[mypy] +warn_unreachable = True + +follow_imports = skip +strict_optional = True +warn_redundant_casts = True +warn_unused_ignores = True +no_implicit_reexport = True + +disallow_any_generics = True +check_untyped_defs = True +disallow_untyped_defs = True +ignore_missing_imports = True +disallow_untyped_calls = True \ No newline at end of file From 476d9374de90e097aa45c845b37825bc41a7ea7d Mon Sep 17 00:00:00 2001 From: Beloded1 Date: Wed, 29 Nov 2023 15:01:56 +0400 Subject: [PATCH 2/2] Finished level_2 --- django_views_routing_homework/urls.py | 4 +++- .../views/level_2/c_product_type.py | 11 +++++++++-- .../views/level_2/d_authorization.py | 13 ++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/django_views_routing_homework/urls.py b/django_views_routing_homework/urls.py index db41170..968bf31 100644 --- a/django_views_routing_homework/urls.py +++ b/django_views_routing_homework/urls.py @@ -12,6 +12,7 @@ from django_views_routing_homework.views.level_1.b_bye_user import bye_user_view from django_views_routing_homework.views.level_1.d_user_info import get_user_info_view from django_views_routing_homework.views.level_1.e_month_title import get_month_title_view +from django_views_routing_homework.views.level_2.b_greet_user_language import greet_user_in_different_languages_view from django_views_routing_homework.views.level_3.a_user_ip import show_user_ip_view @@ -20,7 +21,7 @@ path('admin/', admin.site.urls), path('welcome/', welcome_user_view), path('banned//', is_username_banned_view), - path('user-info-by-username//', get_user_info_by_username_view), + path('user-info-by-username//', get_user_info_by_username_view), path('products/', get_products_view), path('authorization/', authorization_view), path('process-authorization/', process_authorization_view), @@ -31,4 +32,5 @@ path('bye/', bye_user_view), path('user_info//', get_user_info_view), path('month-title//', get_month_title_view), + path('gre👋et///', greet_user_in_different_languages_view), ] diff --git a/django_views_routing_homework/views/level_2/c_product_type.py b/django_views_routing_homework/views/level_2/c_product_type.py index 5d87f69..f6ac93e 100644 --- a/django_views_routing_homework/views/level_2/c_product_type.py +++ b/django_views_routing_homework/views/level_2/c_product_type.py @@ -37,7 +37,14 @@ def get_products_view(request): - products = [] - # код писать тут + # Get the value of the 'type' parameter from the request's GET parameters + product_type = request.GET.get('type') + + # If 'type' parameter is present, filter products by type + if product_type: + products = [product for product in PRODUCTS if product['type'] == product_type] + else: + # If 'type' parameter is not present, return all products + products = PRODUCTS return JsonResponse(data=products, safe=False) diff --git a/django_views_routing_homework/views/level_2/d_authorization.py b/django_views_routing_homework/views/level_2/d_authorization.py index 4873af5..c69fced 100644 --- a/django_views_routing_homework/views/level_2/d_authorization.py +++ b/django_views_routing_homework/views/level_2/d_authorization.py @@ -38,7 +38,18 @@ def process_authorization_view(request): if request.method == 'POST': data = json.loads(request.body) - # код писать тут + username = data.get('username') + password = data.get('password') + + # Check if the username exists in the USERNAME_TO_PASSWORD_MAPPER + if username in USERNAME_TO_PASSWORD_MAPPER: + # Check if the entered password matches the stored password + if password == USERNAME_TO_PASSWORD_MAPPER[username]: + return JsonResponse(data={}, status=200) # Success: Authorized + else: + return JsonResponse(data={}, status=403) # Unauthorized: Incorrect password + else: + return JsonResponse(data={}, status=403) # Unauthorized: Username not found else: return HttpResponseNotAllowed(permitted_methods=['POST'])