network_asset

This commit is contained in:
RobbieHan
2019-04-08 16:17:54 +08:00
parent 0e7bb2678f
commit 9430fa0781
20 changed files with 834 additions and 283 deletions

View File

@@ -1,112 +0,0 @@
# Generated by Django 2.1.2 on 2018-10-17 15:09
from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0009_alter_user_last_name_max_length'),
]
operations = [
migrations.CreateModel(
name='UserProfile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('name', models.CharField(default='', max_length=20, verbose_name='姓名')),
('birthday', models.DateField(blank=True, null=True, verbose_name='出生日期')),
('gender', models.CharField(choices=[('male', ''), ('female', '')], default='male', max_length=10, verbose_name='性别')),
('mobile', models.CharField(default='', max_length=11, verbose_name='手机号码')),
('email', models.EmailField(max_length=50, verbose_name='邮箱')),
('image', models.ImageField(blank=True, default='image/default.jpg', null=True, upload_to='image/%Y/%m')),
('post', models.CharField(blank=True, max_length=50, null=True, verbose_name='职位')),
],
options={
'verbose_name': '用户信息',
'verbose_name_plural': '用户信息',
'ordering': ['id'],
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.CreateModel(
name='Menu',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=30, unique=True, verbose_name='菜单名')),
('icon', models.CharField(blank=True, max_length=50, null=True, verbose_name='图标')),
('code', models.CharField(blank=True, max_length=50, null=True, verbose_name='编码')),
('url', models.CharField(blank=True, max_length=128, null=True, unique=True)),
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Menu', verbose_name='父菜单')),
],
options={
'verbose_name': '菜单',
'verbose_name_plural': '菜单',
},
),
migrations.CreateModel(
name='Role',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32, unique=True, verbose_name='角色')),
('desc', models.CharField(blank=True, max_length=50, null=True, verbose_name='描述')),
('permissions', models.ManyToManyField(blank=True, to='system.Menu', verbose_name='URL授权')),
],
),
migrations.CreateModel(
name='Structure',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=60, verbose_name='名称')),
('type', models.CharField(choices=[('unit', '单位'), ('department', '部门')], default='department', max_length=20, verbose_name='类型')),
('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Structure', verbose_name='父类架构')),
],
options={
'verbose_name': '组织架构',
'verbose_name_plural': '组织架构',
},
),
migrations.AddField(
model_name='userprofile',
name='department',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='system.Structure', verbose_name='部门'),
),
migrations.AddField(
model_name='userprofile',
name='groups',
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'),
),
migrations.AddField(
model_name='userprofile',
name='roles',
field=models.ManyToManyField(blank=True, to='system.Role', verbose_name='角色'),
),
migrations.AddField(
model_name='userprofile',
name='superior',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='上级主管'),
),
migrations.AddField(
model_name='userprofile',
name='user_permissions',
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'),
),
]

View File

@@ -1,22 +0,0 @@
# Generated by Django 2.1.2 on 2018-11-15 21:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('system', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='menu',
options={'ordering': ['number'], 'verbose_name': '菜单', 'verbose_name_plural': '菜单'},
),
migrations.AddField(
model_name='menu',
name='number',
field=models.FloatField(blank=True, null=True, verbose_name='编号'),
),
]

View File

@@ -35,4 +35,6 @@ urlpatterns = [
path('rbac/role/role2user/', views_role.Role2UserView.as_view(), name="rbac-role-role2user"),
path('rbac/role/role2menu/', views_role.Role2MenuView.as_view(), name="rbac-role-role2menu"),
path('rbac/role/role2menu_list/', views_role.Role2MenuListView.as_view(), name="rbac-role-role2menu_list"),
path('personal_password_change/', views_user.PersonalPasswordChangeView.as_view(), name='personal_password_change')
]

View File

@@ -218,4 +218,35 @@ class UserDisableView(LoginRequiredMixin, View):
queryset = User.objects.extra(where=["id IN(" + id_nums + ")"])
queryset.filter(is_active=True).update(is_active=False)
ret = {'result': 'True'}
return HttpResponse(json.dumps(ret), content_type='application/json')
# 用户修改密码临时接口
class PersonalPasswordChangeView(LoginRequiredMixin, View):
"""
登陆用户修改个人密码
"""
def get(self, request):
ret = dict()
user = get_object_or_404(User, pk=int(request.user.id))
ret['user'] = user
return render(request, 'system/users/personal_passwd_change.html', ret)
def post(self, request):
user = get_object_or_404(User, pk=int(request.user.id))
form = PasswordChangeForm(request.POST)
if form.is_valid():
new_password = request.POST.get('password')
user.set_password(new_password)
user.save()
ret = {'status': 'success'}
else:
pattern = '<li>.*?<ul class=.*?><li>(.*?)</li>'
errors = str(form.errors)
passwd_change_form_errors = re.findall(pattern, errors)
ret = {
'status': 'fail',
'password_change_form_errors': passwd_change_form_errors[0]
}
return HttpResponse(json.dumps(ret), content_type='application/json')