Browse Source

Добавил абонентам работу с паролями

devel
Dmitry 9 years ago
parent
commit
f46d9d55dc
  1. 27
      abonapp/forms.py
  2. 24
      abonapp/models.py
  3. 9
      templates/abonapp/addAbon.html
  4. 7
      templates/abonapp/editAbon.html
  5. 4
      templates/abonapp/viewAbon.html

27
abonapp/forms.py

@ -1,7 +1,8 @@
# -*- coding: utf-8 -*-
from django import forms
from django.contrib.auth.hashers import make_password
from random import choice
from string import digits
from string import digits, ascii_lowercase
from . import models
@ -18,6 +19,10 @@ def generate_random_username(length=6, chars=digits, split=2, delimiter=''):
return username
def generate_random_password():
return generate_random_username(length=8, chars=digits+ascii_lowercase)
class AbonForm(forms.ModelForm):
username = forms.CharField(max_length=127, required=False, initial=generate_random_username, widget=forms.TextInput(attrs={
'placeholder': 'Логин',
@ -25,6 +30,9 @@ class AbonForm(forms.ModelForm):
'required':''
}))
password = forms.CharField(max_length=64, initial=generate_random_password,
widget=forms.TextInput(attrs={'class': 'form-control', 'required':''}))
class Meta:
model = models.Abon
fields = ['username', 'telephone', 'fio', 'group', 'description', 'street', 'house', 'is_active']
@ -47,6 +55,23 @@ class AbonForm(forms.ModelForm):
'is_active': forms.NullBooleanSelect(attrs={'class': 'form-control'})
}
def save(self, commit=True):
raw_password = self.cleaned_data['password']
acc = super().save(commit=False)
acc.password = make_password(raw_password)
if commit:
acc.save()
try:
abon_raw_passw = models.AbonRawPassword.objects.get(account=acc)
abon_raw_passw.passw_text = raw_password
abon_raw_passw.save(update_fields=['passw_text'])
except models.AbonRawPassword.DoesNotExist:
models.AbonRawPassword.create(
account=acc,
passw_text=raw_password
)
return acc
class AbonGroupForm(forms.ModelForm):
class Meta:

24
abonapp/models.py

@ -153,13 +153,15 @@ class AbonStreet(models.Model):
def __str__(self):
return self.name
class Meta:
db_table = 'abon_street'
class Abon(UserProfile):
current_tariffs = models.ManyToManyField(Tariff, through=AbonTariff)
group = models.ForeignKey(AbonGroup, models.SET_NULL, blank=True, null=True)
ballance = models.FloatField(default=0.0, validators=[DecimalValidator])
ip_address = models.OneToOneField(IpPoolItem, on_delete=models.SET_NULL, null=True, blank=True)
#TODO: надо ж пароль для абонента создавать
description = models.TextField(null=True, blank=True)
street = models.ForeignKey(AbonStreet, on_delete=models.SET_NULL, null=True, blank=True)
house = models.CharField(max_length=12, null=True, blank=True)
@ -352,12 +354,23 @@ class AllPayLog(models.Model):
ordering = ('date_action',)
class AbonRawPassword(models.Model):
account = models.OneToOneField(Abon, primary_key=True)
passw_text = models.CharField(max_length=64)
def __str__(self):
return "%s - %s" % (self.account, self.passw_text)
class Meta:
db_table = 'abon_raw_password'
def abon_post_save(sender, instance, **kwargs):
print('abon_post_save', instance.username)
print('Instance:', instance.pk, sender)
try:
tm = Transmitter()
agent_abon = instance.build_agent_struct()
agent_abon = instance.build_agent_struct()
if agent_abon is None:
return True
if kwargs['created']:
# создаём абонента
tm.add_user(agent_abon)
@ -396,7 +409,6 @@ def abon_del_signal(sender, instance, **kwargs):
def abontariff_post_save(sender, instance, **kwargs):
print('abontariff_post_save')
# Тут или подключение абону услуги, или изменение приоритета
if not kwargs['created']:
# если изменение приоритета то не говорим об этом NAS'у
@ -405,6 +417,8 @@ def abontariff_post_save(sender, instance, **kwargs):
return
try:
agent_abon = instance.abon.build_agent_struct()
if agent_abon is None:
return True
tm = Transmitter()
# найдём абонента на NAS
queue = tm.find_queue('uid%d' % instance.abon.pk)

9
templates/abonapp/addAbon.html

@ -71,6 +71,15 @@
</div>
</div>
<div class="form-group">
<label for="id_password">Пароль</label>
<div class="input-group">
<span class="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
{{ form.password }}{{ form.password.errors }}
</div>
</div>
<div class="btn-group">
<button type="submit" class="btn btn-sm btn-primary">
<span class="glyphicon glyphicon-save"></span> Сохранить

7
templates/abonapp/editAbon.html

@ -68,6 +68,13 @@
</div>
</div>
<div class="form-group-sm">
<label for="id_password" class="col-sm-2 control-label">Пароль</label>
<div class="col-sm-10">
{{ form.password }}{{ form.password.errors }}
</div>
</div>
<div class="form-group-sm">
<label for="id_description" class="col-sm-2 control-label">Комментарий</label>
<div class="col-sm-10">

4
templates/abonapp/viewAbon.html

@ -49,6 +49,10 @@
<td>IP Адрес</td>
<td><i>{{ abon.ip_address|default:'&lt;не назначен&gt;' }}</i></td>
</tr>
<tr>
<td>Пароль</td>
<td><i>{{ passw }}</i></td>
</tr>
</tbody>
</table>
{% if abon.description %}<p>{{ abon.description }}</p>{% endif %}

Loading…
Cancel
Save