Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions django_views_routing_homework/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,28 @@
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_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


urlpatterns = [
path('admin/', admin.site.urls),
path('welcome/', welcome_user_view),
path('banned/<slug:username>/', is_username_banned_view),
path('user-info-by-username/<int:username>/', get_user_info_by_username_view),
path('user-info-by-username/<slug:username>/', get_user_info_by_username_view),
path('products/', get_products_view),
path('authorization/', authorization_view),
path('process-authorization/', process_authorization_view),
path('me/ip/', show_user_ip_view),
path('user/validate/', validate_user_data_view),
path('user/github/<slug:github_username>/full-name/', fetch_name_from_github_view),
path('text/generate/', generate_file_with_text_view),
# добавлять пути тут
path('bye/', bye_user_view),
path('user_info/<int:user_id>/', get_user_info_view),
path('month-title/<int:month_number>/', get_month_title_view),
path('gre👋et/<str:name>/<str:language>/', greet_user_in_different_languages_view),
]
6 changes: 3 additions & 3 deletions django_views_routing_homework/views/level_1/a_welcome_user.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.http import HttpResponse
from django.http import HttpResponse, HttpRequest

"""
У нас есть вьюха welcome_user_view, в которой должно формироваться приветствие, а формируется прощание.
Expand All @@ -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)
4 changes: 2 additions & 2 deletions django_views_routing_homework/views/level_1/b_bye_user.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.http import HttpResponse
from django.http import HttpResponse, HttpRequest

"""
У нас есть вьюха bye_user_view, но она не привязана ни к какому пути.
Expand All @@ -9,6 +9,6 @@
"""


def bye_user_view(request):
def bye_user_view(request: HttpRequest) -> HttpResponse:
bye_message = 'Bye, user'
return HttpResponse(bye_message)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.http import HttpResponse
from django.http import HttpResponse, HttpRequest


"""
Expand All @@ -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')
10 changes: 5 additions & 5 deletions django_views_routing_homework/views/level_1/d_user_info.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.http import JsonResponse
from django.http import JsonResponse, HttpRequest


"""
Expand All @@ -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)
16 changes: 9 additions & 7 deletions django_views_routing_homework/views/level_1/e_month_title.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.http import HttpResponse, HttpResponseNotFound
from django.http import HttpResponse, HttpResponseNotFound, HttpRequest


"""
Expand All @@ -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)
11 changes: 9 additions & 2 deletions django_views_routing_homework/views/level_2/c_product_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
13 changes: 12 additions & 1 deletion django_views_routing_homework/views/level_2/d_authorization.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'])

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
django==4.2.3
mypy==1.7.0
20 changes: 20 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -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