Development of an internal social media platform with personalised dashboards for students
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

views.py 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. from django.shortcuts import render, get_object_or_404
  2. from django.utils import timezone
  3. from .models import Post, CustomUser
  4. from taggit.models import Tag
  5. from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
  6. from .forms import PostForm, NewTagForm
  7. from django.shortcuts import redirect
  8. from django.contrib.auth.decorators import login_required
  9. from django.contrib.admin.views.decorators import staff_member_required
  10. from django.contrib.auth import authenticate, login, logout
  11. import sys
  12. import collections
  13. from taggit_templatetags2.views import TagCanvasListView
  14. from django.contrib.auth.models import User
  15. from django.contrib import messages
  16. from post_office.models import EmailTemplate
  17. from post_office import mail
  18. import logging
  19. import mysite.settings
  20. import operator
  21. def navlogin(request):
  22. log = logging.getLogger('mysite')
  23. logout(request)
  24. error = ""
  25. if request.POST:
  26. username = request.POST.get("username", "?")
  27. password = request.POST.get("password", "?")
  28. user = authenticate(username=username, password=password)
  29. if user is not None:
  30. if user.is_active:
  31. login(request, user)
  32. return redirect(mysite.settings.LOGIN_REDIRECT_URL)
  33. else:
  34. log.info("Inactive user {} tried to login".format(username))
  35. error = "Ihre Benutzerkennung wurde deaktiviert."
  36. else:
  37. log.info("Login failed for {}".format(username))
  38. error = "Benutzername oder Kennwort falsch."
  39. context = {'error': error}
  40. return render(request, 'index.html', context)
  41. @login_required
  42. def post_list(request, slug=None):
  43. log = logging.getLogger('mysite')
  44. posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
  45. if slug:
  46. tag = get_object_or_404(Tag, slug=slug)
  47. posts = posts.filter(tags__in=[tag])
  48. log.info(posts)
  49. return render(request, 'post_list.html', locals())
  50. @login_required
  51. def post_detail(request, pk):
  52. post = get_object_or_404(Post, pk=pk)
  53. return render(request, 'post_detail.html', {'post': post})
  54. @login_required
  55. @staff_member_required
  56. def post_new(request):
  57. if request.method == "POST":
  58. form = PostForm(request.POST)
  59. if form.is_valid():
  60. post = form.save(commit=False)
  61. post.author = request.user
  62. post.save()
  63. return redirect('post_detail', pk=post.pk)
  64. else:
  65. form = PostForm()
  66. return render(request, 'post_edit.html', {'form': form})
  67. @login_required
  68. @staff_member_required
  69. def post_edit(request, pk):
  70. post = get_object_or_404(Post, pk=pk)
  71. if request.method == "POST":
  72. form = PostForm(request.POST, instance=post)
  73. if form.is_valid():
  74. post = form.save(commit=False)
  75. post.author = request.user
  76. post.save()
  77. form.save_m2m()
  78. return redirect('post_detail', pk=post.pk)
  79. else:
  80. form = PostForm(instance=post)
  81. return render(request, 'post_edit.html', {'form': form})
  82. @login_required
  83. @staff_member_required
  84. def post_draft_list(request):
  85. posts = Post.objects.filter(
  86. published_date__isnull=True).order_by('created_date')
  87. return render(request, 'post_draft_list.html', {'posts': posts})
  88. @login_required
  89. @staff_member_required
  90. def post_publish(request, pk):
  91. post = get_object_or_404(Post, pk=pk)
  92. post.publish()
  93. return redirect('post_detail', pk=pk)
  94. @login_required
  95. @staff_member_required
  96. def post_remove(request, pk):
  97. post = get_object_or_404(Post, pk=pk)
  98. post.delete()
  99. return redirect('post_list')
  100. @login_required
  101. def tag_remove(request, slug=None):
  102. if slug:
  103. tag = get_object_or_404(Tag, slug=slug)
  104. tag.delete()
  105. save_m2m()
  106. return redirect('student_page')
  107. @login_required
  108. def student_page(request):
  109. log = logging.getLogger('mysite')
  110. user_instance = get_object_or_404(CustomUser, user=request.user)
  111. log.info(user_instance)
  112. if request.method == "POST":
  113. log.info('post method')
  114. form = NewTagForm(request.POST, instance=user_instance)
  115. if form.is_valid():
  116. log.info('form is valid')
  117. obj = form.save(commit=False)
  118. obj.user = request.user
  119. obj.save()
  120. tag_names = [tag.name for tag in Tag.objects.all()]
  121. log.info(tag_names)
  122. m_tags = form.cleaned_data['m_tags']
  123. m_tags = ' '.join(str(m_tags) for m_tags in m_tags)
  124. log.info(m_tags)
  125. if m_tags in tag_names:
  126. log.info('worked out')
  127. obj.tags.add(m_tags)
  128. form.save_m2m()
  129. messages.info(request, 'Der Tag "' + m_tags + '" wurde gespeichert')
  130. return redirect('/student/')
  131. else:
  132. messages.info(request, 'Sorry !! Den Tag den du suchst gibt es leider nicht!')
  133. else:
  134. form = NewTagForm()
  135. return render(request, 'student_page.html', {'form':form})
  136. @login_required
  137. def tag_list(request):
  138. log = logging.getLogger('mysite')
  139. u = User.objects.get(username=request.user)
  140. if u:
  141. tags_user = Tag.objects.filter(customuser__user = u)
  142. log.info(tags_user)
  143. for tag in tags_user:
  144. posts = Post.objects.filter(tags__in=[tag]).order_by('-published_date')
  145. log.info(posts)
  146. return render(request, 'tag_list.html', locals())
  147. def blog_search_list_view(request):
  148. log = logging.getLogger('mysite')
  149. posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
  150. if request.method == 'GET':
  151. search_query = request.GET.get('search_box', None)
  152. log.info(search_query)
  153. posts = posts.filter(tags__name__in=[search_query])
  154. return render(request, 'blog_search_list_view.html', locals())
  155. def tag_cloud(request):
  156. return render(request, 'tag_cloud.html', {})
  157. EmailTemplate.objects.create(
  158. name='weekly-update',
  159. subject='Hi' + User.objects.get(username=request.user) + '!',
  160. content='How are you feeling today?' + Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date'),
  161. html_content='Hi <strong>{{ name }}</strong>, how are you feeling today?',
  162. )
  163. mail.send(
  164. 'kleinhenz.e@gmail.com', # List of email addresses also accepted
  165. 'esther.kleinhenz@web.de',
  166. template='weekly-update',
  167. context={'name': 'alice'},
  168. )