from cgi import print_arguments from django.shortcuts import render, redirect from django.forms import ModelForm, PasswordInput, DateTimeInput, TextInput, Select from django.contrib import messages from django.utils import timezone from web import models # Create your views here. class LoginForm(ModelForm): class Meta: model = models.UserTable fields = ['username', 'password'] widgets = { 'password': PasswordInput(), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' class SigninForm(ModelForm): class Meta: model = models.UserTable exclude = ['role', 'group'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' def login(request): if request.method == 'GET': if request.session.get('is_login', None): return redirect('/') login_form = LoginForm() print('yes') return render(request, 'user_login.html', locals()) login_form = LoginForm(data=request.POST) if login_form.is_valid(): username = login_form.cleaned_data['username'] password = login_form.cleaned_data['password'] user = models.UserTable.objects.filter(username=username).first() if user and user.password == password: request.session['is_login'] = True request.session['user_id'] = user.id request.session['group_id'] = user.group_id request.session['name'] = user.name request.session['role'] = user.role return redirect('/') else: messages.warning(request, '用户名或密码错误!') return render(request, 'user_login.html', locals()) def logout(request): if request.session.get('is_login', None): request.session.flush() messages.success(request, '已退出登录!') return redirect('/') def signin(request): if request.method == 'GET': signin_form = SigninForm() return render(request, 'user_reg.html', locals()) if request.method == 'POST': signin_form = SigninForm(data=request.POST) if signin_form.is_valid(): username = signin_form.cleaned_data['username'] same_user = models.UserTable.objects.filter(username=username) if same_user: messages.warning(request, '用户名已存在!') else: signin_form.save() messages.success(request, '注册成功!') return redirect('/login/') return render(request, 'user_reg.html', locals()) class TodoForm(ModelForm): class Meta: model = models.ToDoTable exclude = ['user', 'group'] widgets = { 'name': TextInput(attrs={'placeholder': '待办事项名称'}), 'detail': TextInput(attrs={'placeholder': '详细内容'}), 'deadline': DateTimeInput(attrs={'type': 'datetime-local'}), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' def todo_add(request): if request.method == 'POST': user_id = request.session.get('user_id') group_id = request.session.get('group_id') todo = models.ToDoTable(user_id=user_id, group_id=group_id) todo_form = TodoForm(data=request.POST, instance=todo) if todo_form.is_valid(): todo_form.save() messages.success(request, '添加成功!') return redirect('/todo_list/') def todo_delete(request, id): models.ToDoTable.objects.filter(pk=id).first().delete() messages.success(request, '删除成功!') return redirect('/todo_list/') def todo_edit(request, id): todo = models.ToDoTable.objects.filter(pk=id).first() if request.method == 'GET': todo_form = TodoForm(instance=todo) return render(request, 'todo_edit.html', locals()) todo_form = TodoForm(data=request.POST, instance=todo) if todo_form.is_valid(): todo_form.save() return redirect('/todo_list/') else: return render(request, 'todo_edit.html', locals()) def todo_done(request, id): todo = models.ToDoTable.objects.filter(pk=id).first() if request.method == 'GET': todo.state = 1 todo.save() return redirect('/todo_list/') def todo_list(request): if request.session.get('is_login'): todo_form = TodoForm() u_id = request.session.get('user_id') role = request.session.get('role') print(role) if role != 1: tasks = models.ToDoTable.objects.filter(user_id=u_id, state=2).all() dones = models.ToDoTable.objects.filter(user_id=u_id, state=1).all() else: g_id = request.session.get('group_id') tasks = models.ToDoTable.objects.filter(group_id=g_id, state=2).all() dones = models.ToDoTable.objects.filter(group_id=g_id, state=1).all() overdues = tasks.filter(deadline__lt=timezone.now()).all() normals = tasks.filter(deadline__gt=timezone.now()).all() return render(request, 'todo_list.html', locals()) else: return redirect('/login/') class EditForm1(ModelForm): class Meta: model = models.UserTable fields = '__all__' widgets = { 'role': Select(attrs={'style':'pointer-events: none;'}) } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' class EditForm2(ModelForm): class Meta: model = models.UserTable fields = '__all__' widgets = { 'role': Select(attrs={'style':'pointer-events: none;'}), 'group': Select(attrs={'style':'pointer-events: none;'}), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' def user_edit(request, id): user = models.UserTable.objects.filter(pk=id).first() if request.method == 'GET': if user.group: user_form = EditForm2(instance=user) else: user_form = EditForm1(instance=user) return render(request, 'user_edit.html', locals()) if user.group: user_form = EditForm2(data=request.POST, instance=user) else: user_form = EditForm1(data=request.POST, instance=user) if user_form.is_valid(): user_form.save() if request.POST.get('group'): if user.role != 1: user.role = 2 user.save() messages.success(request, '修改成功,重新登录!') logout(request) return redirect('/login/') else: return render(request, 'user_edit.html', locals()) def index(request): return render(request, 'index.html') class GroupForm(ModelForm): class Meta: model = models.GroupTable fields = ['group_name', 'group_info'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields.values(): field.widget.attrs['class'] = 'form-control' def group_add(request): if request.method == 'GET': group_form = GroupForm() return render(request, 'group_add.html', locals()) group_form = GroupForm(data=request.POST) if group_form.is_valid(): user_id = request.session.get('user_id') group_name = request.POST.get('group_name') group_info = request.POST.get('group_info') new_group = models.GroupTable.objects.create(group_name=group_name,group_info=group_info, group_leader_id=user_id) user = models.UserTable.objects.filter(pk=user_id).first() user.group_id = new_group.id user.role = 1 request.session['group_id'] = user.group_id request.session['role'] = user.role new_group.save() user.save() return redirect('/') else: return render(request, 'group_add.html', locals()) def group_delete(request, id): models.GroupTable.objects.filter(pk=id).first().delete() user_id = request.session.get('user_id') user = models.UserTable.objects.filter(pk=user_id).first() user.role = 3 request.session['role'] = user.role return redirect('/') def user_list(request): g_id = request.session.get('group_id') users = models.UserTable.objects.filter(group_id=g_id).all() group = models.GroupTable.objects.filter(pk=g_id).first() if request.method == 'GET': group_form = GroupForm(instance=group) return render(request, 'user_list.html', locals()) group_form = GroupForm(data=request.POST, instance=group) if group_form.is_valid(): group_form.save() messages.success(request, '修改成功,重新登录!') logout(request) return redirect('/') else: return render(request, 'user_list.html', locals()) def user_delete(request, id): user = models.UserTable.objects.filter(pk=id).first() user.group_id = None user.save() return redirect('/user_list/')