diff --git a/data/ShoeExpert/ShoeExpert/urls.py b/data/ShoeExpert/ShoeExpert/urls.py index 8e27703..c9acbc4 100644 --- a/data/ShoeExpert/ShoeExpert/urls.py +++ b/data/ShoeExpert/ShoeExpert/urls.py @@ -25,7 +25,9 @@ path('join/', app1_views.join), path('login/', app1_views.user_login), path('logout/', app1_views.user_logout), - path('blog/', app1_views.blog) + path('blog/', app1_views.blog), + path('filter2/', app1_views.filter2), + path('filter/', app1_views.filter) ] for url_path in Url_Paths: diff --git a/data/ShoeExpert/app1/forms.py b/data/ShoeExpert/app1/forms.py index 5830ced..1c432a4 100644 --- a/data/ShoeExpert/app1/forms.py +++ b/data/ShoeExpert/app1/forms.py @@ -15,3 +15,24 @@ class Meta(): class LoginForm(forms.Form): username = forms.CharField() password = forms.CharField(widget=forms.PasswordInput()) + +SHOE_CHOICES= [ + ('Running', 'Running'), + ('Basketball', 'Basketball'), + ('Approach', 'Approach'), + ('Climbing', 'Climbing'), + ('Crossfit', 'Crossfit'), + ('Cycling', 'Cycling'), + ('Football', 'Football'), + ] + +#CUSHIONING_CHOICES= [ +# ('All', 'All'), +# ('Plush', 'Plush'), +# ('Firm', 'Firm'), +# ('Balanced', 'Balanced'), +# ] + +class FilterForm(forms.Form): + Shoe = forms.CharField(widget=forms.Select(choices=SHOE_CHOICES)) +# Cushioning = forms.CharField(widget=forms.Select(choices=CUSHIONING_CHOICES)) diff --git a/data/ShoeExpert/app1/tests.py b/data/ShoeExpert/app1/tests.py index 7ce503c..22cb66a 100644 --- a/data/ShoeExpert/app1/tests.py +++ b/data/ShoeExpert/app1/tests.py @@ -1,3 +1,26 @@ from django.test import TestCase +from selenium import webdriver +from selenium.webdriver.common.keys import Keys + +service = ChromeService(executable_path=ChromeDriverManager().install()) + +driver = webdriver.Chrome(service=service) # Create your tests here. + +class LoginFormTest(testCase): + def testform(self): + selenium.get('http://127.0.0.1:8000/') + username=selenium.find_element_by_id('username') + password=selenium.find_element_by_id('password') + + submit = selenium.find_element_by_id('submit_button') + + username.send_keys('docker') + password.send_keys('docker') + + submit.send_keys(Keys.RETURN) + + assert 'docker' in selenium.page_source + +driver.quit(); diff --git a/data/ShoeExpert/app1/views.py b/data/ShoeExpert/app1/views.py index 0980f64..15a9359 100644 --- a/data/ShoeExpert/app1/views.py +++ b/data/ShoeExpert/app1/views.py @@ -1,5 +1,5 @@ from aggregate import Url_Paths -from app1.forms import JoinForm, LoginForm + from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required from django.core.paginator import Paginator @@ -78,10 +78,13 @@ def home(request): @login_required(login_url='/login/') def generic_shoe(request, url_path): page_sizes = [5, 10, 15, 20, 30, 40, 50] + brands = ['All', 'Adidas', 'Nike', 'Aky'] + brands_per_page = request.GET.get('brands_per_page', brands[0]) shoes_per_page = int(request.GET.get('shoes_per_page', page_sizes[0])) queryset = globals()[url_path.name.capitalize()].objects.all().order_by('shoe_name') paginator = Paginator(queryset, shoes_per_page) page = request.GET.get('page') + brand = request.GET.get('brand') shoes = paginator.get_page(page) headers = [] fields = [] @@ -111,3 +114,60 @@ def about(request): @login_required(login_url='/login/') def blog(request): return render(request, 'app1/blog.html') + + +@login_required(login_url='/login/') +def filter3(request, url_path): + page_sizes = [5, 10, 15, 20, 30, 40, 50] + brands = [All, Adidas, Nike, Aky] + brands_per_page = request.GET.get('brands_per_page', brands[0]) + shoes_per_page = int(request.GET.get('shoes_per_page', page_sizes[10])) + queryset = globals()[url_path.name.capitalize()].objects.all().order_by('shoe_name') + paginator = Paginator(queryset, shoes_per_page, brands_per_page) + page = request.GET.get('page') + shoes = paginator.get_page(page) + headers = [] + fields = [] + for column in url_path.get_django_available_columns(): + headers.append({ + 'has_modal': column.has_modal(), + 'modal_body': column.get_modal_body(), + 'modal_title': url_path.get_column_name(column, display_units = False), + 'modal_id': url_path.get_column_name(column, attribute = True), + 'column_title': url_path.get_column_name(column) + }) + fields.append(url_path.get_column_name(column, attribute = True)) + return render(request, 'app1/filter3.html', { + 'shoes': shoes, + 'headers': headers, + 'fields': fields, + 'shoes_per_page': shoes_per_page, + 'page_sizes': page_sizes, + 'title': url_path.name.replace('_', ' ').title() + }) + +#@login_required(login_url='/login/') +def filter(request, userShoe): + context_list = [] + for url_path in Url_Paths: + tmp_dict = {} + tmp_dict['shoes'] = globals()[url_path.name.capitalize()].objects.all().order_by('?')[:3] + tmp_dict['title'] = url_path.name.replace('_', ' ').title() + tmp_dict['redirect'] = url_path.name.lower() + tmp_dict['headers'] = [] + tmp_dict['fields'] = [] + for column in url_path.get_django_available_columns(): + tmp_dict['headers'].append(url_path.get_column_name(column)) + tmp_dict['fields'].append(url_path.get_column_name(column, attribute = True)) + context_list.append(tmp_dict) + return render(request, 'app1/filter.html', { 'context_list': context_list }) + +@login_required(login_url='/login/') +def filter2(request): + if (request.method == "POST"): + filter_form = FilterForm(request.POST) + if filter_form.is_valid(): + userShoe = filter_form.cleaned_data["Shoe"] + return redirect(filter, userShoe) + return render(request, 'app1/filter2.html', {'filter_form': FilterForm}) + diff --git a/data/ShoeExpert/templates/app1/blog.html b/data/ShoeExpert/templates/app1/blog.html index 00b6967..50e55a2 100644 --- a/data/ShoeExpert/templates/app1/blog.html +++ b/data/ShoeExpert/templates/app1/blog.html @@ -4,7 +4,7 @@
-

Test about

+

Blog Page

diff --git a/data/ShoeExpert/templates/app1/filter.html b/data/ShoeExpert/templates/app1/filter.html new file mode 100644 index 0000000..79b399c --- /dev/null +++ b/data/ShoeExpert/templates/app1/filter.html @@ -0,0 +1,47 @@ + +{% load getattribute %} + + +{% include "app1/head.html" %} + + +
+ + {% for shoe_dict in context_list %} +
+
+ +
+ + + + + {% for header in shoe_dict.headers %} + + {% endfor %} + + + + {% for value in shoe_dict.shoes %} + + + {% for field in shoe_dict.fields %} + + {% endfor %} + + {% endfor %} + +
Shoe Name{{header}}
{{value.shoe_name}}{{ value|getattribute:field }}
+
+
+
+ {% endfor %} + +
+ + + + + diff --git a/data/ShoeExpert/templates/app1/filter2.html b/data/ShoeExpert/templates/app1/filter2.html new file mode 100644 index 0000000..17f12c2 --- /dev/null +++ b/data/ShoeExpert/templates/app1/filter2.html @@ -0,0 +1,24 @@ + + + +{% include "app1/head.html" %} + + +
+

Filter

+
+ {% csrf_token %} + + {{ filter_form.as_table }} + + + +
+ +
+
+
+ + + + diff --git a/data/ShoeExpert/templates/app1/filter3.html b/data/ShoeExpert/templates/app1/filter3.html new file mode 100644 index 0000000..0d2d68e --- /dev/null +++ b/data/ShoeExpert/templates/app1/filter3.html @@ -0,0 +1,129 @@ +{% load getattribute %} + + +{% include "app1/head.html" %} + + +
+
+
+ +
+ + +
+ +
+ + +
+ +

{{title}}

+
+ + + + + {% for header in headers %} + + {% endfor %} + + + + {% for value in shoes %} + + + {% for field in fields %} + + {% endfor %} + + {% endfor %} + +
Shoe Name + {% if header.has_modal %} + {% include "app1/modal.html" with data=header %} + {% else %} + {{ header.column_title }} + {% endif %} +
{{value.shoe_name}}{{ value|getattribute:field }}
+
+ + +
+ +
+ +
+
+
+ + + diff --git a/data/ShoeExpert/templates/app1/generic_shoe.html b/data/ShoeExpert/templates/app1/generic_shoe.html index fe2e4b3..4ed8608 100644 --- a/data/ShoeExpert/templates/app1/generic_shoe.html +++ b/data/ShoeExpert/templates/app1/generic_shoe.html @@ -21,8 +21,20 @@ {% endfor %} - +

{{title}}

+
+ +
diff --git a/data/ShoeExpert/templates/app1/navigation.html b/data/ShoeExpert/templates/app1/navigation.html index 16a7f9e..e992f1e 100644 --- a/data/ShoeExpert/templates/app1/navigation.html +++ b/data/ShoeExpert/templates/app1/navigation.html @@ -10,10 +10,13 @@ About + {%if user.is_authenticated%} - {%if user.is_authenticated%} +