Compare commits
No commits in common. "master" and "cart" have entirely different histories.
|
@ -50,4 +50,3 @@ We don't provide any support for the content in this repository.
|
|||
### License
|
||||
|
||||
The project is licensed under the GPLv3 license.
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
from django.db import models
|
||||
from decimal import Decimal
|
||||
import datetime
|
||||
|
||||
|
||||
class ExchangeRate_name(models.Model):
|
||||
|
@ -23,7 +25,7 @@ class ExchangeRate(models.Model):
|
|||
|
||||
def exchange(_currency_id, _base_currency):
|
||||
rate = ExchangeRate.objects.filter(name=_currency_id).latest('date')
|
||||
return round(rate.exchange_rate_to_chf * _base_currency, 2)
|
||||
return round(rate.exchange_rate_to_chf * _base_currency,2)
|
||||
|
||||
def __str__(self):
|
||||
return '{} {}'.format(self.exchange_rate_to_chf, self.name)
|
||||
return str(self.name)
|
||||
|
|
|
@ -4,7 +4,7 @@ from currencies.models import (ExchangeRate,
|
|||
ExchangeRate_date,
|
||||
ExchangeRate_name)
|
||||
from currencies import exchange_rates
|
||||
from webshop.utils import get_categories
|
||||
from django.http import JsonResponse
|
||||
|
||||
|
||||
def currencies(request):
|
||||
|
@ -160,10 +160,9 @@ def currencies(request):
|
|||
"""
|
||||
# know we can query our data for presentaton:
|
||||
ordered_currency_list = ExchangeRate.objects.order_by('name', 'date')
|
||||
category_list = get_categories()
|
||||
|
||||
# and publish it on template:
|
||||
return render(request,
|
||||
'currencies/index.html',
|
||||
{'ordered_currency_list': ordered_currency_list,
|
||||
'category_list': category_list,
|
||||
'message': message})
|
||||
|
|
|
@ -59,14 +59,6 @@
|
|||
<dt><dl>{{ total }} {{ currency_name }}</dl></dt>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td scope="col" colspan="5" class="text-right">
|
||||
<td scope="col" class="price-value">
|
||||
<dt><dl>Exchange Rate to 1 CHF:</dl></dt></td>
|
||||
<td scope="col" class="price-value">
|
||||
<dt><dl>{{ exchange_rate }}</dl></dt>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<form id="checkout_form" action="{% url 'cart' %}" method="POST">
|
||||
{% csrf_token %}
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
<th scope="col">NAME</th>
|
||||
<th scope="col">STOCK</th>
|
||||
<th scope="col">AMOUNT</th>
|
||||
<th scope="col" class="price-label">PRICE p.pce.</th>
|
||||
<th scope="col" class="price-label">POSITION PRICE</th>
|
||||
</tr>
|
||||
{% for order_position, price, pos_price in order_position_list_zip %}
|
||||
|
@ -36,12 +37,16 @@
|
|||
<td scope="col">{{ order_position.article.stock }}</td>
|
||||
<td scope="col">{{ order_position.amount }}</td>
|
||||
<td scope="col" class="price-value">
|
||||
{{ price }} {{ currency_name }}
|
||||
{{ price }}
|
||||
{{ currency_name }}
|
||||
</td>
|
||||
<td scope="col" class="price-value">
|
||||
{{ pos_price }} {{ currency_name }}
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td scope="col" colspan="4"class="text-right">
|
||||
<td scope="col" colspan="5"class="text-right">
|
||||
<td scope="col" class="price-value">
|
||||
<dl><dt>Total:</dl></dt></td>
|
||||
<td scope="col" class="price-value">
|
||||
|
|
|
@ -397,13 +397,11 @@ def checkout(request):
|
|||
order = Order.objects.create(user=request.user,
|
||||
status=orderstatus)
|
||||
for position in cart_positions:
|
||||
article = Article.objects.get(pk=position.article.id)
|
||||
OrderPosition.objects.create(
|
||||
article=position.article,
|
||||
order=order,
|
||||
amount=position.amount,
|
||||
price_in_chf=article.price_in_chf * Decimal.from_float(
|
||||
position.amount)
|
||||
price_in_chf=position.article.price_in_chf
|
||||
)
|
||||
return HttpResponseRedirect('/order/%s/' % order.id)
|
||||
|
||||
|
@ -416,12 +414,10 @@ def checkout(request):
|
|||
'category_list': category_list,
|
||||
'message': message,
|
||||
'person': person,
|
||||
'exchange_rate': exchange_rate,
|
||||
})
|
||||
|
||||
|
||||
def order(request, order_id):
|
||||
category_list = get_categories()
|
||||
price_list = []
|
||||
totalprice_list = []
|
||||
order_position_list_zip = []
|
||||
|
@ -452,13 +448,14 @@ def order(request, order_id):
|
|||
price = round(
|
||||
rate.exchange_rate_to_chf * order_position.price_in_chf,
|
||||
2)
|
||||
currency_name = order.exchange_rate.name
|
||||
currency_name = order.exchange_rate
|
||||
else:
|
||||
currency_name = 'CHF'
|
||||
price = order_position.price_in_chf
|
||||
position_price = price * Decimal.from_float(order_position.amount)
|
||||
order_position_list[idx] = order_position
|
||||
price_list.append(price)
|
||||
totalprice_list.append(price)
|
||||
totalprice_list.append(position_price)
|
||||
total = sum(totalprice_list)
|
||||
order_position_list_zip = zip(order_position_list,
|
||||
price_list,
|
||||
|
@ -468,5 +465,4 @@ def order(request, order_id):
|
|||
'order_position_list_zip': order_position_list_zip,
|
||||
'total': total,
|
||||
'currency_name': currency_name,
|
||||
'category_list': category_list,
|
||||
})
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
month = {{01}},
|
||||
note = {{\url{https://github.com/django-extensions/django-extensions}}},
|
||||
Urldate = {2018-01-05},
|
||||
author = {{django-extensions}},
|
||||
author = {django-extensions},
|
||||
title = {{Django Extensions Source Code}},
|
||||
year = {2018},
|
||||
}
|
||||
|
|
254
docs/doku.org
|
@ -57,7 +57,7 @@ steht unter einer GPLv3\footcite{gplv3} Lizenz. Dadurch darf die
|
|||
Arbeit unter Einhaltung der Regeln der GPLv3 kopiert und
|
||||
weiterverarbeitet werden.
|
||||
|
||||
* Projektanalyse und Planung
|
||||
* TODO Projektanalyse und Planung
|
||||
** Projektziele
|
||||
|
||||
Der Student erarbeitet in einer Zweiergruppe einen selbst entwickelten
|
||||
|
@ -118,19 +118,6 @@ geeignet erscheinenden Frameworks. Jede noch so kleine Zeiteinsparung
|
|||
durch vorgefertigte Entwicklungen werden angenommen und dennoch wollen
|
||||
wir keine fertigen Software Produkte einsetzen.
|
||||
|
||||
Um einen ersten Anhaltspunkt zu haben, haben wir ein Mindmap
|
||||
gezeichnet in welchem wir unsere ersten Ideen erfassten. Zusehen ist
|
||||
dies in der Abbildung([[fig:mindmap]]).
|
||||
|
||||
#+LATEX:\newpage
|
||||
#+LATEX:\begin{landscape}
|
||||
#+CAPTION: Mindmap
|
||||
#+ATTR_LATEX: :height.9\textwidth
|
||||
#+NAME: fig:mindmap
|
||||
[[file:diagrammes/mindmap/webshop.png]]
|
||||
#+LATEX:\end{landscape}
|
||||
#+LATEX:\newpage
|
||||
|
||||
** SWOT-Analyse
|
||||
|
||||
Die SWOT-Analyse ist eine Methode, die Stärken, Schwächen, Chancen und
|
||||
|
@ -230,7 +217,7 @@ Abbildung:(\ref{fig:swot}) zu sehen.
|
|||
\item Der Kunde vertraut uns und die Beziehung ist gut.
|
||||
Diese Ausgangslage mag helfen interne Schwächen durch
|
||||
offene Kommunikation zu übergehen.
|
||||
\end{itemize}}
|
||||
\end{itemize}
|
||||
};
|
||||
\node[
|
||||
any,
|
||||
|
@ -242,7 +229,7 @@ Abbildung:(\ref{fig:swot}) zu sehen.
|
|||
\item Die Implementierung von Währungsänderungen ist
|
||||
nicht trivial. Der Zeitpunkt zu dem die Kosten
|
||||
eines Produktes sich ändert, muss gut durchdacht werden.
|
||||
\end{itemize}}
|
||||
\end{itemize}
|
||||
};
|
||||
\node[
|
||||
any,
|
||||
|
@ -294,7 +281,7 @@ Abbildung:([[fig:umweltgrafik]]) grafisch dargestellt.
|
|||
| | | | - Viele Arbeitsschritte automatisieren | mittel |
|
||||
|-------+----------------------+----------------------+-----------------------------------------------+----------------------------------------------|
|
||||
| 3. | Interessenten | gering | - Intuitiv bedienbare Webseite | hoch |
|
||||
| | | | - schnell finden, was gesucht wird. | hoch |
|
||||
| | | | - schnell finden, was gesucht wird. | hoch |
|
||||
|-------+----------------------+----------------------+-----------------------------------------------+----------------------------------------------|
|
||||
| 4. | Projektleiter | hoch | - Gutes innovatives Produkt erschaffen. | mittel |
|
||||
| | | | - Anerkennung im fachlichen Umfeld | hoch |
|
||||
|
@ -310,7 +297,7 @@ Abbildung:([[fig:umweltgrafik]]) grafisch dargestellt.
|
|||
*** Risikobeschreibung
|
||||
|
||||
#+CAPTION: Risikobeschreibung
|
||||
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{0.8cm}|p{5cm}|p{5cm}|p{0.8cm}|p{0.8cm}| :placement [H]
|
||||
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{0.8cm}|p{5cm}|p{5cm}|p{0.8cm}|p{0.8cm}|
|
||||
#+NAME: tab:risikobeschreibung
|
||||
|------------+--------------------------------+--------------------------------+-------------------------------+-------------------------------|
|
||||
| <10> | <30> | <30> | | |
|
||||
|
@ -352,14 +339,9 @@ Abbildung:([[fig:umweltgrafik]]) grafisch dargestellt.
|
|||
#+NAME: fig:risk
|
||||
[[file:diagrammes/risk_analysis.eps]]
|
||||
|
||||
** Projektabgrenzung
|
||||
** TODO Projektabgrenzung
|
||||
|
||||
Der Webshop wird nur zum Teil aufgebaut. Funktionen wie die Bezahlung
|
||||
, das Versenden von Email Benachrichtigungen und einen automatisierte
|
||||
Aktualisierung der Warenbestände sind nicht Teil der Umsetzung.
|
||||
Aufgrund des hohen Mehraufwandes der für die Umsetzung nötig gewesen
|
||||
wäre, ist es zur Zeit nur möglich einen Artikel einem Bild zuzuweisen
|
||||
und nicht die Bilder direkt auf dem Aritkel hochzuladen.
|
||||
Am Ende des Projekts die nicht lauffähigen Teile ausgrenzen. :-)
|
||||
|
||||
* Projektmanagement
|
||||
** Organigramm
|
||||
|
@ -399,6 +381,7 @@ und nicht die Bilder direkt auf dem Aritkel hochzuladen.
|
|||
\end{figure}
|
||||
#+END_EXPORT
|
||||
|
||||
** Projektstrukturplan
|
||||
** Varianten
|
||||
|
||||
Wir haben uns 3 mögliche Varianten in Bezug auf die zu
|
||||
|
@ -445,7 +428,6 @@ zu können.
|
|||
| Lernfaktor | 5 | 10 | 6 | 30 |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *Total* | | | | 141 |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
#+TBLFM: @3$5=@3$2 * @3$4::@4$5=@4$2 * @4$4::@5$5=@5$2 * @5$4::@6$5=@6$2 * @6$4::@7$5=@7$2 * @7$4::@8$5=@8$2 * @8$4
|
||||
#+TBLFM: @9$5=@9$2 * @9$4
|
||||
#+TBLFM: @10$5=vsum(@3$5..@9$5)
|
||||
|
@ -482,7 +464,6 @@ anderen Varianten jedoch auf jeden Fall weniger.
|
|||
| Lernfaktor | 5 | 10 | 4 | 20 |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *Total* | | | | 161 |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
#+TBLFM: @3$5=@3$2 * @3$4::@4$5=@4$2 * @4$4::@5$5=@5$2 * @5$4::@6$5=@6$2 * @6$4::@7$5=@7$2 * @7$4::@8$5=@8$2 * @8$4
|
||||
#+TBLFM: @9$5=@9$2 * @9$4
|
||||
#+TBLFM: @10$5=vsum(@3$5..@9$5)
|
||||
|
@ -519,7 +500,6 @@ als eher niedrig eingestuft dafür den Lernfaktor umso höher.
|
|||
| Lernfaktor | 5 | 10 | 8 | 40 |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *Total* | | | | 196 |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
#+TBLFM: @3$5=@3$2 * @3$4::@4$5=@4$2 * @4$4::@5$5=@5$2 * @5$4::@6$5=@6$2 * @6$4::@7$5=@7$2 * @7$4::@8$5=@8$2 * @8$4
|
||||
#+TBLFM: @9$5=@9$2 * @9$4
|
||||
#+TBLFM: @10$5=vsum(@3$5..@9$5)
|
||||
|
@ -534,7 +514,7 @@ Erstellen der Case Study verwendet wurden und erklären, wenn möglich
|
|||
auch, weshalb wir uns dafür entschieden haben.
|
||||
|
||||
#+CAPTION: Variantenbewertung Ergebnis
|
||||
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{4.5cm}|r| :placement [H]
|
||||
#+ATTR_LATEX: :align |>{\columncolor[HTML]{EFEFEF}}p{4.5cm}|r|
|
||||
#+NAME: tab:result
|
||||
|------------------------------------+-----------------------------------------------|
|
||||
| *Variante*\cellcolor[HTML]{C0C0C0} | *Erreichte Punktzahl*\cellcolor[HTML]{C0C0C0} |
|
||||
|
@ -542,109 +522,11 @@ auch, weshalb wir uns dafür entschieden haben.
|
|||
| ASP.NET und SQL Server | 141 |
|
||||
| PHP und MySQL | 161 |
|
||||
| Django und MariaDB | 196 |
|
||||
|------------------------------------+-----------------------------------------------|
|
||||
|
||||
#+LATEX:\newpage
|
||||
#+LATEX:\begin{landscape}
|
||||
** Zeitplanung
|
||||
** Architektur vorbereiten
|
||||
** Arbeitspakete definieren
|
||||
|
||||
In der Tabelle:([[tab:time]]) ist die Zeitplanung für das Projekt zu
|
||||
sehen. Die einzelnen Phasen wurden dabei gegenüber ihren Subtasks hervorgehoben.
|
||||
|
||||
#+CAPTION: Variantenbewertung Ergebnis
|
||||
#+NAME: tab:time
|
||||
#+ATTR_LATEX: :environment longtable :align |r|l|l|l|r|r|
|
||||
|------------+----------------------------------------------------+------------+------------+------------+------------|
|
||||
| <10> | | <10> | <10> | <10> | <10> |
|
||||
| *ID*\cellcolor[HTML]{C0C0C0} | *Subject*\cellcolor[HTML]{C0C0C0} | *Type*\cellcolor[HTML]{C0C0C0} | *Status*\cellcolor[HTML]{C0C0C0} | *Estimated time*\cellcolor[HTML]{C0C0C0} | *Spent time*\cellcolor[HTML]{C0C0C0} |
|
||||
|------------+----------------------------------------------------+------------+------------+------------+------------|
|
||||
| *201* | *Projektanalyse und Planung* | *Phase* | *Closed* | | |
|
||||
| 202 | Projektziele | Task | Closed | 1 | 0.5 |
|
||||
| 203 | Vision | Task | Closed | 1 | 0.5 |
|
||||
| 204 | SWOT-Analyse | Task | Closed | 3 | 0.5 |
|
||||
| 205 | Umweltanalyse | Task | Closed | 3 | 1.5 |
|
||||
| 206 | Risikomanagement | Task | Closed | 2 | 2.5 |
|
||||
| 207 | Projektabgrenzung | Task | Closed | 2 | 2 |
|
||||
| 259 | Meeting 1 | Milestone | Closed | 3 | 6 |
|
||||
| 200 | Kickoff | Milestone | Closed | 4 | 8 |
|
||||
| 301 | Meeting 2 | Milestone | Closed | 3 | 3 |
|
||||
| 306 | Meeting 3 | Milestone | Closed | 1.5 | 3 |
|
||||
| 313 | Meeting 4 | Milestone | Closed | 1 | 1 |
|
||||
| 314 | Meeting 5 | Milestone | Closed | 1 | 1 |
|
||||
| *208* | *Projektmanagement* | *Phase* | *Closed* | | |
|
||||
| 218 | Architektur vorbereiten | Phase | Closed | | |
|
||||
| 219 | Architektur Grafik | Task | Rejected | 6 | 0 |
|
||||
| 220 | Use Case Grafiken | Task | Closed | 6 | 3 |
|
||||
| 221 | User Stories | Task | Closed | 1 | 1 |
|
||||
| 310 | Use Case Beschreibungen | Task | Closed | 10 | 9 |
|
||||
| 254 | Test Cases benennen | Task | Closed | 10 | 10 |
|
||||
| 222 | Organigramm | Task | Closed | 0.5 | 0.5 |
|
||||
| 223 | Projektstrukturplan | Task | Closed | 1.5 | 1.5 |
|
||||
| 224 | Arbeitspakete definieren | Task | Closed | 4 | 1 |
|
||||
| *225* | *Datenbank* | *Phase* | *Closed* | | |
|
||||
| 226 | Anforderungsanalyse | Task | Closed | 0.5 | 0 |
|
||||
| 227 | Relationen Model | Task | Closed | 2 | 0.5 |
|
||||
| 228 | Relationen Diagramm | Task | Closed | 4 | 5.25 |
|
||||
| 229 | SQL Create DB | Task | Closed | 0.5 | 0.5 |
|
||||
| 230 | SQL Insert Testdaten | Task | Closed | 10 | 7 |
|
||||
| 231 | SQL Restriktionen erarbeiten | Task | Rejected | 0.5 | 0.1 |
|
||||
| 232 | SQL Views erstellen | Task | Rejected | 2 | 0.1 |
|
||||
| 233 | SQL Prozeduren und Funktionen erarbeiten | Task | Rejected | 2 | 0.1 |
|
||||
| 304 | SQL Create Tables | Task | Rejected | 2 | 0.1 |
|
||||
| *234* | *Benutzerinterface* | *Phase* | *Closed* | | |
|
||||
| 235 | Mockup skizzieren | Task | Closed | 1 | 1 |
|
||||
| *236* | *Frontend* *Umsetzung* | *Phase* | *Closed* | | |
|
||||
| 237 | Login | Task | Closed | 0.5 | 2.75 |
|
||||
| 315 | BUG: Eine zu lange Strassenummer wirf einen Fehler | Task | Closed | 0.5 | 0.25 |
|
||||
| 238 | Artikel | Task | Closed | | 0.25 |
|
||||
| 312 | BUG, Preise können negativ sein. | Task | Closed | | 0.25 |
|
||||
| 239 | Artikelliste | Task | Closed | 5 | 5 |
|
||||
| 240 | Warenkorb | Task | Closed | 5 | 12 |
|
||||
| 241 | Checkout | Task | Closed | 5 | 5 |
|
||||
| *242* | *Backend* *Umsetzung* | *Phase* | *Closed* | | |
|
||||
| 243 | Login | Task | Closed | 5 | 5 |
|
||||
| 244 | Artikel | Task | Closed | 5 | 1 |
|
||||
| 247 | Artikelliste | Task | Closed | 2.5 | 0.5 |
|
||||
| 302 | Artikel Erstellung | Task | Closed | 2.5 | 0.5 |
|
||||
| 245 | Kategorien | Task | Closed | 5 | 1 |
|
||||
| 248 | Kategorie Liste | Task | Closed | 2.5 | 0.5 |
|
||||
| 303 | Kategorie erstellen | Task | Closed | 2.5 | 0.5 |
|
||||
| 246 | Artikel Attributte | Task | Closed | 4 | 1.5 |
|
||||
| 249 | Atributt Liste | Task | Rejected | 1 | 0 |
|
||||
| 305 | Bilder hochladen | Task | Closed | 3 | 1.5 |
|
||||
| 250 | Kunden Liste | Task | Closed | 1 | 0.5 |
|
||||
| 308 | Models | Task | Closed | 3 | 5 |
|
||||
| 309 | Währungskurse | Task | Closed | 5 | 18 |
|
||||
| *252* | *Testing* | *Phase* | *Closed* | | |
|
||||
| 255 | Test Cases Durchführung | Task | Closed | 10 | 10 |
|
||||
| 257 | Dokumentations Styling | Task | Closed | 2 | 2.5 |
|
||||
| 258 | Präsentation | Milestone | In progress | 2 | 0 |
|
||||
| 263 | Vorprojekt | Task | Closed | 28.25 | 35.5 |
|
||||
| *209* | *Tools* *vorbereiten* | *Phase* | *Closed* | | |
|
||||
| 210 | GIT-Workspace | Task | Closed | 0.5 | 0.5 |
|
||||
| 211 | Development Container | Task | Closed | 2 | 7.25 |
|
||||
| 261 | Domain reservieren | Task | Closed | 0.25 | 0.25 |
|
||||
| 262 | Produktions Server aufsetzen | Task | Closed | 2 | 4 |
|
||||
| *212* | *Technologien* *abklären* | *Phase* | *Closed* | | |
|
||||
| 213 | C# | Task | Closed | 1 | 1 |
|
||||
| 214 | Django | Task | Closed | 5 | 5 |
|
||||
| 215 | MariaDB | Task | Closed | 0.5 | 0.5 |
|
||||
| 216 | SQL Server | Task | Closed | 1 | 1 |
|
||||
| 217 | Laravel | Task | Closed | 5 | 5 |
|
||||
| 316 | MySQL | Task | Closed | 1 | 1 |
|
||||
| 264 | Architektur Tests | Task | Closed | 6 | 6 |
|
||||
| 307 | Machbarkeitsanalyse | Task | Closed | 2 | 2 |
|
||||
| 251 | Varianten Erarbeiten | Task | Closed | 2 | 2 |
|
||||
| 265 | Abgabetermin | Milestone | Scheduled | 0.5 | 0 |
|
||||
| 266 | Zwischenbericht ablieferen | Task | Closed | 0.5 | 0 |
|
||||
|------------+----------------------------------------------------+------------+------------+------------+------------|
|
||||
| *Total* | | | | 218.50 | 214.65 |
|
||||
|------------+----------------------------------------------------+------------+------------+------------+------------|
|
||||
#+TBLFM: @>$5=vsum(@3..@-1);%.2f
|
||||
#+TBLFM: @>$6=vsum(@3..@-1);%.2f
|
||||
#+LATEX:\end{landscape}
|
||||
|
||||
* Umsetzung
|
||||
* TODO Umsetzung
|
||||
** Werkzeuge
|
||||
|
||||
Während dem Erstellen dieser Arbeit wurde eine Vielzahl an Werkzeugen
|
||||
|
@ -834,11 +716,11 @@ LaTeX ist freie Software unter der LaTeX Project Public License.
|
|||
Die Grafiken in diesem Dokument wurden hauptsächlich mit dem Vektor
|
||||
Grafik Editor Inkscape\footcite{inkscape} erstellt. Inkscape ist freie
|
||||
Software unter der GNU Public License v3. Für das Entity Relation
|
||||
Diagramm in [[Models]] haben wir jedoch Dia\footcite{dia} verwendet. Dia
|
||||
Diagramm in [[Modells]] haben wir jedoch Dia\footcite{dia} verwendet. Dia
|
||||
ist freie Software unter der GNU Public License v2.
|
||||
|
||||
Die Klassendiagramme haben wir mit der Django Erweiterung
|
||||
"Django-Extensions"\footcite{djangoextensions} erstellt.
|
||||
"Django-Extensions"\footcite{django_extensions} erstellt.
|
||||
Django-Extensions ist freie Software unter der MIT Lizenz.
|
||||
|
||||
** Spezifikation
|
||||
|
@ -939,17 +821,17 @@ ausprogrammiert haben. Die gesamte Liste an Use Cases sieht wie folgt
|
|||
aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
||||
|
||||
#+LATEX: {\footnotesize
|
||||
| - [[tab:browse_article][1.0 Artikel durchstöbern]] | - Kategorie erfassen (Admin Funktion) |
|
||||
| - [[tab:registration][2.0 Registration]] | - Kategorie ändern (Admin Funktion) |
|
||||
| - [[tab:login][2.1 User Login]] | - Kategorie löschen (Admin Funktion) |
|
||||
| - [[*Artikel durchst%C3%B6bern][1.0 Artikel durchstöbern]] | - Kategorie erfassen (Admin Funktion) |
|
||||
| - [[Registration][2.0 Registration]] | - Kategorie ändern (Admin Funktion) |
|
||||
| - [[User Login][2.1 User Login]] | - Kategorie löschen (Admin Funktion) |
|
||||
| - User Profil ansehen | - Bild hochladen (Admin Funktion) |
|
||||
| - [[tab:cart][3.0 Artikel in Warenkorb legen]] | - Bild ändern (Admin Funktion) |
|
||||
| - [[tab:currency][3.1 Währung ändern]] | - Bild löschen (Admin Funktion) |
|
||||
| - [[Artikel in Warenkorb legen][3.0 Artikel in Warenkorb legen]] | - Bild ändern (Admin Funktion) |
|
||||
| - [[W%C3%A4hrung %C3%A4ndern][3.1 Währung ändern]] | - Bild löschen (Admin Funktion) |
|
||||
| - Währung aktualisieren (Admin Funktion) | - Bestellung erfassen (Admin Funktion) |
|
||||
| - [[tab:checkout][3.2 Checkout]] | - [[tab:change_order][7.0 Bestellung ändern/korrigieren (Admin Funktion)]] |
|
||||
| - [[tab:password][4.0 User Passwort ändern (Admin Funktion)]] | - Bestellung löschen (Admin Funktion) |
|
||||
| - [[tab:create_article][5.0 Artikel erfassen (Admin Funktion)]] | - [[tab:max_pictures][6.0 max_pictures Option anpassen (Admin Funktion)]] |
|
||||
| - [[tab:create_article][5.1 Artikel ändern (Admin Funktion)]] | - max_pictures Option deaktivieren (Admin Funktion) |
|
||||
| - [[Checkout][3.2 Checkout]] | - [[Bestellung %C3%A4ndern/korrigieren][7.0 Bestellung ändern/korrigieren (Admin Funktion)]] |
|
||||
| - [[User Passwort %C3%A4ndern][4.0 User Passwort ändern (Admin Funktion)]] | - Bestellung löschen (Admin Funktion) |
|
||||
| - [[Artikel erfassen][5.0 Artikel erfassen (Admin Funktion)]] | - [[max_pictures Option anpassen][6.0 max_pictures Option anpassen (Admin Funktion)]] |
|
||||
| - [[Artikel %C3%A4ndern][5.1 Artikel ändern (Admin Funktion)]] | - max_pictures Option deaktivieren (Admin Funktion) |
|
||||
| - Artikel löschen (Admin Funktion) | - User erfassen (Admin Funktion) |
|
||||
| - Materialbestellung erfassen (Admin Funktion) | - User/Personen Daten ändern (Admin Funktion) |
|
||||
| - Materialbestellung ändern/korrigieren (Admin Funktion) | - User löschen (Admin Funktion) |
|
||||
|
@ -959,8 +841,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
| - Stadt löschen (Admin Funktion) | |
|
||||
#+LATEX:}
|
||||
|
||||
#+latex:\newpage
|
||||
*1.0 Artikel durchstöbern*
|
||||
***** Artikel durchstöbern
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use 1.0 Artikel durchstöbern
|
||||
|
@ -1000,7 +881,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*2.0 Registration*
|
||||
***** Registration
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 2.0 Registration
|
||||
|
@ -1046,7 +927,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*2.1 User Login*
|
||||
***** User Login
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 2.1 User Login
|
||||
|
@ -1090,7 +971,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*3.0 Artikel in Warenkorb legen*
|
||||
***** Artikel in Warenkorb legen
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 3.0 Artikel in Warenkorb legen
|
||||
|
@ -1132,7 +1013,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*3.1 Währung ändern*
|
||||
***** Währung ändern
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 3.1 Währung ändern
|
||||
|
@ -1171,7 +1052,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*3.2 Checkout*
|
||||
***** Checkout
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 3.2 Checkout
|
||||
|
@ -1217,7 +1098,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*4.0 User Passwort ändern*
|
||||
***** User Passwort ändern
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: 4.0 User Passwort ändern
|
||||
|
@ -1267,7 +1148,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*5.0 Artikel erfassen*
|
||||
***** Artikel erfassen
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: 5.0 Artikel erfassen
|
||||
|
@ -1316,7 +1197,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*5.1 Artikel ändern*
|
||||
***** Artikel ändern
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: 5.1 Artikel ändern
|
||||
|
@ -1358,7 +1239,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*6.0 max_pictures Option anpassen*
|
||||
***** max_pictures Option anpassen
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 6.0 max_pictures Option anpassen
|
||||
|
@ -1406,7 +1287,7 @@ aus, die Use Cases mit den Nummern wurden dabei im Detail ausgearbeitet:
|
|||
|---------------------+--------------------------------|
|
||||
#+LATEX:}
|
||||
|
||||
*7.0 Bestellung ändern/korrigieren*
|
||||
***** Bestellung ändern/korrigieren
|
||||
|
||||
#+LATEX:{\footnotesize
|
||||
#+CAPTION: Use Case 7.0 Bestellung ändern/korrigieren
|
||||
|
@ -1752,14 +1633,6 @@ User speichern. Man sollte im Profil jedoch nur Daten speichern, welche
|
|||
nicht sicherheitsrelevant sind. Der Nachteil dieser Variante ist, dass
|
||||
die Datenbank mit zusätzlichen Anfragen belastet werden kann.
|
||||
|
||||
Wir haben uns hier auch dazu entschieden nur Einkäufe nach erfolgter
|
||||
Registrierung zu erlauben. Dies einerseits weil wir sowieso bereits
|
||||
eine "One-to-One" Beziehung zwischen einem User und einer Person
|
||||
ermöglichen. Zum anderen da es auch aus Sicht der Shop Betreiber,
|
||||
Kunden die bereits einen Account haben kommen öfters wieder, wie auch
|
||||
aus Sicht der Kunden, ein Account kann einem viele Vorteile bringen
|
||||
wie etwa einfachere Garantieabwicklung oder Bestellungsübersichten,
|
||||
absolut Sinn macht.
|
||||
#+ATTR_LATEX: :width 9cm :placement [H]
|
||||
#+CAPTION: Klassenmodell für Personen
|
||||
#+NAME: fig:person
|
||||
|
@ -1816,9 +1689,8 @@ vereinfacht in 3 Bereiche:
|
|||
Submodule wie Categories oder Warenkorb beinhaltet.
|
||||
2. Ein Backend, welches zum Bearbeiten/Erstellen von Produkten dient.
|
||||
3. Currencies, die täglich abgeholt werden
|
||||
#+LATEX:\newpage
|
||||
|
||||
** Testing
|
||||
** TODO Testing
|
||||
|
||||
Um die Funktionalität des Webshops sicherzustellen, haben wir die
|
||||
Applikation kontinuierlich gemäss den Testfällen unter [[Testfälle]]
|
||||
|
@ -1849,7 +1721,7 @@ dazugehörige Funktionen korrekt funktionieren.
|
|||
#+LATEX:\newpage
|
||||
#+LATEX:\begin{landscape}
|
||||
|
||||
*** Testfälle
|
||||
*** NEXT Testfälle
|
||||
|
||||
Alle Testfälle werden von der Index Seite aus gestartet.
|
||||
Dies wird in den Test Cases nicht noch einmal explizit erwähnt. Die
|
||||
|
@ -1885,9 +1757,9 @@ entdeckt.
|
|||
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *TC-10* | Währung ändern | - | 1. Auf das Dropdown "Currencies" klicken.\newline 2. Den Eintrag "EUR" auswählen.\newline 3. Auf den Button "Select" klicken. | - | Die Artikel Preise werden in Euro angezeigt. | Die Index Seite wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *TC-11* | Checkout | TC-09\newline ausgeführt | 1. Auf den Button "CHECKOUT" klicken.\newline 2. Die TOS annehmen.\newline 3. Auf den "Order" Button klicken. | - | Die Bestellung wird gespeichert. | Die Bestellbestätigung wird angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. |
|
||||
| *TC-11* | Checkout | TC-09\newline ausgeführt | | | | | Erfolgreich durchgeführt 19.02.2018 I.H. |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *TC-12* | Checkout | TC-09\newline ausgeführt | 1. Auf den Button "CHECKOUT" klicken.\newline 2. Auf den "Cancel" Button klicken. | - | Die Bestellung wird nicht ausgeführt. | Der Warenkorb wird wieder angezeigt. | Erfolgreich durchgeführt 19.02.2018 I.H. |
|
||||
| *TC-12* | Checkout | TC-09\newline ausgeführt | | | | | Erfolgreich durchgeführt 19.02.2018 I.H. |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
| *TC-13* | Artikel erfassen | - | 1. Die URL http://localhost:8000/admin aufrufen.\newline 2. Userdaten eingeben.\newline 3. Neben "Articles" auf "+ Add" klicken.\newline 4. Artikel Daten eingeben.\newline 5. Auf den "SAVE" Button klicken. | Username: admin\newline Password: password\newline Name: Test Artikel\newline Description: Test Description\newline Stock: 10\newline Status: active\newline Price in chf: 23 | Der Artikel wird in der Datenbank gespeichert. | Die Artikelliste wird mit dem Artikel "Test Artikel" angezeigt. | Erfolgreich durchgeführt 19.02.2018 A.Z. |
|
||||
|----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------|
|
||||
|
@ -1907,59 +1779,9 @@ entdeckt.
|
|||
|
||||
* Fazit
|
||||
** Projektmanagement
|
||||
|
||||
Eine sorgfälltige Planung ist wichtig um ein Projekt erfolgreich zum
|
||||
Abschluss zu bringen. Insbesondere wenn es im Projekt gewisse
|
||||
Unbekannte gibt hilft einem eine gute Planung das Ziel nicht aus den
|
||||
Augen zu verlieren.
|
||||
|
||||
Eine gute Planung ist auch für die Kommunikation im Team wichtig damit
|
||||
jeder Projektmitarbeiter den aktuellen Stand kennt, weiss was geplannt
|
||||
ist und welche Schritte als nächstes gemacht werden müssen.
|
||||
|
||||
Eine gutes Beispiel für diese Kommunikation ist ein Missverständiss dass
|
||||
Zwischen Andreas und Ivan entstand als die Positionen in der Bestellung
|
||||
das erste mal abgefragt wurden. Ivan hatte den preis in CHF pro Stück abgelegt
|
||||
und Andreas hatte die Summe der Stückzahl mal Preis in CHF erwaret.
|
||||
Das fürte zu verwirrung als die Positionen plötzlich x-fach teurer Angezeigt
|
||||
wurden als sie Gekauft wurden.
|
||||
|
||||
** Umsetzung
|
||||
|
||||
Ein Framework ist nahezu immer eine komplexe Angelegenheit und braucht
|
||||
viel Einarbeitungszeit wenn man sich zuvor noch nie damit beschäftigt
|
||||
hat. Dabei macht es nicht einmal einen grossen Unterschied ob man die
|
||||
jeweilige Programmiersprache bereits kennt. Das Framework bringt in
|
||||
der Regel viele eigene Wege und Lösungen mit um Probleme anzugehen.
|
||||
|
||||
Wir haben jedoch festgestellt das eine Framework eine grosse Hilfe
|
||||
sein kann, bei Aufgaben welche immer wieder kommen. Zusätzlich
|
||||
empfanden wir es als sehr angenehm uns nicht gross mit der Datenbank
|
||||
auseinander setzen zu müssen. Leider kann ein Framework das
|
||||
Sprachenchaos bei einer Webanwendung nur bedingt vereinfachen da man
|
||||
am Schluss dann doch immer mindestens drei Sprachen einsetzt.
|
||||
|
||||
** Gelerntes
|
||||
|
||||
Wir haben bei dieser Case Study einmal mehr gemerkt das eine gute
|
||||
Vorbereitung und Planung in einem Projekt von grosser Wichtigkeit ist.
|
||||
Spezifikationen sollten früh ausgearbeitet werden und auch konstant
|
||||
nachgeführt werden damit man im Team immer auf dem gleichen
|
||||
Wissensstand ist und von der gleichen Sache redet.
|
||||
|
||||
Im Bezug auf die Umsetzung haben wir die Vorzüge eines Systems wie
|
||||
Vagrant schätzen gelernt welches jedem Entwickler die gleiche Umgebung
|
||||
zur Verfügung stellt. Somit hatten wir nahezu nie das Problem, dass
|
||||
ein Code Update bei einem Entwickler nicht funktionierte und wenn es
|
||||
mal auftrat war es dann jeweils sehr schnell behoben.
|
||||
Zusätzlich haben wir gelernt das ein Framework zwar die Arbeit enorm
|
||||
vereinfachen kann aber durchaus auch seine Tücken hat und zuerst
|
||||
einmal verstanden werden muss bevor man es korrekt einsetzen kann.
|
||||
|
||||
Insgesamt war es eine sehr interessante Case Study bei welcher wir zum
|
||||
ersten Mal das Gefühl hatten das wir über eine genügende Wissensbasis
|
||||
verfügten um das Projekt in Angriff zu nehmen.
|
||||
|
||||
* TODO samples [to be deleted] :noexport:
|
||||
*** Subsubsection
|
||||
|
||||
|
|
Before Width: | Height: | Size: 64 KiB |
|
@ -1 +0,0 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0" version="8.4.6" editor="www.draw.io" type="device"><diagram id="08cd9217-de5f-1429-298d-04c22af63481" name="Page-1">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</diagram></mxfile>
|
Before Width: | Height: | Size: 157 KiB |
Before Width: | Height: | Size: 159 KiB |
Before Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 251 KiB |
Before Width: | Height: | Size: 598 KiB |
Before Width: | Height: | Size: 68 KiB |
|
@ -1 +0,0 @@
|
|||
<mxfile userAgent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0" version="8.4.0" editor="www.draw.io" type="device"><diagram id="283ea62a-d2dd-6ffc-9a9e-c1de98e88eac" name="Page-1">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</diagram></mxfile>
|
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 374 KiB |
|
@ -1,153 +0,0 @@
|
|||
#+TITLE: Case-Study
|
||||
#+AUTHOR: Ivan Hörler und Andreas Zweili
|
||||
#+OPTIONS: toc:1 num:nil
|
||||
#+REVEAL_TRANS: linear
|
||||
#+REVEAL_THEME: solarized
|
||||
#+REVEAL_ROOT: https://cdn.jsdelivr.net/reveal.js/3.0.0/
|
||||
#+LANGUAGE: de
|
||||
|
||||
* Ausgangslage
|
||||
- Webshop erstellen
|
||||
- Währungsumrechnung CHF zu ...
|
||||
- Freie Software in Bezug auf Open-Source Code.
|
||||
|
||||
** Vision
|
||||
Die Vision wurde anhand eines Mindmaps erstmals grob umfasst:
|
||||
|
||||
#+ATTR_HTML: :width 70%
|
||||
[[file:pictures/webshop.png]]
|
||||
|
||||
** Vision - Artikel
|
||||
|
||||
#+ATTR_HTML: :width 80%
|
||||
[[file:pictures/Vision-Artikel.png]]
|
||||
|
||||
** Vision - Warenkorb
|
||||
|
||||
#+ATTR_HTML: :width 80%
|
||||
[[file:pictures/Vision-Warenkorb.png]]
|
||||
|
||||
* Varianten
|
||||
|
||||
** ASP.NET (C#) und SQL Server
|
||||
|
||||
[[file:pictures/csharp.png]]
|
||||
|
||||
** Laravel (PHP) und MySQL
|
||||
|
||||
[[file:pictures/laravel.png]]
|
||||
|
||||
** Django und MariaDB
|
||||
|
||||
[[file:pictures/django.png]]
|
||||
|
||||
** Kriterien
|
||||
- Freie Software
|
||||
- Cross Plattform nutzbar
|
||||
- Lesbarkeit des Codes
|
||||
- Einfachheit des Setups
|
||||
- Ohne spezielle Tools nutzbar
|
||||
- Vorkenntnisse und Lernfaktor
|
||||
|
||||
** Vergleich
|
||||
|
||||
|------------------------+-------------------------------|
|
||||
| *Variante* | *Erreichte Punktzahl von 235* |
|
||||
|------------------------+-------------------------------|
|
||||
| ASP.NET und SQL Server | 141 |
|
||||
| Laravel und MySQL | 161 |
|
||||
| Django und MariaDB | 196 |
|
||||
|------------------------+-------------------------------|
|
||||
|
||||
* Kosten
|
||||
|
||||
** Tools
|
||||
|
||||
- Ausgaben während der Case-Study: 0.00 CHF
|
||||
- 100% freie Software
|
||||
- "Let's Encrypt" für SSL
|
||||
- "freenom.com" für Domain
|
||||
|
||||
** Laravel Webshop
|
||||
|
||||
| Sprache | Codezeilen |
|
||||
|---------+------------|
|
||||
| PHP | 8679 |
|
||||
|---------+------------|
|
||||
| *Total* | *8679* |
|
||||
|---------+------------|
|
||||
#+TBLFM: @>$2=vsum(@2..@-1);%.0f
|
||||
|
||||
** Django Webshop
|
||||
|
||||
| Sprache | Codezeilen |
|
||||
|---------+------------|
|
||||
| Python | 1460 |
|
||||
| SQL | 4639 |
|
||||
|---------+------------|
|
||||
| *Total* | *6099* |
|
||||
|---------+------------|
|
||||
#+TBLFM: @>$2=vsum(@2..@-1);%.0f
|
||||
|
||||
* Vorgehen
|
||||
** Currencies - App
|
||||
|
||||
- Wurde in Django als eigenen App entwickelt und sollte daher problemlos in andere Applikationen eingebunden werden können.
|
||||
- Die Quelle der Währungen ist die Schweizerische Nationalbank mit der URL:
|
||||
|
||||
https://www.snb.ch
|
||||
|
||||
https://www.snb.ch/selector/de/mmr/exfeed/rss
|
||||
|
||||
#+ATTR_HTML: :width 80%
|
||||
[[file:pictures/currencies-rss-reader.png]]
|
||||
|
||||
** Currencies - Quelle
|
||||
|
||||
[[file:pictures/currencies-rss-xml.png]]
|
||||
|
||||
** Currencies - Parsing
|
||||
|
||||
- Das Konvertieren des XML's wurde mit Python eigener Module gemacht.
|
||||
- für das Herunterladen des XML's wurde das Modul 'urllib' verwendet (1)
|
||||
- für das Parsen über die einzelnen items/nodes das Modul xml.etree.ElementTree. (2)
|
||||
|
||||
(1) https://docs.python.org/2/library/urllib.html
|
||||
|
||||
(2) https://docs.python.org/2/library/xml.etree.elementtree.html
|
||||
|
||||
** Currencies - Ablauf
|
||||
|
||||
#+ATTR_HTML: :width 55%
|
||||
[[file:pictures/currencies.png]]
|
||||
|
||||
** Infrastruktur
|
||||
|
||||
#+BEGIN_NOTES
|
||||
Andreas erzählt wie die infrastruktur aufgebaut ist.
|
||||
#+END_NOTES
|
||||
|
||||
#+ATTR_HTML: :width 90%
|
||||
[[file:pictures/Server-Architecture.png]]
|
||||
|
||||
** Programmierung
|
||||
|
||||
#+ATTR_HTML: :width 60%
|
||||
[[file:pictures/form.png]]
|
||||
|
||||
#+BEGIN_SRC python
|
||||
amount_form = CartForm(
|
||||
initial={'amount_form': cart_position.amount}
|
||||
)
|
||||
#+END_SRC
|
||||
|
||||
|
||||
* Fazit
|
||||
|
||||
- Trotz Model View Controll, SQL unerlässlich.
|
||||
- Vagrant (up, suspend, provision, destroy)
|
||||
- Git
|
||||
- Python/Django, JS brauchts trotzdem.
|
||||
|
||||
** Besten Dank für die Aufmerksahmkeit.
|
||||
Ivan & Andreas
|