2016-12-12 2 views
1

Ich bin ziemlich neu in Python (und, um ehrlich zu sein, Programmierung im Allgemeinen). Ich arbeite gerade an einer Art To-Do-Liste, in der ich Aufgaben in den richtigen Kurs setzen muss (alles ist mit pädagogischen Dingen verbunden). Also, das Problem ist ziemlich einfach. Ich habe dies als Flask-driven Route:Aktuelle Benutzer-ID in Flask

@app.route('/add_course', methods=('GET', 'POST')) 
@login_required 
def course(): 
    form = forms.CourseForm() 
    if form.validate_on_submit(): 
     models.Course.create(teacher=g.user._get_current_object(), 
          name=form.name.data.strip(), 
          difficulty=form.level.data.strip(), 
          description=form.description.data.strip()) 
     flash("Course successfully created!", "success") 
     return redirect(url_for('index')) 
    return render_template('add_course.html', form=form) 

Dann habe ich dies in forms.py. Sie können die kluge Markierung sehen, die ich gesetzt habe, um anzuzeigen, wo mein Problem ist. Es sagt THE_PROBLEM

def courses(): 
    try: 
     courses = models.Course.select(models.Course.id, 
            models.Course.name, 
            models.Course.difficulty).where(THE_PROBLEM) 
     course_list = [] 
     for course in courses: 
      course_list.append((str(course.id), course.name + ' - ' + course.difficulty.title())) 
     return course_list 
    except models.DoesNotExist: 
     return [('', 'No courses')] 


class ToDoForm(FlaskForm): 
    name = StringField("What's up?", validators=[ 
    DataRequired() 
    ]) 
    due_date = DateTimeField('When?', format='%Y-%m-%d %H-%M') 
    course = SelectField('Course', choices=courses()) 
    priority = SelectField('Priority', 
          choices=[('high', 'High priority'), 
            ('medium', 'Normal priority'), 
            ('low', 'Low priority')], 
          validators=[ 
           DataRequired() 
          ]) 
    description = TextAreaField('Description') 

Also, ja, was ich suche ist die Möglichkeit, die ID des Besitzers (Lehrer in diesem Fall), der angemeldet ist zur Zeit zu passieren. Ich benutze diese Funktion courses() ein bauen Liste der Tupel für das Auswahlattribut des Feldes course in ToDoForm. Ich muss die ID des gegenwärtig eingeloggten Lehrers in diese Funktion eingeben, damit sie beurteilen kann, ob dieser Lehrer irgendwelche Kurse absolviert hat, die seiner ID entsprechen. Ich habe versucht, current_user._get_current_object() und was auch immer zu verwenden, aber es verursachte mir nur Tonnen von Fehlern.

Jede Hilfe, Rat oder Vorschlag wird geschätzt. Ich hoffe wirklich, dass das, was ich hier sage (und was ich erreichen möchte), verständlich ist

+0

Sie haben nicht angesprochen, was passiert, wenn sich ein Benutzer anmeldet, aber ich vermute, dass Sie hier die Sitzungsverwaltung benötigen. Wenn sich ein Benutzer anmeldet, sollte ein Profil in der Datenbank verglichen werden. Bei Erfolg wird eine Benutzersitzung gestartet und von dort könnten Sie alle ursprünglichen Werte speichern, die für Sie von Interesse sein könnten, in diesem Fall die Benutzer-ID. Klingt das ungefähr richtig? –

+0

Nun, ich wette, das war nicht selbsterklärend. Das tut mir leid. Nun, ich habe den LoginManager in meinem app.py (oben als ersten Codeblock angegeben) und meinen Formularen in forms.py (dem zweiten Codeblock) instanziiert. Alles funktioniert einwandfrei und es gibt kein Problem damit. Ich wollte nur eine Hand in einer anderen Frage - wie stelle ich die ID des aktuellen Benutzers zur Verfügung? Mit anderen Worten, ich möchte eine Abfrage erstellen wie "SELECT-Name, Schwierigkeit von Kurs WHERE Lehrer-ID = ** Derzeit angemeldeter Benutzer **. Dies ist das Problem für mich, da dieser Evaluierungsprozess in Forms.py, nicht in App passiert .py. –

+3

@SergeyOrlov - 'aus flask_login importieren current_user' – pjcunningham

Antwort

-3

Falls jemand mit der gleichen dummen Frage kommt: Lösung ist ziemlich einfach. Fügen Sie externe Klassen in Funktionen ein und übergeben Sie erforderliche Variablen als Argumente und verwenden Sie sie dann nach Herzenslust. Vergessen Sie nicht, eine Instanz der Klasse zurückzugeben.