12311k

Untitled

Mar 6th, 2020
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.94 KB | None | 0 0
  1. urls.py
  2. _______
  3. from django.urls import path
  4. from . import views
  5. from accounts import views as acc_views
  6. from articles import views as art_views
  7.  
  8. urlpatterns = [
  9. path('', views.index),
  10. path('accounts/sign-up', acc_views.sign_up),
  11. path('accounts/sign-in', acc_views.sign_in),
  12. path('accounts/my-account', acc_views.my_account),
  13. path('accounts/friends/<str:user>', acc_views.get_friends),
  14. path('articles/dashboard', art_views.dashboard),
  15. path('articles/dashboard/<int:year>', art_views.dashboard),
  16. path('articles/<int:id>', art_views.article_by_id),
  17. path('articles/tag/<str:tag>', art_views.articles_by_tag),
  18. path('articles/add-tag', art_views.add_tag),# допишите новый путь для add-tag
  19.  
  20. ]
  21.  
  22. ________
  23. views.py
  24. ________
  25.  
  26. from django.http import HttpResponse
  27.  
  28. articles_list = [
  29. [1, "Айви Яптанго", 2020, "Самые шикарные парочки знаменитостей 2019 года", ["красота", "гороскопы"]],
  30. [2, "Лео Месси", 2014, "Un Abrazo a Todos", ["лайфстайл", "недвижимость"]],
  31. [3, "Гэри Паска", 2016, "Продаётся дом в Южной Флориде за $2,695", ["недвижимость", "коучинг", "howto"]],
  32. [4, "Роби Тобинсон", 1967, "7 лет я применял этот трюк и назад пути нет", ["лайфхак", "коучинг", "howto"]],
  33. [5, "Металлий Вутко", 2017, "Let Me Speak From My Heart", ["футбол", "допинг"]],
  34. [6, "Роби Тобинсон", 1977, "Беспроигрышная древнеримская техника обольщения", ["отношения", "история", "howto"]],
  35. [7, "Роби Тобинсон", 2022, "3 способа установить девайс от храпа", ["здоровье", "коучинг", "howto"]],
  36. [8, "Роби Тобинсон", 1975, "Интимная проблема, которой втайне озабочены все ваши друзья", ["отношения", "здоровье", "howto"]],
  37. [9, "Elina Shake", 2008, "Представления, основанные на классах", ["python", "howto", "лайфхак"]],
  38. [10, "Бен Франклин", 1753, "Электрические стодолларовые купюры", ["фондовая биржа", "рынки", "электричество"]],
  39. [11, "Роби Тобинсон", 2012, "5 забавных Django Apps, о которых говорят все", ["django", "IT", "howto"]],
  40. [12, "Металлий Вутко", 2017, "No Problems, No Criminality", ["допинг", "недвижимость"]],
  41. [13, "Роби Тобинсон", 1987, "7 способов до смерти напугать своего босса в пятницу 13-го", ["работа", "мистика", "howto"]],
  42. [14, "Твентин Карантино", 2007, "Четыре сервера", ["кино", "django", "мистика"]],
  43. ]
  44.  
  45.  
  46. # в функции generate_html()
  47. # оформим перечень статей в виде html-списка
  48. def generate_html(articles):
  49. if len(articles) == 0:
  50. return '<h1>По вашему запросу не найдено ни одной статьи!</h1>'
  51. else:
  52. base_html = '<h1>Статьи по вашему запросу:</h1> <ul>'
  53. for article in articles:
  54. list_item = f'<li><ul>' \
  55. f'<li><strong>{article[3]}</strong></li>' \
  56. f'<li>автор: {article[1]}</li>' \
  57. f'<li>год: {article[2]}</li>' \
  58. f'<li>теги: {", ".join(article[4])}</li>' \
  59. f'</ul></li>'
  60. base_html += list_item
  61. base_html += '</ul>'
  62. return base_html
  63.  
  64.  
  65. # на случай, если в адресе не указан год - установим значение year=-1
  66. def dashboard(request, year=-1):
  67. found_articles = []
  68. if year == -1:
  69. # если в адресе не указан год,
  70. # записываем в found_articles все статьи нашего блога
  71. found_articles = articles_list
  72. else:
  73. for article in articles_list:
  74. if year == article[2]:
  75. found_articles.append(article)
  76. beautiful_html = generate_html(found_articles)
  77. return HttpResponse(beautiful_html)
  78.  
  79.  
  80. def article_by_id(request, id):
  81. found_articles = []
  82. for article in articles_list:
  83. if id == article[0]:
  84. found_articles.append(article)
  85. beautiful_html = generate_html(found_articles)
  86. return HttpResponse(beautiful_html)
  87.  
  88.  
  89. def articles_by_tag(request, tag):
  90. found_articles = []
  91. for article in articles_list:
  92. if tag in article[4]:
  93. found_articles.append(article)
  94. beautiful_html = generate_html(found_articles)
  95. return HttpResponse(beautiful_html)
  96.  
  97.  
  98. html_template = '''<!DOCTYPE html>
  99. <html lang="ru">
  100. <head>
  101. <meta charset="UTF-8">
  102. <title>My Praktikum Blog</title>
  103. </head>
  104. <body>
  105. <form action="{where}" method="post">
  106. Введите ID статьи и имя нового тега<br><br>
  107. ID статьи: <input type="text" name="id"><br><br>
  108. Новый тег: <input type="text" name="new_tag"><br><br>
  109. <input type="submit" value="Добавить тег">
  110. </form>
  111. </body>
  112. </html>'''
  113.  
  114.  
  115. def add_tag(request):
  116. if request.method == 'GET':
  117. html = html_template.format(where = request.path)
  118. resp = HttpResponse(html)
  119. return resp
  120. elif request.method == 'POST':
  121. article_id = int(request.POST['id'])
  122. new_tag = request.POST['new_tag']
  123. for article in articles_list:
  124. if article[0] == article_id:
  125. article[4].append(new_tag)
  126. return article_by_id(request, article_id)
Advertisement
Add Comment
Please, Sign In to add comment