Commit 0fbc5e3e authored by dio maulana's avatar dio maulana

day 3

parent b0092f94
from django import forms
class formRegister(forms.Form):
first_name = forms.CharField(label='First Name', widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Enter Your First Name', 'required': True}))
last_name = forms.CharField(label='Last Name', widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Enter your last name', 'required': True}))
username = forms.CharField(label='Username', widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Enter your username', 'required': True}))
email = forms.EmailField(label='Email', widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Enter your email', 'required': True}))
password = forms.CharField(label='Password', widget=forms.PasswordInput(
attrs={'class': 'form-control', 'placeholder': 'Password', 'required': True}))
password2 = forms.CharField(label='Confirm password', widget=forms.PasswordInput(
attrs={'class': 'form-control', 'placeholder': 'Confirm Your Password', 'required': True}))
class formLogin(forms.Form):
username = forms.CharField(label='Username', widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Enter your username', 'required': True}))
password = forms.CharField(label='Password', widget=forms.PasswordInput(
attrs={'class': 'form-control', 'placeholder': 'Password', 'required': True}))
...@@ -9,6 +9,7 @@ class Category(models.Model): ...@@ -9,6 +9,7 @@ class Category(models.Model):
class Product(models.Model): class Product(models.Model):
name_product = models.CharField(max_length=200) name_product = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE) category = models.ForeignKey(Category, on_delete=models.CASCADE)
def get_dict(self): def get_dict(self):
result = {} result = {}
result['name_product'] = self.name_product result['name_product'] = self.name_product
......
{% extends "auth_template.html" %}
{% block content %}
<div class="container mt-5">
{% if messages %}
{% for message in messages %}
{% if message.tags == 'error' %}
<div class="alert alert-danger" role="alert">
{{message}}
</div>
{% else %}
<div class="alert alert-{{message.tags}}" role="alert">
{{message}}
</div>
{% endif %}
{% endfor %}
{% endif %}
<form action="{% url 'belajar:signin' %}" method="post">
{% csrf_token %}
{% if form %}
{{form}}
{% endif %}
<p>Don't have an account ? register <a href="{% url 'belajar:register' %}">Here</a></p>
<div class="mb-3">
<button type="submit" class="btn btn-primary">Sign In</button>
</div>
</form>
</div>
{% endblock %}
\ No newline at end of file
{% extends "auth_template.html" %}
{% block content %}
<div class="container mt-5">
{% if messages %}
{% for message in messages %}
{% if message.tags == 'error' %}
<div class="alert alert-danger" role="alert">
{{message}}
</div>
{% else %}
<div class="alert alert-{{message.tags}}" role="alert">
{{message}}
</div>
{% endif %}
{% endfor %}
{% endif %}
<form action="{% url 'belajar:register' %}" method="post">
{% csrf_token %}
{% if form %}
{{form}}
<p>Already have an account ? <a href="{% url 'belajar:signin' %}">Login</a></p>
<div class="mb-3">
<button type="submit" class="btn btn-primary">Register</button>
</div>
{% endif %}
</form>
</div>
{% endblock %}
\ No newline at end of file
{% extends "base_template.html" %} {% extends "base_template.html" %}
{% block content %} {% block content %}
<div class="container"> <div class="container">
<h1 class="mt-5">Products</h1> <h1 class="mt-5">Products</h1>
...@@ -16,8 +17,7 @@ ...@@ -16,8 +17,7 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% if latest_product_list %} {% for product in object_list %}
{% for product in page_obj %}
<tr> <tr>
<th scope="row">{{ product.id }}</th> <th scope="row">{{ product.id }}</th>
<td>{{ product.name_product }}</td> <td>{{ product.name_product }}</td>
...@@ -50,9 +50,9 @@ ...@@ -50,9 +50,9 @@
</form> </form>
</div> </div>
{% endfor %} {% endfor %}
{% endif %}
</tbody> </tbody>
</table> </table>
{% if is_paginated %}
<div class="pagination"> <div class="pagination">
<span class="step-links"> <span class="step-links">
{% if page_obj.has_previous %} {% if page_obj.has_previous %}
...@@ -70,6 +70,7 @@ ...@@ -70,6 +70,7 @@
{% endif %} {% endif %}
</span> </span>
</div> </div>
{% endif %}
</div> </div>
{% endblock %} {% endblock %}
......
from django.urls import path from django.urls import path
from . import views from . import views
from .views import ProductListView
urlpatterns = [ urlpatterns = [
path('products', views.index, name='products'), path('products', ProductListView.as_view(), name='products'),
path('<int:product_id>/edit', views.edit, name='edit'), path('<int:product_id>/edit', views.edit, name='edit'),
path('<int:product_id>/update', views.update, name='update'), path('<int:product_id>/update', views.update, name='update'),
path('add', views.add, name='add'), path('add', views.add, name='add'),
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('signin', views.signin, name='signin'),
path('register', views.register, name="register"),
path('signout', views.logoutView, name="logoutView"),
] ]
\ No newline at end of file
from django.contrib import messages
from django.contrib.auth import logout
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.utils.decorators import method_decorator
from django.views.generic import ListView
# Create your views here. # Create your views here.
from django.http import HttpResponse from django.http import HttpResponse
...@@ -7,32 +11,48 @@ from django.shortcuts import get_object_or_404, render ...@@ -7,32 +11,48 @@ from django.shortcuts import get_object_or_404, render
from .models import Product from .models import Product
from .models import Category from .models import Category
from django.core.paginator import Paginator from django.core.paginator import Paginator
from django.contrib.auth.models import User, auth
def index(request): from django.contrib.auth.decorators import login_required
# latest_product_list = Product.objects.order_by('-id') from . form import formRegister, formLogin
# template = loader.get_template('belajar/index.html')
# context = { class ProductListView(ListView):
# 'latest_product_list': latest_product_list, model = Product
# } template_name = 'belajar/index.html'
# return HttpResponse(template.render(context, request)) paginate_by = 3
# short hand # @login_required(login_url='/belajar/signin')
@method_decorator(login_required)
latest_product_list = Product.objects.order_by('id') def dispatch(self, request, *args, **kwargs):
paginator = Paginator(latest_product_list, 3) # Show 25 contacts per page. return super(ProductListView, self).dispatch(request, *args, **kwargs)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
context = {'latest_product_list': latest_product_list, 'page_obj': page_obj} # def index(request):
return render(request, 'belajar/index.html', context) # # latest_product_list = Product.objects.order_by('-id')
# # template = loader.get_template('belajar/index.html')
# latest_product_list = Product.objects.all() # # context = {
# paginator = Paginator(latest_product_list, 1) # Show 25 contacts per page. # # 'latest_product_list': latest_product_list,
# # # }
# page_number = request.GET.get('page') # # return HttpResponse(template.render(context, request))
# page_obj = paginator.get_page(page_number) #
# return render(request, 'belajar/index.html', {'page_obj': page_obj}) # # short hand
#
# latest_product_list = Product.objects.order_by('id')
# paginator = Paginator(latest_product_list, 3) # Show 25 contacts per page.
#
# page_number = request.GET.get('page')
# page_obj = paginator.get_page(page_number)
# context = {'latest_product_list': latest_product_list, 'page_obj': page_obj}
# return render(request, 'belajar/index.html', context)
#
# # latest_product_list = Product.objects.all()
# # paginator = Paginator(latest_product_list, 1) # Show 25 contacts per page.
# #
# # page_number = request.GET.get('page')
# # page_obj = paginator.get_page(page_number)
# # return render(request, 'belajar/index.html', {'page_obj': page_obj})
@login_required()
def edit(request, product_id): def edit(request, product_id):
# product_detail = Product.objects.raw(f'SELECT * FROM belajar_product WHERE id = {product_id}') # product_detail = Product.objects.raw(f'SELECT * FROM belajar_product WHERE id = {product_id}')
product_detail = Product.objects.get(id=product_id) product_detail = Product.objects.get(id=product_id)
...@@ -40,6 +60,7 @@ def edit(request, product_id): ...@@ -40,6 +60,7 @@ def edit(request, product_id):
context = {'product_detail': product_detail, 'categories': categories} context = {'product_detail': product_detail, 'categories': categories}
return render(request, 'belajar/edit.html', context) return render(request, 'belajar/edit.html', context)
@login_required(login_url='/belajar/signin')
def update(request, product_id): def update(request, product_id):
product = get_object_or_404(Product, pk=product_id) product = get_object_or_404(Product, pk=product_id)
try: try:
...@@ -54,11 +75,13 @@ def update(request, product_id): ...@@ -54,11 +75,13 @@ def update(request, product_id):
return redirect('belajar:products') return redirect('belajar:products')
@login_required(login_url='/belajar/signin')
def add(request): def add(request):
categories = Category.objects.all() categories = Category.objects.all()
context = {'categories': categories} context = {'categories': categories}
return render(request, 'belajar/add.html', context) return render(request, 'belajar/add.html', context)
@login_required(login_url='/belajar/signin')
def addData(request): def addData(request):
try: try:
selected_category = Category.objects.get(pk=request.POST['category']) selected_category = Category.objects.get(pk=request.POST['category'])
...@@ -72,7 +95,7 @@ def addData(request): ...@@ -72,7 +95,7 @@ def addData(request):
return redirect('belajar:products') return redirect('belajar:products')
@login_required(login_url='/belajar/signin')
def delete(request, product_id): def delete(request, product_id):
product = get_object_or_404(Product, pk=product_id) product = get_object_or_404(Product, pk=product_id)
try: try:
...@@ -85,6 +108,7 @@ def delete(request, product_id): ...@@ -85,6 +108,7 @@ def delete(request, product_id):
return redirect('belajar:products') return redirect('belajar:products')
@login_required(login_url='/belajar/signin')
def search(request): def search(request):
getSearch = request.GET['q'] getSearch = request.GET['q']
search = Product.objects.filter(name_product__icontains=getSearch) search = Product.objects.filter(name_product__icontains=getSearch)
...@@ -98,3 +122,57 @@ def search(request): ...@@ -98,3 +122,57 @@ def search(request):
# for json # for json
# context = {'search': [x.get_dict() for x in search]} #untuk json # context = {'search': [x.get_dict() for x in search]} #untuk json
# return render(request, 'belajar/search.html', context) # return render(request, 'belajar/search.html', context)
def signin(request):
next = request.GET.get('next', '/belajar/products')
if request.user.is_authenticated:
return redirect(next)
if request.method == 'POST':
form = formLogin(request.POST)
post = request.POST
username = post['username']
password = post['password']
user = auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
return redirect(next)
else:
messages.error(request, "email or password is wrong")
else:
form = formLogin()
return render(request, 'auth/login.html', {'form': form})
def register(request):
if request.method == 'POST':
form = formRegister(request.POST)
post = request.POST
first_name = post['first_name']
last_name = post['last_name']
username = post['username']
email = post['email']
password = post['password']
password2 = post['password2']
if form.is_valid():
if password == password2:
if User.objects.filter(username=username).exists():
messages.error(request, 'username already taken')
elif User.objects.filter(email=email).exists():
messages.error(request, 'email already taken')
else:
user = User.objects.create_user(username=username, password=password, email=email,
first_name=first_name, last_name=last_name)
user.save()
return redirect('belajar:signin')
else:
messages.error(request, 'password not match')
else:
form = formRegister()
return render(request, 'auth/register.html', {'form': form})
@login_required(login_url='/belajar/signin')
def logoutView(request):
logout(request)
return redirect('belajar:signin')
...@@ -132,3 +132,5 @@ STATIC_URL = 'static/' ...@@ -132,3 +132,5 @@ STATIC_URL = 'static/'
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field # https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
LOGIN_URL = '/belajar/signin'
\ No newline at end of file
...@@ -19,4 +19,5 @@ from django.urls import include, path ...@@ -19,4 +19,5 @@ from django.urls import include, path
urlpatterns = [ urlpatterns = [
path('belajar/', include(('belajar.urls', 'belajar'), namespace='belajar')), path('belajar/', include(('belajar.urls', 'belajar'), namespace='belajar')),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
path('belajar/', include("django.contrib.auth.urls")),
] ]
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
crossorigin="anonymous"></script>
<title>Product</title>
</head>
<body>
{% block content %}
{% endblock %}
{% block script %}
{% endblock %}
</body>
</html>
\ No newline at end of file
...@@ -13,6 +13,12 @@ ...@@ -13,6 +13,12 @@
<title>Product</title> <title>Product</title>
</head> </head>
<body> <body>
<div class="container">
<h1 class="text-right"><a type="button" class="btn btn-danger" href="{% url 'belajar:logoutView' %}">Signout</a></h1>
</div>
{% block content %} {% block content %}
{% endblock %} {% endblock %}
......
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