- Vytvoříme v PyCharm nový projekt.

- Nainstalujte Django

- Přepněte se do terminálu a vytvořte projekt: django-admin startproject pjin
- Do nově vytvořené složky projektu se přepněte příkazem cd pjin
- Vytvořte aplikaci python manage.py startapp rajon

- Spusťte webový server python manage.py runserver

- Otevřte projekt na http://localhost:8000/
- Upravte soubory
rajon/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello")
rajon/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
pjin/urls.py
...
from django.urls import path, include
urlpatterns = [
...
path('rajon/', include('rajon.urls')),
]
- Otevřte aplikaci na http://localhost:8000/rajon/ a administrátorské rozhraní http://localhost:8000/admin/
- Změňte LANGUAGE_CODE (cs) a TIME_ZONE (Europe/Prague) v souboru pjin/settings.py
- Vypněte webový server v terminálu pomocí CTRL+C
- Spusťte příkaz python manage.py migrate a zkontrolujte databázi db.sqlite3
- Definujte model v souboru rajon/models.py
class Zadani(models.Model):
stanovisko_y = models.FloatField()
stanovisko_x = models.FloatField()
orientace_y = models.FloatField()
orientace_x = models.FloatField()
smer_orientace = models.FloatField()
smer_bod = models.FloatField()
delka = models.FloatField()
class Meta:
verbose_name_plural = "Zadání"
class Vysledek(models.Model):
souradnice_y = models.FloatField()
souradnice_x = models.FloatField()
cas = models.DateTimeField()
zadani = models.ForeignKey(Zadani, on_delete=models.CASCADE)
class Meta:
verbose_name_plural = "Výsledky"
- Aktivujte aplikaci v souboru pjin/settings.py
...
INSTALLED_APPS = [
'rajon.apps.RajonConfig',
...
a spusťte příkaz python manage.py makemigrations rajon. Přepis modelu do SQL můžete zkontrolovat příkazem python manage.py sqlmigrate rajon 0001
- Migraci modelu do DB provedem příkazem python manage.py migrate (zkontrolujte výsledek v databázi)
- Vytvořte účet administrátora python manage.py createsuperuser
- Spusťte webový server python manage.py runserver a přihlašte se do rozhraní správce projektu: http://localhost:8000/admin/
- Aplikaci Rajon přidáme do administračního rozhraní v souboru rajon/admin.py
from .models import Zadani, Vysledek
admin.site.register(Zadani)
admin.site.register(Vysledek)
Vylepšená verze:
from .models import Zadani, Vysledek
class ReadOnlyAdmin(admin.ModelAdmin):
readonly_fields = []
def get_readonly_fields(self, request, obj=None):
return list(self.readonly_fields) + \
[field.name for field in obj._meta.fields] + \
[field.name for field in obj._meta.many_to_many]
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def has_change_permission(self, request, obj=None):
return False
admin.site.register(Zadani)
admin.site.register(Vysledek, ReadOnlyAdmin)
- Vytvořte soubor rajon/vypocet.py
import math
def rajon(stanovisko_y, stanovisko_x, orientace_y, orientace_x, smer_orientace, smer_bod, delka):
dy_ab = orientace_y - stanovisko_y # zmena zde
dx_ab = orientace_x - stanovisko_x # zmena zde
smernik_ori = math.atan2(dy_ab, dx_ab)
rozdil_uhlu = smer_bod * math.pi / 200 - smer_orientace * math.pi / 200
smernik_cil = smernik_ori + rozdil_uhlu
souradnice_x = stanovisko_x + delka * math.cos(smernik_cil) # zmena zde
souradnice_y = stanovisko_y + delka * math.sin(smernik_cil) # zmena zde
return souradnice_y, souradnice_x
a metody save/delete v souboru rajon/models.py.
class Zadani:
...
def save(self, *args, **kwargs):
from .vypocet import rajon
from django.utils import timezone
super().save(*args, **kwargs)
vysledek = rajon(self.stanovisko_y, self.stanovisko_x,
self.orientace_y, self.orientace_x,
self.smer_orientace,
self.smer_bod,
self.delka)
v = Vysledek(souradnice_y=vysledek[0], souradnice_x=vysledek[1],
cas=timezone.now(), zadani_id=self.id)
v.save()
def delete(self, *args, **kwargs):
super().delete(*args, **kwargs)
- Upravte soubor rajon/views.py a aplikaci otestuje.
...
from .models import Vysledek
def index(request):
pocet = Vysledek.objects.count()
return HttpResponse(f"Počet výpočtených úloh: {pocet}")
- Vytvořte šablonu rajon/templates/rajon/index.html
Výsledky:
{% if vysledky %}
<ul>
{% for vysledek in vysledky %}
<li>{{ vysledek.id }}: ({{ vysledek.souradnice_y }}, {{vysledek.souradnice_x}}) (čas: {{ vysledek.cas }})</li>
{% endfor %}
</ul>
{% else %}
<p>Žádné...</p>
{% endif %}
a upravte rajon/views.py, výsledek otestujte.
...
from django.template import loader
def index(request):
vysledky = Vysledek.objects.order_by()
template = loader.get_template('rajon/index.html')
context = {
'vysledky': vysledky,
}
return HttpResponse(template.render(context, request))
Zdroj: