django-admin startproject ct ### towrzymy i aktywujemy srodowisko python3 -m venv ctdjango source ctdjango/bin/activate ### tworzymy apke python3 manage.py startapp first ### inne podstawowe operacje python3 manage.py test python3 manage.py makemigrations python3 manage.py migrate python3 manage.py createsuperuser ### tworzymy model class Nazwamodelu(models.Model): nazwapola = models.CharField(max_length=128) def __str__(self): return self.name ### Pola w modelach admin.py/ # wszystkie pola modelu sa widoczne admin.site.register(Movie) # wybieram pola modelu, ktore maja byc widoczne @admin.register(Man) class ManAdmin(admin.ModelAdmin): fields = ('firstname', 'lastname') <- pola widoczne list_display = ('firstname', 'lastname') <- pola na liscie ### Podkatalogi w serwisie urls.py/ from django.urls import path, include <- dopisuje include path('dupa/', include('first.urls')), <- first (nazwa), urls (plik urls.py) # w aplikacji first urls.py/ from django.urls import path from .views import testowaodp urlpatterns = [ path('xxx/', testowaodp), ] views.py/ from django.http import HttpResponse def testowaodp(request): return HttpResponse('dkfjhskhfshdfkjh') ### statyczny html settings.py/ w TEMPLATES 'DIRS': ['tmp'] tworzymy katalog tmp/ w korzeniu projektu tam wrzucamy pliki html views.py/ def statyczny(request): return render(request, "st.html") def zmienna(request): zmienna = "dupa włochata" return render(request,'st.html', { 'ddd': zmienna }) w pliku html {{ ddd }} # przekazujemy liste def zmienna(request): zmienna = "dupa włochata od faceta" lista = ['jeden','dwa','trzy'] return render(request,'st.html', { 'ddd': zmienna, 'lista': lista } ) w pliku html: uzywanie if: {% if warunek %} kod html do wyswietlenia {% endif %} ### pliki statyczne w settings: STATIC_URL = '/static/' STATICFILES_DIRS = ['statyczne'] <- dopisujemy lub w folderze apki katalog static w pliku html: {% load static %} <- na gorze {% static 'jamnik.jpg' %} <- sciezka do pliku (jamnik.jpg to nazwa pliku) ### pliki media MEDIA_URL = '/media/' MEDIA_ROOT = 'mmm' jesli chce wskazac podkatalog do uploadowania plikow to w pliku models.py w danym modelu: photo = models.ImageField(null=True, blank=True, upload_to='podkatalog') ### serwowanie plików graficznych w panelu admina w glownym urls.py from django.conf import settings from django.conf.urls.static import static + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) <- po nawiasie kwadratowym ### wyciaganie danych z bazy we views.py from .models import Man lista = Man.objects.all() <- mapuje do listy nazwy zwracane przez metode __str__(self) z klasy Man lista = Man.objects.filter(id=4) <- mapuje tylko obiekt o id=4 ale dalej jest to array lista = Man.objects.get(id=4) <- mapuje tylko obiekt o id=4 jako jeden obiekt jesli chcemy inny element z klasy jak wskazany w __str__(self) w kodzie item.nazwapola ### formularz dodawaia danych do bazy tworzymy w aplikacji plik forms.py from django.forms import ModelForm from .models import Man class ManForm(ModelForm): class Meta: model = Man fields = ['firstname','lastname','yearofbirth','photo'] w urls.py dorzucamy: path('add/', nowy), (dodajemy nowy do importu) do pliku views.py dopisujemy: from django.shortcuts import render, redirect <- dopisanie redirect-a def nowy(request): form = ManForm(request.POST or None, request.FILES or None) if form.is_valid(): form.save() return redirect(zmienna) <- zmienna to widok uruchamiany po dodaniu return render(request, 'nowy.html', { 'form': form }) w bodu pliku nowy.html wrzucamy:
{% csrf_token %} {{ form }}
### edytowanie urls.py path('edit/', ed), (zaimportuj ed) views.py def ed(request, id): ob = get_object_or_404(Man, pk=id) form = ManForm(request.POST or None, request.FILES or None, instance=ob) if form.is_valid(): form.save() return redirect(zmienna) return render(request, 'nowy.html', { 'form': form }) ### usuwanie urls.py path('delete/', rm), (import rm z views) views.py def rm(request, id): ob = get_object_or_404(Man, pk=id) if request.method == 'POST': ob.delete() return redirect(zmienna) return render(request, 'potwierdz.html', {'ob': ob}) potwierdz.html

Czy napewno chcesz usunac {{ ob.firstname }} ?

{% csrf_token %}
### uzupelnienie listy o odnosniki do kasowania pozycji w urls.py path('edit/', ed, name = 'ed'), w html-u: wyswietlany odnosnik ### Inne Staff status - mozliwosc logowania sie do sekcji admin ### Sekcja logowania dla zwyklych userow urls.py from django.contrib.auth import views as auth_views path('zaloguj/', auth_views.LoginView.as_view()), w lokalizacji na ktora wskazuje blad (/tmp/registration/login.html)
{% csrf_token %} {{ form }}
### login logout normal user urls.py path('accounts/', include('django.contrib.auth.urls')), # redirect after operations settings.py LOGIN_REDIRECT_URL = '/' LOGOUT_REDIRECT_URL = '/'