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):
class Product(models.Model):
name_product = models.CharField(max_length=200)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def get_dict(self):
result = {}
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" %}
{% block content %}
<div class="container">
<h1 class="mt-5">Products</h1>
......@@ -16,8 +17,7 @@
</tr>
</thead>
<tbody>
{% if latest_product_list %}
{% for product in page_obj %}
{% for product in object_list %}
<tr>
<th scope="row">{{ product.id }}</th>
<td>{{ product.name_product }}</td>
......@@ -50,9 +50,9 @@
</form>
</div>
{% endfor %}
{% endif %}
</tbody>
</table>
{% if is_paginated %}
<div class="pagination">
<span class="step-links">
{% if page_obj.has_previous %}
......@@ -70,6 +70,7 @@
{% endif %}
</span>
</div>
{% endif %}
</div>
{% endblock %}
......
from django.urls import path
from . import views
from .views import ProductListView
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>/update', views.update, name='update'),
path('add', views.add, name='add'),
path('addData', views.addData, name='addData'),
path('<int:product_id>/delete', views.delete, name='delete'),
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.utils.decorators import method_decorator
from django.views.generic import ListView
# Create your views here.
from django.http import HttpResponse
......@@ -7,32 +11,48 @@ from django.shortcuts import get_object_or_404, render
from .models import Product
from .models import Category
from django.core.paginator import Paginator
def index(request):
# latest_product_list = Product.objects.order_by('-id')
# template = loader.get_template('belajar/index.html')
# context = {
# 'latest_product_list': latest_product_list,
# }
# return HttpResponse(template.render(context, request))
# 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})
from django.contrib.auth.models import User, auth
from django.contrib.auth.decorators import login_required
from . form import formRegister, formLogin
class ProductListView(ListView):
model = Product
template_name = 'belajar/index.html'
paginate_by = 3
# @login_required(login_url='/belajar/signin')
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(ProductListView, self).dispatch(request, *args, **kwargs)
# def index(request):
# # latest_product_list = Product.objects.order_by('-id')
# # template = loader.get_template('belajar/index.html')
# # context = {
# # 'latest_product_list': latest_product_list,
# # }
# # return HttpResponse(template.render(context, request))
#
# # 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):
# product_detail = Product.objects.raw(f'SELECT * FROM belajar_product WHERE id = {product_id}')
product_detail = Product.objects.get(id=product_id)
......@@ -40,6 +60,7 @@ def edit(request, product_id):
context = {'product_detail': product_detail, 'categories': categories}
return render(request, 'belajar/edit.html', context)
@login_required(login_url='/belajar/signin')
def update(request, product_id):
product = get_object_or_404(Product, pk=product_id)
try:
......@@ -54,11 +75,13 @@ def update(request, product_id):
return redirect('belajar:products')
@login_required(login_url='/belajar/signin')
def add(request):
categories = Category.objects.all()
context = {'categories': categories}
return render(request, 'belajar/add.html', context)
@login_required(login_url='/belajar/signin')
def addData(request):
try:
selected_category = Category.objects.get(pk=request.POST['category'])
......@@ -72,7 +95,7 @@ def addData(request):
return redirect('belajar:products')
@login_required(login_url='/belajar/signin')
def delete(request, product_id):
product = get_object_or_404(Product, pk=product_id)
try:
......@@ -85,6 +108,7 @@ def delete(request, product_id):
return redirect('belajar:products')
@login_required(login_url='/belajar/signin')
def search(request):
getSearch = request.GET['q']
search = Product.objects.filter(name_product__icontains=getSearch)
......@@ -98,3 +122,57 @@ def search(request):
# for json
# context = {'search': [x.get_dict() for x in search]} #untuk json
# 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/'
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
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
urlpatterns = [
path('belajar/', include(('belajar.urls', 'belajar'), namespace='belajar')),
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 @@
<title>Product</title>
</head>
<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 %}
{% 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