Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • kenichi.komala/pkpl-individu-2206081452-kenichikomala
1 result
Select Git revision
Show changes
Commits on Source (2)
Showing with 38 additions and 20 deletions
No preview for this file type
No preview for this file type
File deleted
......@@ -4,8 +4,8 @@ from userauth.models import User
# Create your views here.
def home(request):
if request.GET.get('username'):
username = request.GET.get('username', None)
user = User.objects.get(username=username)
if request.GET.get('nama'):
nama = request.GET.get('nama', None)
user = User.objects.get(nama=nama)
return render(request,'home.html', context={'user':user})
return HttpResponse("this is home")
\ No newline at end of file
No preview for this file type
No preview for this file type
No preview for this file type
......@@ -7,5 +7,5 @@ class UserForm(ModelForm):
tanggal_lahir = forms.DateField()
class Meta:
model = User
fields = ('username', 'password', 'tanggal_lahir', 'nomor_hp','email','url_blog', 'deskripsi_diri',
fields = ('nama', 'password', 'tanggal_lahir', 'nomor_hp','email','url_blog', 'deskripsi_diri',
'nomor_kartu_atm','status_pekerjaan')
\ No newline at end of file
# Generated by Django 5.1.7 on 2025-03-13 17:27
# Generated by Django 5.1.7 on 2025-03-16 03:57
import django.contrib.auth.models
import django.contrib.auth.validators
import django.core.validators
import django.utils.timezone
from django.db import migrations, models
......@@ -21,18 +22,19 @@ class Migration(migrations.Migration):
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('username', models.CharField(max_length=255, unique=True, validators=[django.core.validators.RegexValidator('^[\\w.-]+$', message="Nama hanya boleh berisi huruf, angka, dan karakter (.,'-_)")])),
('nama', models.CharField(max_length=255, unique=True, validators=[django.core.validators.RegexValidator('^[\\w.-]+$', message="Nama hanya boleh berisi huruf, angka, dan karakter (.,'-_)")])),
('password', models.CharField(max_length=255, validators=[django.core.validators.MinLengthValidator(8), django.core.validators.RegexValidator('^(?=.*?[A-Za-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$', message='Password harus berisi angka, huruf, dan karakter spesial')])),
('email', models.CharField(max_length=255, unique=True, validators=[django.core.validators.RegexValidator('^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$', message='Email yang dimasukan tidak mengikuti format email')])),
('tanggal_lahir', models.DateField()),
('nomor_hp', models.CharField(max_length=255, validators=[django.core.validators.RegexValidator('^\\d{1,4} - \\d{8,15}$', message='Nomor HP harus dalam format: Kode Negara - Nomor HP (contoh: 62 - 8123456789) dan panjang nomor telpon 8-15')])),
('nomor_kartu_atm', models.IntegerField(validators=[django.core.validators.RegexValidator('^\\d{15,16}$', message='NPWP harus dalam format: XX.XXX.XXX.X-XXX.XXX | Di mana X adalah angka)')])),
('status_pekerjaan', models.CharField(choices=[('Karyawan', 'Karyawan'), ('PNS', 'PNS'), ('Mahasiswa', 'Mahasiswa'), ('Dosen', 'Dosen')], default='Belum', max_length=10)),
('nomor_hp', models.CharField(max_length=15, validators=[django.core.validators.RegexValidator('^\\d{1,3} - \\d{8,15}$', message='Nomor HP harus dalam format: Kode Negara - Nomor HP (contoh: 62 - 8123456789) dan panjang seluruhnya maksimal 15 karakter')])),
('nomor_kartu_atm', models.IntegerField(validators=[django.core.validators.RegexValidator('^\\d{15,16}$', message='Nomor kartu atm perlu memiliki panjang 15-16 digit')])),
('status_pekerjaan', models.CharField(choices=[('Karyawan', 'Karyawan'), ('PNS', 'PNS'), ('Mahasiswa', 'Mahasiswa'), ('Dosen', 'Dosen')], default='Karyawan', max_length=10)),
('url_blog', models.CharField(max_length=255, validators=[django.core.validators.RegexValidator('^(https?:\\/\\/)?([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}(/[a-zA-Z0-9_.?=&%-]*)*$', message='URL Blog tidak sesuai format URL, contoh valid ini: https://example.com')])),
('deskripsi_diri', models.TextField(validators=[django.core.validators.MinLengthValidator(5), django.core.validators.MaxLengthValidator(1000)])),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
......
No preview for this file type
No preview for this file type
......@@ -10,6 +10,7 @@ from django.utils.timezone import now
from datetime import timedelta
class User(AbstractUser):
STATUS_PEKERJAAN_CHOICES = [
("Karyawan", "Karyawan"),
("PNS", "PNS"),
......@@ -17,7 +18,18 @@ class User(AbstractUser):
("Dosen", "Dosen"),
]
username = models.CharField(
def validate_nomor_kartu(value):
"""Ensure the number has exactly 15 or 16 digits."""
if not (10**14 <= value < 10**16): # Ensures 15-16 digits
raise ValidationError("Nomor kartu ATM perlu memiliki panjang 15-16 digit.")
def validate_status_pekerjaan(value):
global STATUS_PEKERJAAN_CHOICES
valid_choices = [choice[0] for choice in STATUS_PEKERJAAN_CHOICES]
if value not in valid_choices:
raise ValidationError(f"Status pekerjaan '{value}' tidak valid. Pilih salah satu dari: {', '.join(valid_choices)}.")
nama = models.CharField(
max_length=255,
validators=[RegexValidator(r'^[\w.-]+$',
message="Nama hanya boleh berisi huruf, angka, dan karakter (.,'-_)")],
......@@ -43,23 +55,20 @@ class User(AbstractUser):
tanggal_lahir = models.DateField()
nomor_hp = models.CharField(
max_length=255,
validators=[RegexValidator(r"^\d{1,4} - \d{8,15}$",
message="Nomor HP harus dalam format: Kode Negara - Nomor HP (contoh: 62 - 8123456789) dan panjang nomor telpon 8-15")
max_length=15,
validators=[RegexValidator(r"^\d{1,3} - \d{8,15}$",
message="Nomor HP harus dalam format: Kode Negara - Nomor HP (contoh: 62 - 8123456789) dan panjang seluruhnya maksimal 15 karakter")
],
)
nomor_kartu_atm = models.IntegerField(
validators=[RegexValidator(r"^\d{15,16}$",
message="Nomor kartu atm perlu memiliki panjang 15-16 digit"
)
],
validators=[validate_nomor_kartu]
)
status_pekerjaan = models.CharField(
max_length=10, # Adjust based on longest value
choices=STATUS_PEKERJAAN_CHOICES,
default="Belum"
default="Karyawan",
)
url_blog = models.CharField(
......@@ -73,6 +82,8 @@ class User(AbstractUser):
validators=[MinLengthValidator(5), MaxLengthValidator(1000)],
)
USERNAME_FIELD = 'nama'
def clean(self):
""" Ensure phone number is correctly formatted """
super().clean()
......@@ -92,7 +103,9 @@ class User(AbstractUser):
raise ValidationError({"tanggal_lahir":"Usia pengguna minimal 12 tahun"})
def save(self, *args, **kwargs):
if not self.username: # Set username only if it's empty
self.username = self.nama
super().save(*args, **kwargs)
def __str__(self):
return self.username
\ No newline at end of file
return self.nama
\ No newline at end of file
......@@ -2,6 +2,8 @@ from django.urls import reverse
from .forms import UserForm
from django.contrib import messages
from django.shortcuts import render, redirect
from .models import User
# Create your views here.
def register(request):
......@@ -11,8 +13,9 @@ def register(request):
user_form = UserForm(request.POST)
if user_form.is_valid():
user = user_form.save()
user.save()
messages.success(request, 'Your account has been successfully created!')
return redirect(f"{reverse('home:home')}?username={user.username}")
return redirect(f"{reverse('home:home')}?nama={user.nama}")
context = {'user_form':user_form}
return render(request, 'register.html', context)
......