2013-06-03 19 views
8

Czy ktoś może wyjaśnić szczegółowo, jak dokonać uwierzytelnienia rejestracji i w możliwie najprostszych słowach? Zrobiłem uwierzytelnienie (login) z django.contrib.auth, ale chcę uzyskać pełny rejestr (social/non) + login. Już widziałem django-allauth, ,, ale nadal nie można go uruchomić bez wielu hakowań. Słyszałem, że django-registration i django-profiles może to znacznie ułatwić, ale nie mogę sobie z tym poradzić. Na przykład,Rejestracja i logowanie Django - wyjaśnienie przy użyciu przykładu

~/.virtualenvs/plinter/lib/python2.7/site-packages/registration/backends/default/urls.py 

potrzebuje małej siekać do pracy:

# from django.views.generic.simple import direct_to_template 
from django.views.generic import RedirectView 
... 
          RedirectView.as_view(url='/registration/activation_complete.html'), 
          # direct_to_template, 
          # {'template': 'registration/activation_complete.html'}, 
... 

DjangoBook daje prostych przykłady Contact and search forms. Ale nie mogę rozwinąć go podczas rejestracji użytkownika i logowania. Czy ktoś może dać przykład kis pracyrejestracji i zaloguj się?

Aktualizacja

Here to prosty przykład logowania. Teraz django-allauth lub auth społecznej lub registration2 są w zamian za ...

Update2

django-allauth wydaje się być najlepszym rozwiązaniem dla łatwiejszej identyfikacji. Dodaj poprawnie aplikacje w ustawieniach, zarejestruj aplikacje fb/google/etc i zarejestruj się przez administratora i użyj dziedziczenia szablonów, aby zmienić domyślny projekt strony.

+1

Dlaczego trzeba włamać Django rejestracji? Czy używasz django 1.5+? Jeśli tak, nie instaluj rejestracji z pipy, nie jest aktualizowana ze względu na kompatybilność. Zainstaluj z [repozytorium bitbucket] (https://bitbucket.org/ubernostrum/django-registration/overview). –

+0

Dodano 'hg + https: // bitbucket.org/ubernostrum/django-rejestracja/downloads/django-registration-0.8.tar.gz' na' requirements.txt', spróbuję teraz. – boldnik

+0

Nie, ta sama wersja jest w wersji pipy. Pobierz trunk zamiast tagu: 'hg + https: // bitbucket.org/ubernostrum/django-registration' –

Odpowiedz

14

THIS jest bardzo dobry poradnik na temat logowania & Co. Wyjaśnia bardzo dobrze, jak wykonać logowanie przez Nas ogłoszenie zastąpić istniejące strony logowania Django.

UPDATE:

Oto przegląd do rejestracji i logowania. Aby uzyskać więcej informacji, przejdź do linku.

Aby się zarejestrować:

Widoki i adresy

Przejdź do folderu dolnej stronie (tam gdzie jest plik settings.py) i otwórz pliku views.py. U góry upewnij się, że następujące importowane są włączone. Dodaj je, jeśli nie:

from django.shortcuts import 
render_to_response from django.http import HttpResponseRedirect from 
django.contrib.auth.forms import UserCreationForm from 
django.core.context_processors import csrf 

Poniżej że dodać następujące funkcje (można je po funkcji logowania):

def 
register(request): 
    if request.method == 'POST': 
     form = UserCreationForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/accounts/register/complete') 

    else: 
     form = UserCreationForm() 
    token = {} 
    token.update(csrf(request)) 
    token['form'] = form 

    return render_to_response('registration/registration_form.html', token) 

def registration_complete(request): 
    return render_to_response('registration/registration_complete.html') 

Otwórz plik urls.py w folderze miejscu (tym samym folderze jako settings.py). Poniżej url wzorców = wzorce ("", wstaw następujące linie .

 # Registration URLs 
    url(r'^accounts/register/$', 'simplesite.views.register', name='register'), 
    url(r'^accounts/register/complete/$', 'simplesite.views.registration_complete', 
name='registration_complete'), 

Szablony Zakładamy własną stronę ma już szablonów katalog i plik base.html z paska nawigacyjnego. Otwórz plik base.html oraz w elemencie nav dodać link do menu nawigacyjnego stronę logowania

<a href="/accounts/register">register</a> 

Jeśli ktoś jeszcze nie istnieje, przejdź do folderu szablonów i tworzyć folder wewnątrz nazwany Rejestracja . Utwórz plik o nazwie registration_form.html, zapisz go w folderze templates/rejestracyjnym następnie wypełnić go z poniższej:

{% extends "base.html" %} {% block title %}Register{% 
endblock %} {% block content %} 

    <h2>Registration</h2> 

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

    </form> 

{% endblock %} 

utworzyć plik o nazwie registration_complete.html, zapisać go w folderze szablonów /Rejestracja i wypełnić go z następujących czynności:

{% extends "base.html" %} {% block title %}You are 
Registered{% endblock %} {% block content %} 

    <h2>Thank you for Registering</h2> <p><a 
href="/accounts/login/">Please Login</a></p> 

{% endblock %} 

aby się zalogować:

Wyświetlenia i adresy URL Otwórz plik views.py w dolnym folderze witryny (gdzie znajduje się plik settings.py). Jeśli go nie ma, utwórz i zapisz. W górnej części pliku wstaw następujący import: od import django.shortcuts render_to_response Poniżej musisz tylko dodać jedną funkcję renderującą stronę loggedin. Pozostałe funkcje (logowanie i wylogowanie) znajdują się w pliku views.py w folderze Django Auth.

def loggedin(request): 
    return render_to_response('registration/loggedin.html') 

# Opcjonalnie, jeśli chcesz pokazać swoją nazwę użytkownika podczas logowania, wywołaj ich nazwę użytkownika w widoku. Zmień funkcję loggedin na:

def loggedin(request): 
    return render_to_response('registration/loggedin.html', 
           {'username': request.user.username}) 

Otwórz plik urls.py w folderze witryny (ten sam folder co plik settings.py). Poniżej urlpatterns = patterns („”, wstawić następujące linie.

# Auth-related URLs: 
url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'), 
url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', name='logout'), 
url(r'^accounts/loggedin/$', 'simplesite.views.loggedin', name='loggedin'), 

Z simplesite to nazwa folderu, który przechowuje views.py plik, z którego dzwonisz. Otwórz plik settings.py i na na dole wstawić włóż . Domyślnym domyślnym Django jest przekierowanie do/accounts/profile, gdy się logujesz, co jest w porządku, jeśli masz stronę profilu pod tym adresem URL.Jeśli nie, musisz zmienić domyślne ustawienia dla przekierowania logowania adres URL strony zawierającej Twoją loggedin.html stronę:

Szablony

zakładamy swoją witrynę już katalog szablonów i plik base.html z paska nawigacyjnego. Otwórz plik base.html, aw polu element nav dodaj link menu nawigacyjnego do strony logowania. <a href="/accounts/login">login</a> Dodaj także link do wylogowania. <a href="/accounts/logout">logout</a> Utwórz katalog o nazwie rejestracji w folderze szablonów.Jeśli zrobisz to za pomocą linii poleceń typu rejestracja mkdir Utwórz plik o nazwie login.html, zapisać go w folderze templates/rejestracji i wypełnić go z następujący:

{% extends "base.html" %} 
{% block title %}Log In{% endblock %} 
{% block content %} 

<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 
{% csrf_token %} 
<table> 
    {{ form.as_table }} 
</table> 

<input type="submit" value="login" /> 
</form> 

{% endblock %} 

{{ form.as_table }} używa Django Moduł formularzy do utworzenia formularza. Można utworzyć niesformatowany formularz za pomocą {{ form }} bez znaczników tabeli HTML lub każde pole wstawić do znaczników akapitu z {{ form.as_p }} lub jako nieuporządkowaną listę {{ form.as_ul }}. Opcjonalnie możesz może również ułożyć własną strukturę form i użyć znaczników pól formularza następująco:

{% extends "base.html" %} 
{% block title %}Log In{% endblock %} 
{% block content %} 

<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 
{% csrf_token %} 

{% if form.errors %} 
<p>Your Username or Password were not entered correctly. Please try again.</p> 
{% endif %} 

<table> 
<tr> 
    <td>{{ form.username.label_tag }}</td> 
    <td>{{ form.username }}</td> 
    <td>{{ form.username.errors }}</td> 
</tr> 
<tr> 
    <td>{{ form.password.label_tag }}</td> 
    <td>{{ form.password }}</td> 
    <td>{{ form.password.errors }}</td> 
</tr> 
</table> 

<input type="submit" value="login" /> 
</form> 

{% endblock %} 

Utwórz plik o nazwie loggedin.html, zapisz go do folderu Szablony/rejestracji i wypełnić go z następujących powodów:

{% extends "base.html" %} 
{% block title %}Logged In{% endblock %} 
{% block content %} 

    <h2>You are logged in</h2> 

{% endblock %} 

Jeśli chcesz wyświetlić nazwę użytkownika, należy dokonać korekty pogląd omówione w rozdziale widoki. Następnie zmień loggedin.html szablon do poniżej (zmienić sformułowania jak uważasz):

{% extends "base.html" %} 
{% block title %}Logged In{% endblock %} 
{% block content %} 

<h1>Welcome {{username}}</h1> 
<p>Thank you for logging in.</p> 
<p><a href="/accounts/logout/">Logout</a></p> 

{% endblock %} 

utworzyć plik o nazwie logged_out.html, zapisać go w folderze/templates rejestracji i wypełnić go z następujące: podejście

{% extends "base.html" %} 
{% block title %}Logged Out{% endblock %} 
{% block content %} 

    <h2>Logged out!</h2> 
    <p><a href="/accounts/login/">Log back in</a></p> 

{% endblock %} 
+1

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać odnośnik. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – skyline75489

+0

Nie jest prostą rzeczą zgłoszenie kodu, jeśli spojrzysz na samouczek! Staram się umieścić jakiś niezbędny kod ... – Trix

+0

@ skyline75489: Mam nadzieję, że teraz odpowiedź jest do przyjęcia, więc proszę, czy moglibyście odrzucić swój głos? – Trix

0

Trix pracował dla mnie, ale link wylogowania został przekierowanie do wylogowania administratora, zamiast logged_out.html.

Aby rozwiązać ten przekierowanie, dodałem kolejną opcję href:

<a href="{% url 'logout' %}?next={% url 'loggedout' %}">Logout</a> 

W szablonach/rejestracja:

przemianowany logged_out.html do loggedout.html; podkreślenie spowodowało, że nadal prowadzi do strony wylogowania administratora.

W views.py:

def loggedout(request): 
    return render_to_response('registration/loggedout.html') 

I wreszcie, w urls.py:

url(r'^myapp/loggedout/$', 'myapp.views.loggedout', name='loggedout'),