Django basics Flashcards
Dlaczego warto używać web frameworka?
Web frameworki majątą zaletę,że oferują gotowe narzędzia. Np. nie ma potrzeby pisania pisać zapytań w języku SQL, aby skomunikować się z bazą relacyjną można to zrobić w języku Python. Web frameworki oferują również:
- automatyzowanie powtarzalnych zadań
- obsługiwanie żądań URL i narzędzia do mapowania URL
- automartczne generowanie templatów HTML
- narzędzia do zabezpieczenia sesji i obsługę ciasteczek
Jak stworzyć virtual environment w folderze z projektem?
tworzenie folderu z projektem
W terminalu wpisujemy kolejno:
$ pwd
$ ls -al
$ mkdir django-portfolio
$ ls -al
$ cd django-portfolio
tworzenie wirtualnego środowiska
$python3 -m venv .env
$ls -al
aktywacja wirtualnego środowiska
$ source .env/bin/activate
W PyCharmie po otwarciu projektu wybieram existing environment. A następnie w Preferences wybieram interpreter z pliku. Otwieram
sobie ścieżkę .env/bin/activate i tam wybieram plik ze strzałką do góry i ze znakiem zapytania o nazwie python 3
Komenda:
$django-admin startproject nazwaprojektu .
Dzięki tej komendzie django tworzy strukture folderów naszego nowego projektu
Tworzy się plik manage.py oraz folder o nazwie twojego projektu w którym znajdują siętakie pliki jak:
__init__.py
settings.py
urls.py
wsgi.py
The dot at the end of command avoids extra folders
Komenda:
$ python manage.py runserver
Starting development server at
http://127.0.0.1:8000
Komenda:
$ python manage.py startapp projects
Tworzymy nowąapkę wewnątrz istniejącego już projektu w Django*
*aby działała nasz serwer musi być włączony (poprzedzić $ python manage.py runserver)
settings.py
Plik zawierający ustawienia naszej aplikacji. Są tam określone ustawienia:
BASE_DIR
SECRET_KEY
DEBUG
ALLOWED_HOSTS
INSTALLED_APPS
MIDDLEWARE
ROOT_URLCONF
TEMPLATES
DATABASES
AUTH_PASSWORD_VALIDATORS
LANGUAGE_CODE
TIME_ZONE
STATIC_URL
STATICFILES_DIRS
DEFAULT_AUTO_FIELD
INSTALLED_APPS jak go używamy?
Każdą nowo-utworzoną apkę w moim projekcie Django muszę dodać do sekcji INSTALLED_APPS w settings.py
Jak dodać nowy URL (enpoint) mojej dodatkowej apki w Django?
do istniejących już urlpatterns dodaje swój nowy path:
W pliku urls.py głównego projektu używamy metody include()
e.g
from django.urls import include, path
urlpatterns = {
path(‘admin/’, admin.site.urls),
path(‘’, include(‘infos.urls’)),
]
Oprócz tego, że dodaliśmy ten url do urls.py głównej apki, to jeszcze musimy stworzyć plik urls.py w aplikacji której url chcemy dodać. Wiec Tworzę taki plik, w folderze z tą apką i tam definiuje odpowiednie url w klasyczny sposób (bez include i ):
urlpatterns = [
path(‘me/’, views.me),
path(‘contact/’, views.contact),
]
Jak dodać nowy URL (enpoint) mojej dodatkowej apki w Django?
do istniejących już urlpatterns dodaje swój nowy path:
W pliku urls.py głównego projektu używamy metody include()
e.g
from django.urls import include, path
urlpatterns = {
path(‘admin/’, admin.site.urls),
path(‘’, include(‘infos.urls’)),
]
Oprócz tego, że dodaliśmy ten url do urls.py głównej apki, to jeszcze musimy stworzyć plik urls.py w aplikacji której url chcemy dodać. Wiec Tworzę taki plik, w folderze z tą apką i tam definiuje odpowiednie url w klasyczny sposób (bez include i wskazujemy na views.py ):
from infos import views
urlpatterns = [
path(‘me/’, views.me),
path(‘contact/’, views.contact),
]
Jak stworzyć views.py?
trzeba zdefiniować metodę renderującą template HTML* w pliku views.py oraz podać request** jako argument
e.g
def me(request):
return render(request, “infos/me.html”)
from django.shortcuts import render
def contact(request):
return render(request, “infos/contact.html”)
- tym razem naszym Http Response object jest szablon HTML. Ale możemy też po prostu zaimportować HttpResponse z django.http i zwrócić pusta strone
e.g
from django.http import HttpResponse
def contact(request):
return HTTpResponse()***
**request - objekt django, który jest przekazywany ciągle gdzieś w apce
*** tutaj w ten nawias możemy wrzucić nawet całego HTMLa ukradzionego z jakiejś strony
Gdzie możemy zobaczyć Django errors?
1) w przeglądarce, szara strona z żółtym nagłówkiem
2) w terminalu: AttributeError
Jak stworzyć szablon HTML dla naszej apki i gdzie go umieścić ?
W folderze z naszą mniejszą apką (dla której szablon chcemy stworzyć) tworzymy folder o nazwie ‘templates’ i w nim kolejny folder ‘nazwa_naszej_apki’
Następnie tworzymy plik z rozszerzeniem HTML.
Lecz żeby nasza duża apka widziała ten folder ‘template’ musimy go zarejestrować w głównym pliku settings.py w zmiennej TEMPLATES = [ ‘DIRS’ : [] …
e.g
TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
‘DIRS’: [BASE_DIR / ‘templates’]
lub
‘DIRS’: [os.path.join(BASE_DIR, ‘projects/templates’)]
Zmiennna BASE_DIR w settings.py?
wskazuje nam na root naszego projektu
e.g
Jak uniknąć stylu raw HTML na naszej stronie?
Można wkleić link ze stylem CSS ze strony Bootstrap.
W HTMLu pod tittle:
<link></link>
Strona od razu wygląda lepiej
Do czego służy plik models.py?
Do komunikacji z bazą danych
SQL
SQL (ang. Structured Query Language) jest językiem zapytań, przy pomocy którego komunikujemy się z relacyjną bazą danych
Tabela w bazie danych jest reprezentowana w Django przez _____
klasę w models.py
class Project(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
Technology = models.Charfield(max_length=20)
image = models.Charfield(max_length=100))
każdy wiersz klasy odpowiada kolumnie tabeli w bazie. Nie ma id, bo jest generowane automatycznie. Podajemy również różne jakie typy danych maja sie znaleźć w tych polach.
python3 manage.p migrate
Gdzie zmieniamy bazę danych, z którą chcemy się połączyć?
settings.py
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: BASE_DIR / ‘db.sqlite3’,
}
}
Po co używać Django shell?
Aby umieścić dane w bazie
Co wpisujemy w Django shell aby umieścić nasz projekt w bazie jako obiekt?
0) $ python3 manage.py shell
aby otworzyć powłokę django
1) Musimy mieć zdefiniowaną klasę (określającą tabelę) w models. py
2) W terminalu wpisujemy np.:
$ from projects*.models import Project**
*projects to. w naszym drzewie projektu folder z projektami
** Project to nazwa naszej klasy w której mamy zdefiniowane jak ma wyglądać tabela do bazy
3) następnie (nadal w terminalu) do jakiejś zmiennej (np. p1) wpisujemy dane zgodnie z formatką określoną przez klasę
$ p1= Project(title=”test project”, description=”this is a test, 1234!”, technology=”Django”, image=”testproject.png”)
4) aby zapisać dane w bazie
$ p1.save()
Jak zobaczyć, czy nasze dane się zapisały w bazie?
znowu użyjemy zmiennej np. p
$ results = Projects*.objects.all()
To query przypisaliśmy do zmiennej results, aby móc je wywołać:
$ results
Po wpisaniu tego dostajemy odpowiedź z bazy:
<Query Set [<Project: object (1)>]>
- Project to nazwa naszej klasy w której mamy zdefiniowane jak ma wyglądać tabela do bazy i z jej pomocą umieściliśmy dane w bazie, wpisując dane w odpowiednie pola
A jak chcemy np. tylko title wziąć to wpisujemy sobie indeks do zapytania:
p = results[0]
p.tittle
otrzymujemy:
“test project”
Pod nowym URL (dodaliśmy go do urls.py), chcemy dać HTML, do którego przekażemy nasz projekt (obiekt) z bazy. Jak zacząć to robić?
Musimy odpowiednio rozbudować metodę w views.py, która renderowała taki HTML
np.
def all_projects(request):
#query to the db to return all project objects
projects = Project.objects(all)
return render(request, ‘projects/all_projects.html’, {‘projects’: projects})
na końcu daję info że chce te dane z bazy przypisane do zmiennej projects wsadzić do słownika. Będziemy chcieli go wstrzyknąć do HTML. Jako, że nasze dane z bazy to wartość, a nasza zmienna projects to key tego słownika, to potem w HTMLu będzie wystarczyło podać klucz ‘projects’ jako variable:
….
<h1> hello again! </h1>
{{ projects }}
no ale wtedy nam się wyrintuje nasz Query w naszej stronie. Zobaczymy tam
hello again
<Query Set [<Project: object (1)>]>
Można więc to umieścić w logice, która wywołuje konkretne info z naszego słownika:
<h1> hello again! </h1>
{{ projects }}
{% for project in projects %}
<p> {{ project.title }} <p/>
<p> {{ project.description }} <p/>
<p> {{ project.technology }} <p/>
{% endfor %}*
- zamknięcie HTMLowe mojej pętli for
Teraz już wyświetli nam się coś sensowniejszego:
hello again
<Query Set [<Project: object (1)>]>
test project
this is a test 1234!
Django
Co jest przykładem użycia Django Templating Language, który pozwala nam wstrzykiwać dane do HTML?
{% code logic %}
{{ variables }}
w code logic dajemy np. jakąś pętlę
variables to właściwie print statement w template
Jak zaimportować obrazek i wstrzyknąć go do HTML?
na górze pliku HTML wpisujemy:
{% load static %}
a w miejscu w którym chcemy nasz obrazek:
<img></img>
Jak wyjść z Django shell?
exit()
Jeśli dokonamy zmian w kodzie w naszym projekcie, szczególnie w pliku models.py to jak sprawdzić, aby te zmiany sięgnęly też bazy?
1) makepigration
$ python3 manage.py makemigration
2) migrate
$ python3 manage.py migrate
Do czego służy views.py?
W views.py znajdują się funkcje i klasy, które otrzymują żądania internetowe (web request) i zwracją odpowiedź (web response). Taka odpowiedź, to może być zwykła odpowiedź HTTP, ale także szablon HTML lub np. odpowiedź HTTP, która przekierowuje na inną stronę.
Do czego służy moduł typing? Był użyty w jednym, z projektów Django jakie widziałam
Moduł typing (wbudowany w Pythona od wersji 3.5) pozwala nam na bardzo precyzyjne określanie nawet złożonych typów. Cały moduł ma bardzo pomocną dokumentację
So what exactly is Django?
Django is a web development framework for Python.
So it is for the Python language
and it allows us to build websites web projects with Python.
Now we still will use HTML, CSS and JavaScript
for the part, our users see five front-end of websites,
but for everything that happens on the server,
so on the remote computer out there in the web,
which handles the incoming requests
and sends back the responses,
for all of that we use Django
But what exactly is a framework?
A framework is it’s a module,
it’s a third party library
which you install on your system, and the idea is that it has a bunch of utility functionalities, and methods you can use,
and that it solves a lot of problems for you
so that you don’t have to like managing sessions
and authentication and file uploads, parsing incoming requests, and sending back responses,
so that you as a developer don’t have to focus
on those nitty gritty details, but that instead you can focus on what makes up your website,
that you can focus on the core business logic, what earns you money.
What is the difference between framework and library?
Framework is not just called a library
because it does not just give us all these tools to use but it also gives us a clear guidance, a clear set of rules on how to use these tools/
And that starts with setting up a Django project, it will give us a project which has a certain structure that we should use for any kind of Django project, so you don’t have to think about how to best do something,
you know how to do it
because there is one clear path with Django.
, Django is built for Python version ______
3.X, so for that latest version of Python,
What it means that Django has ‘batteries included’ approach?
It means that it comes with everything you need.
This is also a motto for Python.
How to start Django project?
Skierować się do jakiegoś folderu przy użyciu:
$ cd
$ Python3 -m pip install Django
Sprawdzenie czy sie dobrze zainstalowało:
$ django-admin
$ cd
$ django-admin startproject mypage
Po wykonaniu tej komendy tworzy się folder o nazwie naszego projektu ‘mypage’ i tam struktura plików:
- folder mypage:
__init__.py
asgi.py
settings.py
urls.py
wsgi.py
- folder templates
- plik manage.py
Następnie otwieram ten projekt w wybranym IDE np. Ms Visual Studio albo PyCharm
What is PEP8?
styling guidelines
for Python projects, totally independent of Django.
Do czego służy manage.py?
manage.py file this file will give us access to
some built-in Django commands, which we can use in any Django project.
You can think of the arguments you pass to manage.py as subcommands. It is your tool for executing many Django-specific tasks – starting a new app within a project, running the development server, running your tests.
Czyli wykorzystuje ten plik podczas pracy nad projektem django w terminalu. Wiele komend, które przekazuje nawiązuje do pliku manage.py
Do czego służy __init__.py?
It’s empty and we don’t really need to change anything here.
It only exists to mark our project folder as a Python package,