Guest User

Untitled

a guest
Apr 26th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. from django.views import generic
  2. from django.shortcuts import render, redirect
  3. from django.contrib.auth import authenticate, login
  4. from django.views.generic import View
  5. from .models import Jela, Sastojci
  6. from .forms import UserForm, DodajRecept
  7. from django.contrib import messages
  8.  
  9.  
  10. class IndexView(generic.ListView): # pocetna
  11. template_name = 'recepti/index.html'
  12. model = Jela
  13.  
  14. def param(self):
  15. tags = self.request.GET.get('tags')
  16. return tags
  17.  
  18.  
  19. class ReceptiView(generic.ListView):
  20. template_name = 'recepti/recepti.html'
  21. context_object_name = 'recepti'
  22.  
  23. # because of context_object_name above and how generic.ListView works,
  24. # the result of this is available in your template as {{ recepti }}
  25. def get_queryset(self):
  26. query = Jela.objects \
  27. .annotate(
  28. contains_other=Exclude(
  29. Sastojci.objects.filter(Jaja=Outerref('pk')).exclude(
  30. Ime__in=('jaja', 'butter')
  31. )
  32. )
  33. ) \
  34. .filter(contains__other=False)
  35. return query
  36.  
  37. # the : str and -> Jela are type hints, they show what kind of data type the input/output have
  38. def get_random(self, category: str) -> Jela:
  39. # we can re-use the base queryset to further filter, and for that we can just call existing methods again
  40. queryset = self.get_queryset()
  41. return queryset.filter(kategorija__ime=category).order_by('?').first()
  42.  
  43. # this provides all the extra context you want in your template that
  44. # is not 'automagically' generated by django's generic views
  45. def get_context_data(self, **kwargs):
  46. # you need to call the parent method to get all the 'default' stuff from django's generic view
  47. context = super().get_context_data(**kwargs)
  48. context.update({
  49. 'random_dorucak': self.get_random('Doručak'),
  50. 'random_rucak': self.get_random('Ručak'),
  51. 'random_vecera': self.get_random('Večera'),
  52. 'random_uzina': self.get_random('Užina'),
  53. })
  54. return context
  55.  
  56.  
  57. class DetailView(generic.DetailView): # detalji recepta
  58. context_object_name = 'jelo'
  59. model = Jela
  60. template_name = 'recepti/detail.html'
  61.  
  62.  
  63. class UserFormView(View):
  64. form_class = UserForm
  65. template_name = 'recepti/registration_form.html'
  66.  
  67. def get(self, request): # display blank form
  68. form = self.form_class(None)
  69. return render(request, self.template_name, {'form': form})
  70.  
  71. def post(self, request): # process form data
  72. form = self.form_class(request.POST)
  73.  
  74. if form.is_valid():
  75.  
  76. user = form.save(commit=False)
  77.  
  78. # cleaned (normalized) data
  79. username = form.cleaned_data['username']
  80. password = form.cleaned_data['password']
  81. user.set_password(password)
  82. user.save()
  83.  
  84. # return User objects if credentials are correct
  85.  
  86. user = authenticate(username=username, password=password)
  87.  
  88. if user is not None:
  89.  
  90. if user.is_active:
  91. login(request, user)
  92. return redirect('index')
  93.  
  94. return render(request, self.template_name, {'form': form})
  95.  
  96.  
  97. class DodajView(View):
  98. template_name = 'recepti/dodajrecept.html'
  99.  
  100. def get(self, request):
  101. return render(request, self.template_name, {'form': DodajRecept()})
  102.  
  103. def post(self, request):
  104. if request.method == 'POST':
  105. form = DodajRecept(request.POST, request.FILES)
  106. if form.is_valid():
  107. form.save(commit=True)
  108. return redirect('index')
  109. else:
  110. messages.error(request, form)
  111. return render(request, self.template_name, {'form': DodajRecept()})
Add Comment
Please, Sign In to add comment