diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c69d96d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,32 @@ +**/*.pyc +**/*.pyo +**/*.mo +**/*.db +**/*.css.map +**/*.egg-info +**/*.sql.gz +**/__pycache__/ +.cache +.project +.idea +.pydevproject +.idea/workspace.xml +.DS_Store +.git/ +.sass-cache +.vagrant/ +dist +docs +env +logs +src/{{ project_name }}/settings/local.py +src/node_modules +web/media +web/static/CACHE +stats +Dockerfile +.gitignore +Dockerfile +db.sqlite3 +**/*.md +logs/ \ No newline at end of file diff --git a/.github/workflows/pbp-deploy.yml b/.github/workflows/pbp-deploy.yml new file mode 100644 index 0000000..22d2143 --- /dev/null +++ b/.github/workflows/pbp-deploy.yml @@ -0,0 +1,26 @@ +name: Deploy + +on: + push: + branches: + - main + - master + +jobs: + Deployment: + if: github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + steps: + - name: Cloning repo + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Push to Dokku server + uses: dokku/github-action@master + with: + branch: 'main' + git_remote_url: ssh://dokku@${{ secrets.DOKKU_SERVER_IP }}/${{ secrets.DOKKU_APP_NAME }} + ssh_private_key: ${{ secrets.DOKKU_SSH_PRIVATE_KEY }} + + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..82ba771 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,32 @@ +FROM python:3.10-slim-buster + +WORKDIR /app + +ENV PYTHONUNBUFFERED=1 \ + PYTHONPATH=/app \ + DJANGO_SETTINGS_MODULE=shopping_list.settings \ + PORT=8000 \ + WEB_CONCURRENCY=2 + +# Install system packages required Django. +RUN apt-get update --yes --quiet && apt-get install --yes --quiet --no-install-recommends \ +&& rm -rf /var/lib/apt/lists/* + +RUN addgroup --system django \ + && adduser --system --ingroup django django + +# Requirements are installed here to ensure they will be cached. +COPY ./requirements.txt /requirements.txt +RUN pip install -r /requirements.txt + +# Copy project code +COPY . . + +RUN python manage.py collectstatic --noinput --clear + +# Run as non-root user +RUN chown -R django:django /app +USER django + +# Run application +# CMD gunicorn shopping_list.wsgi:application \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..e4f4f76 --- /dev/null +++ b/Procfile @@ -0,0 +1,2 @@ +release: django-admin migrate --noinput +web: gunicorn library_app.wsgi \ No newline at end of file diff --git a/README.md b/README.md index e95ec27..3157172 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,577 @@ Nama: Fahmi Ramadhan
NPM: 2206026473
Kelas: PBP A
+# Tugas 6: JavaScript dan Asynchronous JavaScript + +
+ +## Perbedaan antara _asynchronous programming_ dengan _synchronous programming_. + +## Dalam penerapan JavaScript dan AJAX, terdapat penerapan paradigma event-driven programming. Jelaskan maksud dari paradigma tersebut dan sebutkan salah satu contoh penerapannya pada tugas ini. + +## Jelaskan penerapan asynchronous programming pada AJAX. + +## Pada PBP kali ini, penerapan AJAX dilakukan dengan menggunakan Fetch API daripada library jQuery. Bandingkanlah kedua teknologi tersebut dan tuliskan pendapat kamu teknologi manakah yang lebih baik untuk digunakan. + +## Implementasi _Checklist_ + +### 1. Membuat sebuah tombol yang membuka sebuah modal dengan _form_ untuk menambahkan buku. + +### 2. Membuat fungsi _view_ baru untuk menambahkan buku ke dalam basis data. + +### 3. Membuat path `/create-ajax/` yang mengarah ke fungsi _view_. + +### 4. Melakukan perintah `collectstatic`. + +
+ +# Tugas 5: Desain Web Menggunakan HTML, CSS dan FrameWork CSS + +
+ +## Manfaat dari setiap _element selector_ dan kapan waktu yang tepat untuk menggunakannya. + +- _Universal Selector_ digunakan untuk memilih semua elemen HTML pada halaman. _selector_ ini cocok digunakan ketika ingin _reset style_ atau ketika ingin memberikan _style_ umum pada semua elemen dalam halaman, misalnya mengatur jenis _font_ (`* {}`). + +- _Element Selector_ digunakan untuk memilih semua elemen HTML dengan nama elemen tertentu (misalnya, semua `

`). _Selector_ ini cocok digunakan ketika ingin memberikan _style_ umum pada semua elemen dengan jenis tertentu. (`p {}`). + +- _Class Selector_ digunakan untuk memilih elemen berdasarkan atribut `class` yang diberikan. Dikarenakan beberapa elemen bisa memiliki `class` yang sama dengan elemen lainnya, kita bisa mengelompokkan elemen-elemen tersebut dalam kelas-kelas tertentu. Oleh karena itu, _selector_ ini cocok digunakan ketika ingin memberikan _style_ pada kelompok elemen dengan class tertentu yang sama (`.nama-class {}`). + +- _ID Selector_ digunakan untuk memilih elemen berdasarkan atribut `id` yang diberikan. Berbeda dengan `class`, atribut `id` bersifat unik untuk setiap elemen dalam satu file `html`. Oleh karena itu, _selector_ ini cocok digunakan ketika ingin memberikan _style_ atau manipulasi spesifik pada elemen tertentu dengan ID yang unik (`.value-id {}`). + +- _Descendant Selector_ digunakan untuk memilih elemen dalam hierarki tertentu. _Selector_ ini cocok digunakan ketika ingin memberikan _style_ pada semua elemen tertentu yang berada di dalam elemen tertentu, misalnya semua elemen `

  • ` dalam elemen `