Code Monkey home page Code Monkey logo

advent_calendar's Introduction

Backend to advent calendar

How to install

  1. Download repo,
  2. Initialize virtual environment in it: python -m venv env,
  3. Run that venv:
    LLINUX or MAC source env/bin/activate,
    WINDOWS google say \env\Scripts\activate.bat if it doesnt work do it cd env cd Scripts activate cd .. cd ..
  4. Install dependencies: pip install -r requirements.txt,
  5. Create a new file such as .env.example in advent_calendar and chance his name to .env
  6. Create a new secret key: python generateSecretKey.py
  7. Copy it and paste it into advent_calendar / .env up to SECRET_KEY
    e.g. SECRET_KEY=n-9#+mf&sziujs^g1!+liv5gn@%0*)7dp)gtm^16eqyl+bvjlr
  8. (optional) Change database settings in settings.py if you want to use different (non-sqlite) db backend,
  9. Make migrations: python manage.py makemigrations,
  10. Migrate database: python manage.py migrate,
  11. Create admin: python manage.py createsuperuser,
  12. To run dev server: python manage.py runserver

with Docker

  1. Download repo
  2. Run docker-compose up in it
  3. Ready. Thing is accessible at localhost:8000. Stopping and starting containers again results in making whole new migrations and reseting database (sqlite) content.

Tips for devs

Dumping pip installations into the file

If you installed new pip dependency you need to allow others to know about it. To do so it is best to save all requirements in one file, which in this case in named requirements.txt. You can do this by typing following command:

pip freeze > requirements.txt

Deploy Nginx

  • install Nginx, download app
  • nginx configuration, remember to change server_name:
server {
    listen 80;
    server_name HOSTNAME_HERE;

    location / {
        include proxy_params;
        proxy_pass http://localhost:8000;
    }
}
  • ln -s do enabled,
  • wszystko dalej jak w how to install,
  • allowed hosts - add host
  • if table doesnt exist: python manage.py makemigrations; python manage.py migrate
  • create admin: python manage.py createsuperuser and follow instructions

Adresses api

-/api/tasks/all/ __get all tasks -/api/tasks/all/id/ __get one task by id

-/api/tasks/now/ __get all tasks with taskDate <= today -/api/tasks/now/id/ __get one tasks by id (only with taskDate <= today)

-/api/tasks/answer __post userAnswer and check if it is correct (return true or false)

-/api/today/ __get today's date

-/admin/ __admin panel

Api is sort by taskDay.

advent_calendar's People

Contributors

patrykgrzegorek avatar jeeejeets avatar

Watchers

Marcin Ławniczak avatar James Cloos avatar Mateusz Stempniewicz avatar Tomasz Gil avatar  avatar  avatar

Forkers

patrykgrzegorek

advent_calendar's Issues

Model - rozwiązanie

Rozwiązanie musi być modelem powiązanym 1:n (jedno zadanie, wiele rozwiązań) z zadaniem. Musi zawierać datę przesłania rozwiązania, email (unikatowy w połączeniu z ID zadania powiązanego, tj. jedna para ID zadania i emaila nie może wystąpić w bazie dwa razy) oraz rozwiązanie: ciąg znaków będący URL do githuba, gitlaba albo bitbucketa (koniecznie te trzy serwisy, żaden inny) albo będący ścieżką do pliku (plik przesłany przez usera, zapisany na serwerze i ścieżka wygenerowana przez Django).

Napisanie widoku strony głównej

Należy napisać widok strony głównej, na którym oprócz zdefiniowanych osobno footera i headera będzie także kalendarz z losowo porozrzucanymi dniami od 1 do 24 grudnia. Każdy z dni ma być linkiem przenoszącym na odpowiednią stronę ze szczegółami zadania. Dopóki ten link nie będzie znany można go zastąpić przez a href="#"

Model - zadanie

Model zadanie będzie obejmował zadania wystawione przez nas. Musi posiadać treść (długą), tytuł, datę, może poziom trudności wyrażony intem od 1 do 5?

Setup Webpacka

Setup webpacka można żywcem zerżnąć z AKAI Managera albo Lekarza

Napisanie templaty szczegółów zadania

Szczegóły zadania w formie prostej strony ze wcześniej zrobionymi navbarem i footerem. Musi pojawić się tam treść zadania a niżej także formularz do przesyłania tego zadania. Formularz przyjmuje dane: email i plik albo link do któregoś z serwisów gita. Nie zawracaj sobie głowy walidacją, zrobimy to po stronie backendu.

Napisanie footera strony

Footer będzie inkludowany pod każdą ze stron, czyli w templacie base.html po której dziedziczą wszystkie inne. Musi zawierać informacje na temat projektu, np.: With <3 by Kasia, Dawid, Patryk @ AKAI 2019

Napisanie headera strony

Header wyświetlający się tylko na stronie głównej, tej z kalendarzem. Wielki tytuł "Kalendarz Adwentowy AKAI"

Przesłane odpowiedzi - error przy otwieraniu pliku

Jeżeli user prześle w odpowiedzi plik to nie można go otworzyć z panelu administratora - wyskakuje powiadomienie o braku takiego pliku:

Answer with ID "1/change/answers/2019/11/19/adfs.zip" doesn't exist. Perhaps it was deleted?

Reprodukcja błędu:

  1. Utworzyć zadanie,
  2. Utworzyć odpowiedź, załączyć plik,
  3. Wejść po stronie admina w edycję tego zadania i kliknąć w link do załączonego pliku

Setup Django

Podstawowy setup Django. README można żywcem zerżnąć z lekarza albo akai managera.

Navbar w widoku szczegółów

W widoku szczegółów zamiast wielkiego headera będzie widoczny nieduży navbar z opcjami nawigacyjnymi: dzień poprzedni, strona główna, dzień następny

Admin - obsługa modelu rozwiązanie

W panelu admina zachodzi konieczność przeglądania rozwiązań nadesłanych przez użytkowników. Admin musi mieć wgląd w szczegóły dotyczące tego zadania, mieć możliwość ich edycji oraz usuwania.

Includowanie Bootstrapa do scss

Trzeba zaincludować bootstrapa 4 do scssów. Można to zrobić przez dyrektywę @import w index.scss (który wcześniej trzeba utworzyć razem z całym katalogiem /src/)

Widok - przyjmowanie zadań

Każdy odwiedzający stronę powinien mieć możliwość wysłania danych tworzących model rozwiązania. Potrzebujemy obsługi takiego formularza. Będzie on przesyłany z widoku szczegółów zadania.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.