Django html forms

Django, Flask, Bottle, WSGI, CGI…
Antworten
chrisfaaa
User
Beiträge: 4
Registriert: Mittwoch 8. November 2017, 18:24

Seid kurzem beschäftige ich mich mit dem Webframework Django, ich habe schon einige kleine Projekte umgesetzt und wollte mich an etwas größerem versuchen, aber leider komme ich an einer Stelle nicht weiter und die Such war bisher nicht vielversprechend.
Ich möchte auf einer Page einzelne Datensätze aus meiner Datenbank angezeigt bekommen und durch das anklicken dieser soll der Server eine Rückmeldung bekommen welcher der angezeigten Datensätze angeklickt wurde.
Ich nutze aktuell einige CSS Elemente von Materialize, aber das funktioniert auch noch nicht so gut wie ich das gern hätte.

Dies ist mein beispiel.html

Code: Alles auswählen

{% block content %}

<div class="row">
	{% for data in persenal_data %}
  		<form action= "{% url 'main:beispiel' %}" method="POST">	{% csrf_token %}
    			<button class="col s10 m6 14" type="submit" > # value = data.id 
      				<div class="card">
      					<div class="card hoverable">
          					<div class="card-content">
            						<div class="card-title">{{data.id}}
            						</div>
           					</div>
          				</div>
        			</div>
      			</button>
      		</form>
      	{% endfor %}
 </div>
Ich würde gern durch das anklicken des Buttons einen Variable so belegen # value = data.id, dass sich diese in den views.py ansteuern lässt.

Meine views.py Funktion

Code: Alles auswählen

def build_reseption_page(request):
    if request.method == "POST":
    	chusing_data = request.POST.get('value')
        return render(request=request,
                    template_name='main/beispiel.html',
                    context={"personal_data":personal_data})
    else:
        return render(request=request,
                    template_name='main/beispiel.html',
                    context={"personal_data":personal_data})
ich freu mich auf hilfreiche Vorschläge
Benutzeravatar
sparrow
User
Beiträge: 4532
Registriert: Freitag 17. April 2009, 10:28

Wir Forms an sich im View bearbeitet werden, weißt du?

In deinem Fall kommt da darauf an, was anschließend passieren soll. Man könnte durch den Button eine URL auf dem Server aufrufen und die ID als Parameter übergeben. Alternativ dem Button die value der ID geben und schauen, was da submittet wurde.
chrisfaaa
User
Beiträge: 4
Registriert: Mittwoch 8. November 2017, 18:24

Wir Forms an sich im View bearbeitet werden, weißt du?
Ja mein Problem sind eigentlich nicht die Forms, denn ich möchte keine neuen Daten durch das klicken auf den Button generieren, sondern aus vorhandenen Informationen auswählen und die Auswahl speichern.
In deinem Fall kommt da darauf an, was anschließend passieren soll. Man könnte durch den Button eine URL auf dem Server aufrufen und die ID als Parameter übergeben. Alternativ dem Button die value der ID geben und schauen, was da submittet wurde.
Deine Alternative klingt genau nachdem was ich mir vorgestellt habe, ich würde also gern dem Button die value der ID geben und dann sehen welcher Button etwas submittet.
Benutzeravatar
sparrow
User
Beiträge: 4532
Registriert: Freitag 17. April 2009, 10:28

Bei mir ist dieses HTML-Zeug ja gefährliches Halbwissen, aber man kann, wie schon geschrieben, den value-Wert im View ansprechen.

Template:

Code: Alles auswählen

<button class="col s10 m6 14" type="submit" name="submit" value="{{data.id}}">
...
Müsste im View so zu finden sein:

Code: Alles auswählen

request.POST["submit"]
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Den Value mußt Du als <input>-Feld definieren.

Code: Alles auswählen

{% block content %}

<div class="row">
	{% for data in persenal_data %}
  		<form action= "{% url 'main:beispiel' %}" method="POST">	{% csrf_token %}
                        <input value="{{data.id}}" name="value" type="hidden">
    			<button class="col s10 m6 14" type="submit" > 
      				<div class="card">
      					<div class="card hoverable">
          					<div class="card-content">
            						<div class="card-title">{{data.id}}
            						</div>
           					</div>
          				</div>
        			</div>
      			</button>
      		</form>
      	{% endfor %}
 </div>
Da im if-Tel und im else-Teil größtenteils das selbe steht, kann man das gemeinsame auch nach dem Block schreiben.
chrisfaaa
User
Beiträge: 4
Registriert: Mittwoch 8. November 2017, 18:24

Erst einmal möchte ich all denen danken die auf meine recht ungenaue Frage geantwortet haben, ich habe mich heute mal dran gesetzt und habe eure Vorschläge alle ausprobiert und siehe da es hat gekappt.

Generell interessieren mich noch zwei weitere fragen, könnte man das Problem auch ganz anders lösen ? und wie sieht es mit der Sicherheit aus ?
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

@chrisfaaa: dazu müßte man erstmal wissen, was Du überhaupt machen möchtest.
Welche Sicherheitsbedenken hast Du denn? Dazu müßte man erst mal wissen, was das ganze hingeben soll.
Benutzeravatar
noisefloor
User
Beiträge: 4181
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
könnte man das Problem auch ganz anders lösen ?
Ja, indem du an das Event des Button anklicken eine JavaScript-Funktion bindest, die mittels fetch-API den Request an der Server im Hintergrund sendet. Vorteil: die Seite lädt nicht jede Mal neu.
und wie sieht es mit der Sicherheit aus ?
In wie fern? Bei Forms verwendet Django standardmäßig ein Token, was dich vor CSRF schützt.

Gruß, noisefloor
chrisfaaa
User
Beiträge: 4
Registriert: Mittwoch 8. November 2017, 18:24

Erst mal vielen dank für eure zahlreichen Antworten, die Sicherheitsfrage habe ich die letzten Tage einfach mal verdrängt, aber ich möchte im Grunde eine Website bauen in der man Daten eingeben, speichern und verwalten kann, die Verwaltung soll auch eine option liefern, in der man die Daten bei einer Vorlage einfügen kann.
Die eingegebenen Daten können dabei sehr persönlich sein, Konto Daten Beispielsweise.

Für die Auswahl der zu Befüllenden Elemente habe ich einen Konfigurator gebaut, siehe meine anfängliche Frage.
Benutzeravatar
noisefloor
User
Beiträge: 4181
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Die eingegebenen Daten können dabei sehr persönlich sein, Konto Daten Beispielsweise.
Dann solltest du dir aber auch verstärkt Gedanken darum machen, wie du die Daten _sicher_ auf deinem Server hältst.

Wenn jemand den Verkehr Webseite <-> Server abfängt, hat er einen Satz Daten. Wenn jemand deinen Server hackt, hat er _alle_ Daten. Das ist deutlich lukrativer.

Gruß, noisefloor
Antworten