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_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. | ||||
| 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_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2 | ||||
| ACCOUNT_USE_AUTH_AUTHENTICATE = True | ||||
| ACCOUNT_HOOKSET =  "pinaxcon.account_hooks.BetterAccountHookSet" | ||||
| 
 | ||||
| AUTHENTICATION_BACKENDS = [ | ||||
|     "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"^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"^dashboard/", symposion.views.dashboard, name="dashboard"), | ||||
|  |  | |||
|  | @ -1,9 +1,30 @@ | |||
| from django.conf import settings | ||||
| from django.http import HttpResponseServerError | ||||
| from django.shortcuts import render | ||||
| from django.template import RequestContext | ||||
| from django.template import Template | ||||
| from django.template.loader import get_template | ||||
| 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): | ||||
|     t = Template("{%% include '%s' %%}" % template_name) | ||||
|     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