Merge pull request #68 from northbaypython/chrisjrn/nicer-login-view
Nicer Login View
This commit is contained in:
		
						commit
						67da09a3dd
					
				
					 5 changed files with 111 additions and 0 deletions
				
			
		
							
								
								
									
										25
									
								
								pinaxcon/account_hooks.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								pinaxcon/account_hooks.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | from account import hooks | ||||||
|  | from django.contrib.auth.models import User | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class BetterAccountHookSet(hooks.AccountDefaultHookSet): | ||||||
|  | 
 | ||||||
|  |     def get_user_credentials(self, form, identifier_field): | ||||||
|  |         username = form.cleaned_data[identifier_field] | ||||||
|  | 
 | ||||||
|  |         # Find an actual username so we can authenticate | ||||||
|  |         print username, | ||||||
|  |         if identifier_field == "email": | ||||||
|  |             username = self.get_username_by_email(username) | ||||||
|  |         print username, | ||||||
|  | 
 | ||||||
|  |         return { | ||||||
|  |             "username": username, | ||||||
|  |             "password": form.cleaned_data["password"], | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     def get_username_by_email(self, email): | ||||||
|  |         try: | ||||||
|  |             return User.objects.get(email=email).username | ||||||
|  |         except User.DoesNotExist: | ||||||
|  |             return None | ||||||
|  | @ -261,6 +261,8 @@ EMAIL_HOST_PASSWORD = os.environ.get("DJANGO_EMAIL_HOST_PASSWORD", "") | ||||||
| EMAIL_USE_TLS = bool(int(os.environ.get("DJANGO_EMAIL_USE_TLS", "0"))) | EMAIL_USE_TLS = bool(int(os.environ.get("DJANGO_EMAIL_USE_TLS", "0"))) | ||||||
| EMAIL_USE_SSL = bool(int(os.environ.get("DJANGO_EMAIL_USE_SSL", "0"))) | EMAIL_USE_SSL = bool(int(os.environ.get("DJANGO_EMAIL_USE_SSL", "0"))) | ||||||
| 
 | 
 | ||||||
|  | ACCOUNT_LOGIN_URL = "nbpy_login" | ||||||
|  | LOGIN_URL = "nbpy_login" | ||||||
| 
 | 
 | ||||||
| # We need to explicitly switch on signups. | # We need to explicitly switch on signups. | ||||||
| ACCOUNT_OPEN_SIGNUP = bool(int(os.environ.get("DJANGO_ACCOUNT_OPEN_SIGNUP", "0"))) | ACCOUNT_OPEN_SIGNUP = bool(int(os.environ.get("DJANGO_ACCOUNT_OPEN_SIGNUP", "0"))) | ||||||
|  | @ -270,6 +272,7 @@ ACCOUNT_LOGIN_REDIRECT_URL = "home" | ||||||
| ACCOUNT_LOGOUT_REDIRECT_URL = "home" | ACCOUNT_LOGOUT_REDIRECT_URL = "home" | ||||||
| ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 | ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 | ||||||
| ACCOUNT_USE_AUTH_AUTHENTICATE = True | ACCOUNT_USE_AUTH_AUTHENTICATE = True | ||||||
|  | ACCOUNT_HOOKSET =  "pinaxcon.account_hooks.BetterAccountHookSet" | ||||||
| 
 | 
 | ||||||
| AUTHENTICATION_BACKENDS = [ | AUTHENTICATION_BACKENDS = [ | ||||||
|     "symposion.teams.backends.TeamPermissionsBackend", |     "symposion.teams.backends.TeamPermissionsBackend", | ||||||
|  |  | ||||||
							
								
								
									
										59
									
								
								pinaxcon/templates/account_login.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								pinaxcon/templates/account_login.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | ||||||
|  | {% extends "page_with_title_and_lede.html" %} | ||||||
|  | 
 | ||||||
|  | {% load bootstrap %} | ||||||
|  | {% load i18n %} | ||||||
|  | 
 | ||||||
|  | {% block head_title %}Log In{% endblock %} | ||||||
|  | 
 | ||||||
|  | {% block heading %}Log In or Sign Up{% endblock %} | ||||||
|  | 
 | ||||||
|  | {% block body_class %}login{% endblock %} | ||||||
|  | 
 | ||||||
|  | {% block content %} | ||||||
|  | 
 | ||||||
|  |   <div class="container"> | ||||||
|  |     <div class="row"> | ||||||
|  |       <div class="col-md-4"> | ||||||
|  | 
 | ||||||
|  |         <form action="{% url 'account_login' %}" method="POST"> | ||||||
|  |           <div class="panel panel-primary"> | ||||||
|  |             <div class="panel-heading"> | ||||||
|  |               <h3 class="panel-title"> | ||||||
|  |                 Log into an existing account | ||||||
|  |               </h3> | ||||||
|  |             </div> | ||||||
|  |             <div class="panel-body"> | ||||||
|  |               {% csrf_token %} | ||||||
|  |               {{ login_form|bootstrap }} | ||||||
|  |             </div> | ||||||
|  |             <div class="panel-footer"> | ||||||
|  |               <button role="submit" class="btn btn-primary">Log In</button> | ||||||
|  |             </div> | ||||||
|  |           </div> | ||||||
|  |         </form> | ||||||
|  | 
 | ||||||
|  |       </div> | ||||||
|  |       {% if signup_open %} | ||||||
|  |         <div class="col-md-4"> | ||||||
|  |           <form action="{% url 'account_signup' %}" method="POST"> | ||||||
|  |             <div class="panel panel-default"> | ||||||
|  |               <div class="panel-heading"> | ||||||
|  |                 <h3 class="panel-title"> | ||||||
|  |                   Sign up for a new account | ||||||
|  |                 </h3> | ||||||
|  |               </div> | ||||||
|  |               <div class="panel-body"> | ||||||
|  |                 {% csrf_token %} | ||||||
|  |                 {{ signup_form|bootstrap }} | ||||||
|  |               </div> | ||||||
|  |               <div class="panel-footer"> | ||||||
|  |                 <button role="submit" class="btn btn-primary">Sign Up</button> | ||||||
|  |               </div> | ||||||
|  |             </div> | ||||||
|  |           </form> | ||||||
|  |         </div> | ||||||
|  |       {% endif %} | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | 
 | ||||||
|  | {% endblock %} | ||||||
|  | @ -52,6 +52,9 @@ urlpatterns = [ | ||||||
| 
 | 
 | ||||||
|     url(r"^admin/", include(admin.site.urls)), |     url(r"^admin/", include(admin.site.urls)), | ||||||
| 
 | 
 | ||||||
|  |     url(r"^login$", views.account_login, name="nbpy_login"), | ||||||
|  |     # Override the default account_login view with one that takes email addys | ||||||
|  |     url(r"^account/login/$", views.EmailLoginView.as_view(), name="account_login"), | ||||||
|     url(r"^account/", include("account.urls")), |     url(r"^account/", include("account.urls")), | ||||||
| 
 | 
 | ||||||
|     url(r"^dashboard/", symposion.views.dashboard, name="dashboard"), |     url(r"^dashboard/", symposion.views.dashboard, name="dashboard"), | ||||||
|  |  | ||||||
|  | @ -1,9 +1,30 @@ | ||||||
|  | from django.conf import settings | ||||||
| from django.http import HttpResponseServerError | from django.http import HttpResponseServerError | ||||||
|  | from django.shortcuts import render | ||||||
| from django.template import RequestContext | from django.template import RequestContext | ||||||
| from django.template import Template | from django.template import Template | ||||||
| from django.template.loader import get_template | from django.template.loader import get_template | ||||||
| from django.views import defaults | from django.views import defaults | ||||||
| 
 | 
 | ||||||
|  | from account.forms import LoginEmailForm, LoginUsernameForm, SignupForm | ||||||
|  | from account.views import LoginView | ||||||
|  | 
 | ||||||
| def server_error(request, template_name=defaults.ERROR_500_TEMPLATE_NAME): | def server_error(request, template_name=defaults.ERROR_500_TEMPLATE_NAME): | ||||||
|     t = Template("{%% include '%s' %%}" % template_name) |     t = Template("{%% include '%s' %%}" % template_name) | ||||||
|     return HttpResponseServerError(t.render(RequestContext(request))) |     return HttpResponseServerError(t.render(RequestContext(request))) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def account_login(request): | ||||||
|  | 
 | ||||||
|  |     d = { | ||||||
|  |         "login_form": LoginEmailForm(), | ||||||
|  |         "signup_form": SignupForm(), | ||||||
|  |         "signup_open": getattr(settings, "ACCOUNT_OPEN_SIGNUP", True), | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     print d["signup_open"], settings.ACCOUNT_OPEN_SIGNUP | ||||||
|  |     return render(request, "account_login.html", d) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class EmailLoginView(LoginView): | ||||||
|  |     form_class = LoginEmailForm | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Josh Simmons
						Josh Simmons