Python Flask-WebApp: Frage zu Konzept/Umsetzung

n0NamE

Cadet 3rd Year
Registriert
Okt. 2012
Beiträge
50
Hallo zusammen

Ich habe eine WebApp mit Flask erstellt, welche soweit auch schon läuft und produktiv ist. Über die Page kann man sich für einen Anlass anmelden.

Es gibt auch einige Bedingungen, welche erfüllt sein müssen, damit man sich anmelden kann (z.B. nicht ausgebucht). Dafür habe ich eine Bool auf der DB welche mir zurück gibt, ob die Anmeldung möglich ist. Jetzt stellt sich mir die Frage:
Ist das sinnvoll oder soll ich eine Funktion erstellen, welche das überprüft und True bzw. False zurück gibt?

Es gibt auch ein Anmeldeschluss. Wenn dieser erreicht wurde, soll man sich nicht mehr anmelden können (funktioniert zur Zeit nicht), dies könnte ich mit solch einer Funktion einfach überprüfen. Nur sollte bei solch einer "automatischen Deaktivierung der Anmeldung" eine Mail versendet werden. Nur wie kann ich solch ein "Event" mit Python setzten?

Hoffe alles ist verständlich :)

Danke

n0NamE
 
Code:
#!/usr/bin/python
# coding: utf-8

import time
import threading


class Anlass(object):

	def __init__(self, name, anmelde_schluss, anmelde_limit):
		self._name = name
		self._anmelde_schluss = anmelde_schluss
		self._anmelde_limit = anmelde_limit
		self._anmeldungen = {}

		self.sende_mail_bei_anmelde_schluss()

	@property
	def ausgebucht(self):
		return len(self._anmeldungen.items()) >= self._anmelde_limit

	def anmelden(self, user_id):

		if time.time() > self._anmelde_schluss:
			print('zu spaet')
			return	

		if self.ausgebucht:
			print('leider ausgebucht')
			return		

		self._anmeldungen[user_id] = {
			'user_name': 'foo',
		}

		print('user %s gebucht' % user_id)

	def sende_mail_bei_anmelde_schluss(self):
		if time.time() > self._anmelde_schluss:
			print('mail senden')
		else:
			# alle 5s sich selbst aufrufen und überprüfen, abbruch wenn anmeldeschluss erreicht
			threading.Timer(5, self.sende_mail_bei_anmelde_schluss).start()

MyEvent = Anlass('mein_anlass', time.time() + 1, 3)  # anmeldeschluss ist jetzt + 1s, max 3 anmeldungen
MyEvent.anmelden(1)
MyEvent.anmelden(2)
MyEvent.anmelden(3)
MyEvent.anmelden(4)

time.sleep(7)

MyEvent.anmelden(5)

liefert
Code:
python2 untitled.py 
user 1 gebucht
user 2 gebucht
user 3 gebucht
leider ausgebucht
mail senden
zu spaet

so in der art könnte man es machen :)
 
Hei 0x8100

Danke für dein Beispiel. So wie das verstehe, ist es am sinnvollsten eine Funktion zu gebrauchen (in der Model Klasse). Nur habe ich auch den Fehler gemacht, selbst für die Anmeldung keine Funktion geschrieben, sondern das beim Controller hinterlegt...

Werde mich dann mal ans Umschreiben machen :)
 
Zurück
Oben