2 Stimmen

Frage zur Authentifizierung für Anfänger

Ich habe eine Seite, index.html, die sowohl ein Anmelde- als auch ein Registrierungsformular enthält. Ich habe ein paar Fragen dazu, wie ich das richtig hinbekomme

Meine URLConfig sieht wie folgt aus:

urlpatterns = patterns('djangoproject1.authentication.views',
    (r'^$',direct_to_template,{'template':'authentication/index.html'}),
    (r'^register/$','register'),
)

1) Mit dem Django-Buch ist ein Leitfaden, mein Formular sieht wie folgt aus:

<h1>Register</h1>
    <form action="/register/" method="post">
        {{ form.as_p }}
        <input type="submit" value="Register">
    </form>

Da es sich bei der Datei um index.html handelt, wird das Formular natürlich nicht angezeigt, wenn ich die Seite aufrufe. Brauche ich eine "Ansicht", um den Besuch von index.html zu behandeln, anstatt ein direct_to_template?

2) Mein Register-Code sieht wie folgt aus:

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            return HttpResponseRedirect("/register/success/")
        else:
            form = UserCreationForm()
    return render_to_response("authentication/index.html", {'form': form})

Dies ist die in Django eingebaute Authentifizierung. Verwenden die Leute das tatsächlich? Es scheint begrenzt zu sein. Ich weiß, ich kann mehr Felder zum Django-Benutzer hinzufügen, indem Sie ein Benutzerprofil oder etwas, aber was über die UserCreationForm? Sollte ich mein eigenes Formular erstellen? Sollte es irgendwie von UserCreationForm erben?

0voto

Matthew J Morrison Punkte 4203

Es klingt wie Sie wahrscheinlich wollen eine andere generische Ansicht anstelle von direct_to_tepmlate verwenden. Werfen Sie einen Blick auf die Objekt erstellen generische Ansicht. In der Regel erstelle ich einfach eine Ansicht, da ich in der Regel mehr tun muss, als eine allgemeine Ansicht mir problemlos ermöglicht.

0voto

eternicode Punkte 6667

direct_to_template selbst kann weder Formulare erstellen noch bearbeiten - es rendert einfach eine Anfrage direkt in eine Vorlage, wie der Name schon sagt.

Sie könnten sich informieren über django-registrierung für die Registrierung.

Wenn Sie zwei Formulare auf derselben Seite platzieren, benötigen Sie eine benutzerdefinierte Ansicht, die beide Formulare darstellen und verarbeiten kann. Allerdings sind Seiten mit mehreren Formularen bekanntermaßen schwierig zu bearbeiten. Wenn Sie separate Formulare (und Übermittlungsschaltflächen) haben, können Sie jedem Übermittlungseingang einen eindeutigen Namen hinzufügen und bestimmen, welches Formular (Klasse) validiert und behandelt werden soll, basierend auf if name in request.POST .


bearbeiten:

Nachdem ich mir Ihren Code genauer angesehen habe, sehe ich, dass Ihr Registrierungsformular auf eine andere Ansicht umgeleitet wird; das vereinfacht die Dinge, aber Sie brauchen immer noch eine benutzerdefinierte Ansicht für Ihre Homepage, die sowohl Anmelde- als auch Registrierungsformulare zum Rendern an die Vorlage weiterleitet.

Alternativ können Sie, wenn Sie einfach auf Seiten umleiten, die jedes Formular verarbeiten, diese Formulare mit direct_to_template 's extra_context Parameter direkt in Ihrer urls.py:

from wherever import LoginForm, RegistrationForm

urlpatterns = patterns('djangoproject1.authentication.views',
    (r'^$',
        direct_to_template,
        {
            'template': 'authentication/index.html',
            'extra_context': {
                'reg_form': RegistrationForm(),
                'login_form': LoginForm()
            }
        }
    ),
    (r'^register/$', 'register'),
)

Dieser Ansatz ist nicht der sauberste, aber er ist eine Option, wenn Sie realmente generische Ansichten verwenden wollte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X