Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
crud
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dio Maulana
crud
Commits
0fbc5e3e
Commit
0fbc5e3e
authored
Feb 04, 2022
by
dio maulana
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
day 3
parent
b0092f94
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
233 additions
and
31 deletions
+233
-31
form.py
belajar/form.py
+22
-0
models.py
belajar/models.py
+1
-0
login.html
belajar/templates/auth/login.html
+31
-0
register.html
belajar/templates/auth/register.html
+30
-0
index.html
belajar/templates/belajar/index.html
+4
-3
urls.py
belajar/urls.py
+5
-1
views.py
belajar/views.py
+105
-27
settings.py
belajarcrud/settings.py
+2
-0
urls.py
belajarcrud/urls.py
+1
-0
auth_template.html
templates/auth_template.html
+26
-0
base_template.html
templates/base_template.html
+6
-0
No files found.
belajar/form.py
0 → 100644
View file @
0fbc5e3e
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
}))
belajar/models.py
View file @
0fbc5e3e
...
@@ -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
...
...
belajar/templates/auth/login.html
0 → 100644
View file @
0fbc5e3e
{% 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
belajar/templates/auth/register.html
0 → 100644
View file @
0fbc5e3e
{% 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
belajar/templates/belajar/index.html
View file @
0fbc5e3e
{% 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 %}
...
...
belajar/urls.py
View file @
0fbc5e3e
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
belajar/views.py
View file @
0fbc5e3e
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'
)
belajarcrud/settings.py
View file @
0fbc5e3e
...
@@ -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
belajarcrud/urls.py
View file @
0fbc5e3e
...
@@ -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"
)),
]
]
templates/auth_template.html
0 → 100644
View file @
0fbc5e3e
<!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
templates/base_template.html
View file @
0fbc5e3e
...
@@ -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 %}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment