Commit 59a4e374 authored by valdi's avatar valdi

pagination & authentication

parent f2de5545
from django.forms import ModelForm
from .models import Product, Category
from django.contrib.auth.forms import UserCreationForm
from django import forms
from django.contrib.auth.models import User
class CreateUserForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
\ No newline at end of file
{% extends "base_template.html" %} {% extends "base_template.html" %}
{% block content %} {% block content %}
<div class="container"> <div class="container">
{% if user.is_authenticated %}
<li> Hello, {{ user.username }}</li>
<a href="signout" class="btn btn-info">Logout</a>
{% else %}
<a href="register" class="btn btn-info">Register</a>
<a href="login" class="btn btn-info">Login</a>
{% endif %}
<h1>Daftar Product</h1> <h1>Daftar Product</h1>
<div class="row"> <div class="row">
...@@ -31,7 +38,7 @@ ...@@ -31,7 +38,7 @@
<tbody> <tbody>
<!-- daftar category--> <!-- daftar category-->
{% if latest_product_list %} {% if latest_product_list %}
{% for product in latest_product_list %} {% for product in products %}
<tr> <tr>
<td>{{ product.category.category_text }}</td> <td>{{ product.category.category_text }}</td>
<td>{{ product.product_text }}</td> <td>{{ product.product_text }}</td>
...@@ -49,11 +56,11 @@ ...@@ -49,11 +56,11 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5> <h5 class="modal-title" id="exampleModalLabel">Delete {{ product.product_text }}</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
Are u sure to delete? Are u sure to delete {{ product.product_text }}?
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
...@@ -73,5 +80,19 @@ ...@@ -73,5 +80,19 @@
{% endif %} {% endif %}
</tbody> </tbody>
</table> </table>
<br><br>
{% if products.has_other_pages %}
<ul class="pagination">
{% for i in products.paginator.page_range %}
{% if products.number == i %}
<li class="active"><span>{{ i }}</span></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a> </li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</div> </div>
{% endblock %} {% endblock %}
{% extends "base_template.html" %}
{% block content %}
<div class="container">
<h3>Login form</h3>
<br><br>
<form method="POST" action="">
{% csrf_token %}
<div class="input-group mb-3">
<input type="text" name="username" placeholder="Username..." class="form-control">
</div>
<div class="input-group mb-2">
<input type="password" name="password" placeholder="Password..." class="form-control" >
</div>
<div class="d-flex justify-content-center login_container">
<input class="btn login_btn" type="submit" value="Login">
</div>
</form>
{% for message in messages %}
<p id="messages">{{ message }}</p>
{% endfor %}
</div>
{% endblock %}
{% extends "base_template.html" %}
{% block content %}
<div class="container">
<h3>Register form</h3>
<br><br>
<form method="post" action="">
{% csrf_token %}
{{ form.username.label }}
{{ form.username }}
<br><br>
{{ form.email.label }}
{{ form.email }}
<br><br>
<!-- {{ form.firstname.label }}-->
<!-- {{ form.firstname }}-->
<!-- <br><br>-->
<!-- {{ form.lastname.label }}-->
<!-- {{ form.lastname }}-->
<!-- <br><br>-->
{{ form.password1.label }}
{{ form.password1 }}
<br><br>
{{ form.password2.label }}
{{ form.password2 }}
<br><br>
<input type="submit" name="create">
{{ forms.errors }}
<br><br>
<div class="d-flex">
Already have an account? <a href="{% url 'masterdata:login' %}" class="ml-2">Login</a>
</div>
</form>
</div>
{% endblock %}
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
<a href="{% url 'masterdata:add' %}" class="btn btn-success">Add</a><div class="input-group rounded"> <a href="{% url 'masterdata:add' %}" class="btn btn-success">Add</a><div class="input-group rounded">
</div> </div><br>
<form action="{% url 'masterdata:search' %}" method="get"> <form action="{% url 'masterdata:search' %}" method="get">
<input type="search" name="p" class="form-control rounded" placeholder="Search" aria-label="Search" aria-describedby="search-addon" /> <input type="search" name="p" class="form-control rounded" placeholder="Search" aria-label="Search" aria-describedby="search-addon" />
<span class="input-group-text border-0" id="search-addon"> <span class="input-group-text border-0" id="search-addon">
...@@ -72,5 +72,18 @@ ...@@ -72,5 +72,18 @@
{% endif %} {% endif %}
</tbody> </tbody>
</table> </table>
<br><br>
{% if products.has_other_pages %}
<ul class="pagination">
{% for i in products.paginator.page_range %}
{% if products.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span> </span></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a> </li>
{% endif %}
{% endfor %}
</ul>
{% endif %}
</div> </div>
{% endblock %} {% endblock %}
...@@ -13,4 +13,7 @@ urlpatterns = [ ...@@ -13,4 +13,7 @@ urlpatterns = [
path('addData', views.addData, name='addData'), path('addData', views.addData, name='addData'),
path('<int:product_id>/delete', views.delete, name='delete'), path('<int:product_id>/delete', views.delete, name='delete'),
path('search', views.search, name="search"), path('search', views.search, name="search"),
path('register/', views.register, name='register'),
path('login', views.login, name='login'),
path('signout', views.logoutView, name='signout'),
] ]
\ No newline at end of file
...@@ -7,16 +7,37 @@ from django.http import HttpResponse ...@@ -7,16 +7,37 @@ from django.http import HttpResponse
from django.template import loader from django.template import loader
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.views import generic from django.views import generic
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.contrib.auth.forms import UserCreationForm
from .forms import CreateUserForm
from django.contrib import messages
from django.contrib.auth import authenticate, logout
from django.contrib.auth import login as auth_login
def index(request): def index(request):
latest_product_list = Product.objects.all().order_by('category_id', 'product_text') latest_product_list = Product.objects.all().order_by('category_id', 'product_text')
context = {
'latest_product_list': latest_product_list,
}
return render(request, 'masterdata/index.html', context) # # set up pagination
page = request.GET.get('page', 1)
paginator = Paginator(latest_product_list, 4)
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
# context = {
# 'latest_product_list': latest_product_list,
# }
return render(request, 'masterdata/index.html', {
'latest_product_list': latest_product_list, 'products': products
} )
def edit(request, product_id): def edit(request, product_id):
product_detail = Product.objects.get(pk=product_id) product_detail = Product.objects.get(pk=product_id)
...@@ -69,3 +90,34 @@ def search(request): ...@@ -69,3 +90,34 @@ def search(request):
search = Product.objects.filter(product_text__icontains=getSearch) search = Product.objects.filter(product_text__icontains=getSearch)
context = {'search' : search} context = {'search' : search}
return render(request, 'masterdata/search.html', context) return render(request, 'masterdata/search.html', context)
def register(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
if form.is_valid():
form.save()
user = form.cleaned_data.get('username')
messages.success(request, 'Account was created for ' + user)
return redirect('masterdata:login')
context = {'form': form}
return render(request, 'masterdata/register.html', context)
def login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
auth_login(request, user)
return redirect('masterdata:index')
else:
return render(request, 'masterdata/login.html')
def logoutView(request):
logout(request)
return redirect('masterdata:index')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment