join at
Django je open source Python Web framework, ktorý využíva MVC (Model-View-Controllner) návrhový vzor.
Django zdôrazňuje DRY (dont repeat yourself) princíp, ale tiež prenositeľnosť komponentov, rýchly vývoj a znovupoužiteľnosť.
Oficialna stránka: https://djangoproject.com/
Vytvoríme a aktivujeme adresár envs3 pre lokálne závislosti
python3 -m venv envs3
(alternativne: pyvenv envs3)
source envs3/bin/activate
pip install django
Django > 2.0 nepodporuje "legacy" Python 2.
Vytvoríme a aktivujeme adresár envs pre lokálne závislosti:
virtualenv envs
source envs/bin/activate
pip install django
Pokiaľ nemáte pip alebo virtualenv nainštalované, balíky python-pip, python-virtualenv sa nachádzajú v štandardných repozitároch Fedora, Ubuntu.
django-admin.py startproject konferencia
python manage.py runserver
python manage.py startapp mailinglist
vim konferencia/settings.py
Pridať novo vytvorenú aplikáciu medzi INSTALLED_APPS
vim mailinglist/views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def index(request):
return HttpResponse('Ahoj Svet.\
Práve ste v mailinglistovom indexe.')
vim mailinglist/urls.py
from django.urls import path
from mailinglist import views
urlpatterns = [
path('', views.index, name='index'),
]
vim konferencia/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
path('ml/', include('mailinglist.urls')),
path('admin/', admin.site.urls),
]
vim mailinglist/models.py
from django.db import models
class Subscriber(models.Model):
email = models.EmailField(max_length=255)
subscribed_date = models.DateTimeField('Date subscribed', auto_now_add=True, blank=True)
def __str__(self): # __unicode__ on Python 2
return self.email
class MailingList(models.Model):
name = models.CharField(max_length=50)
subscriber = models.ManyToManyField(Subscriber)
def __str__(self): # __unicode__ on Python 2
return self.name
python manage.py makemigrations mailinglist
python manage.py migrate
RAW SQL: python manage.py sqlmigrate mailinglist 0001
python manage.py createsuperuser
vim mailinglist/admin.py
from django.contrib import admin
from mailinglist.models import Subscriber, MailingList
admin.site.register(Subscriber)
admin.site.register(MailingList)
vim mailinglist/admin.py
from django.contrib import admin
from mailinglist.models import Subscriber, MailingList
class SubscriberAdmin(admin.ModelAdmin):
list_display = ('email', 'subscribed_date')
admin.site.register(Subscriber, SubscriberAdmin)
admin.site.register(MailingList)
vim mailinglist/views.py
# -*- coding: utf-8 -*-
from django.http import HttpResponse, Http404
from django.shortcuts import render
from mailinglist.models import MailingList
def mlist(request, list_id):
try:
ml = MailingList.objects.get(pk=list_id)
except MailingList.DoesNotExist:
raise Http404('Mailinglist neexistuje!!!')
return render(request, 'mailinglist/mlist.html', {'ml': ml})
def subscribe(request, list_id):
return HttpResponse('Práve sa zapisujete do mailinglistu: %s'
% list_id)
vim mailinglist/urls.py
from django.urls import path
from mailinglist import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:list_id>/', views.mlist, name='mlist'),
path('<int:list_id>/subscribe/', views.subscribe,
name='subscribe'),
]
mkdir -p mailinglist/templates/mailinglist
vim mailinglist/templates/mailinglist/mlist.html
{{ ml.name }}
{% for scb in ml.subscriber.all %}
- {{ scb.email }} ({{ scb.subscribed_date }})
{% endfor %}
vim mailinglist/forms.py
# -*- coding: utf-8 -*-
from django.forms import ModelForm
from mailinglist.models import Subscriber
class SubscribeForm(ModelForm):
class Meta:
model = Subscriber
fields = ('email',)
vim mailinglist/views.py
from django.shortcuts import render, get_object_or_404, redirect
from mailinglist.forms import SubscribeForm
from mailinglist.models import MailingList
def subscribe(request, list_id):
ml = get_object_or_404(MailingList, pk=list_id)
if request.method == "POST":
form = SubscribeForm(request.POST)
if form.is_valid():
subscriber = form.save()
ml.subscriber.add(subscriber)
return redirect('mlist', list_id=list_id)
else:
form = SubscribeForm()
return render(request, 'mailinglist/subscribe.html',
{'ml': ml, 'form': form})
vim mailinglist/templates/mailinglist/subscribe.html
{{ ml.name }}