# -*- coding: utf-8 -*- from django.shortcuts import render_to_response from django.http import HttpResponseRedirect, HttpResponse from django.template import RequestContext from django.core.context_processors import csrf from django.contrib.auth.decorators import login_required import random from django.utils.translation import ugettext as _ #models and forms from models import User from forms import UserForm, UserCreationForm, ChangePasswordForm, EmailAnnouncementForm #custom views from functions.custom_views import objects_list from hashlib import md5 import json def user_all(request): """ Return list of all users with pagination """ return objects_list(request, User, 'user_all.html') def user_change(request, url): """ Return form of user and post it on the server. If form is posted redirect on the page of all users. """ user = User.objects.safe_get(id=url) # try get user by url if doesnt work by id if user is None: user = User.objects.safe_get(url=url) #redirect to list of all users if cannot find user if user is None: return HttpResponseRedirect('/admin/accounts/all') if request.POST: form = UserForm(request.POST, instance=user) if form.is_valid(): form.save() return HttpResponseRedirect('/admin/accounts/all') else: form = UserForm(instance=user) if user.profile.city: form.fields['city'].widget.attrs['data-init-text'] = user.profile.city.name args = {} args.update(csrf(request)) args['form'] = form return render_to_response('user_change.html', args) def create_admin(request): if request.POST: form = UserCreationForm(request.POST) if form.is_valid(): user = form.save(commit=False) user.is_admin = False user.save() return HttpResponseRedirect('/admin/accounts/all') else: form = UserCreationForm() args = {} args.update(csrf(request)) args['form'] = form return render_to_response('create_admin.html', args) def create_md5(request): if request.POST: form = UserCreationForm(request.POST) if form.is_valid(): user = User() user.email = request.POST['email'] user.first_name = request.POST['first_name'] user.last_name = request.POST['last_name'] user.password = md5(request.POST['password2']).hexdigest() user.is_admin = True user.save() return HttpResponseRedirect('/admin/accounts/all') else: form = UserCreationForm() args = {} args.update(csrf(request)) args['form'] = form return render_to_response('create_admin.html', args) from django.core.mail import EmailMessage def registration(request): if request.POST: form = UserCreationForm(request.POST) if form.is_valid(): user = form.save() email = EmailMessage('Subject', 'Body', to=['%s'%user.email]) email.send() return HttpResponseRedirect('/admin/accounts/registration') else: form = UserCreationForm() args = {} args.update(csrf(request)) args['form'] = form return render_to_response('registration.html', args) def generatePassword(): """ generate random password from 8 symbols """ SYMBOLS = [',', '.', '?', '!', '-', '+', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '#'] PASSWORD_LENGTH = 8 newPassword = [] for i in range(PASSWORD_LENGTH): newPassword.append(SYMBOLS[random.randrange(0, len(SYMBOLS))]) return ''.join(newPassword) from django.conf import settings def reset_password_email(request): """ generate random password set this password to user and send on email """ if request.GET: user = User.objects.get(email=request.GET['email']) new_pass = generatePassword() user.email_user('Reset password', 'Your new password: "%s" '%new_pass, settings.DEFAULT_FROM_EMAIL, ) user.set_password(u'%s'%new_pass) user.save() return HttpResponse('success') return HttpResponse('error') @login_required def change_password(request): """ Change current user password if new password is valid """ success = {'success': False} if request.POST: form = ChangePasswordForm(request.POST) if form.is_valid(): user = request.user if(user.check_password(form.cleaned_data.get('old_password'))): #user.set_password(form.cleaned_data.get('new_password')) #user.save() success['success'] = True success['message'] = _(u'Пароль именен') return HttpResponse(json.dumps(success), content_type='application/json') else: errors = {'errors': [_(u'Не правильный пароль')]} success.update(errors) return HttpResponse(json.dumps(success), content_type='application/json') else: errors = [err[0] for err in form.errors.values()] errors = {'errors': errors} success.update(errors) return HttpResponse(json.dumps(success), content_type='application/json') else: return HttpResponse(json.dumps(success), content_type='application/json')