慕课网-Django入门到进阶-更适合Python小白的系统课程-第9章dashboard后端的搭建与开发-9-7dashboard搭建与管理员模块开发(7)
第9章 dashboard 后端的搭建与开发
9-7 dashboard 搭建与管理员模块开发(7)
1.在项目 vedio 下目录 templates/dashboard/auth,修改文件 admin.html
<%inherit file="../base.html" />
<%! from django.shortcuts import reverse %>
<%def name="content()">
<h1>管理员模块</h1>
<table class="table">
<thead>
<tr>
<th>用户名</th>
<th>状态</th>
<th>创建时间</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
<tr>
% for user in users:
<td>${user.username}</td>
<td>${user.is_superuser}</td>
<td>${user.date_joined}</td>
% if user.is_superuser:
<td><a href="${reverse('admin_update_status')}?status=off">取消管理员</a></td>
% else:
<td><a href="${reverse('admin_update_status')}?status=on">成为管理员</a></td>
% endif
% endfor
</tr>
</tbody>
</table>
</%def>
2.在项目 vedio 下目录 app/dashboard/views,修改文件 auth.py
# coding:utf-8
from django.views.generic import View
from django.shortcuts import redirect, reverse
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User
from app.libs.base_render import render_to_response
class Login(View):
TEMPLATE = 'dashboard/auth/login.html'
def get(self, request):
if request.user.is_authenticated:
return redirect(reverse('dashboard_index'))
data = {'error': ''}
return render_to_response(request, self.TEMPLATE, data=data)
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('password')
print(username, password)
data = {}
exists = User.objects.filter(username=username).exists()
data['error'] = '没有该用户'
if not exists:
return render_to_response(request, self.TEMPLATE, data=data)
user = authenticate(username=username, password=password)
if not user:
data['error'] = '密码错误'
return render_to_response(request, self.TEMPLATE, data=data)
if not user.is_superuser:
data['error'] = '你无权登录'
return render_to_response(request, self.TEMPLATE, data=data)
login(request, user)
return redirect(reverse('dashboard_index'))
class Logout(View):
def get(self, request):
logout(request)
return redirect(reverse('dashboard_login'))
class AdminManger(View):
TEMPLATE = 'dashboard/auth/admin.html'
def get(self, request):
users = User.objects.all()
data = {'users': users}
return render_to_response(request, self.TEMPLATE, data)
class UpdateAdminStatus(View):
def get(self, request):
status = request.GET.get('status', 'on')
_status = True if status == 'on' else False
request.user.is_superuser = _status
request.user.save()
return redirect(reverse('admin_manger'))
3.测试

4.在项目 video 下目录命令行窗口执行生成多个超级管理员(xiaoming、xiaogang、xiaowang)
python manage.py createsuperuser
5.在项目 vedio 下目录 templates/dashboard/auth,修改文件 admin.html
<%inherit file="../base.html" />
<%! from django.shortcuts import reverse %>
<%def name="content()">
<h1>管理员模块</h1>
<table class="table">
<thead>
<tr>
<th>用户名</th>
<th>状态</th>
<th>创建时间</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
% for user in users:
<tr>
<td>${user.username}</td>
<td>${user.is_superuser}</td>
<td>${user.date_joined}</td>
% if user.is_superuser:
<td><a href="${reverse('admin_update_status')}?status=off">取消管理员</a></td>
% else:
<td><a href="${reverse('admin_update_status')}?status=on">成为管理员</a></td>
% endif
</tr>
% endfor
</tbody>
</table>
</%def>
6.在项目 vedio 下命令行窗口启动服务,测试

7.在项目 vedio 下目录 templates/dashboard/auth,修改文件 admin.html
<%inherit file="../base.html" />
<%! from django.shortcuts import reverse %>
<%def name="content()">
<%
prev_page = '{}?page={}'.format(reverse('admin_manger'), page_num - 1)
next_page = '{}?page={}'.format(reverse('admin_manger'), page_num + 1)
%>
<h1>管理员模块</h1>
% if page_num > 1:
<a href="${prev_page}">上一页</a>
% endif
% if page_num < total:
<a href="${next_page}">下一页</a>
% endif
<table class="table">
<thead>
<tr>
<th>用户名</th>
<th>状态</th>
<th>创建时间</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
% for user in users:
<tr>
<td>${user.username}</td>
<td>${user.is_superuser}</td>
<td>${user.date_joined}</td>
% if user.is_superuser:
<td><a href="${reverse('admin_update_status')}?status=off">取消管理员</a></td>
% else:
<td><a href="${reverse('admin_update_status')}?status=on">成为管理员</a></td>
% endif
</tr>
% endfor
</tbody>
</table>
</%def>
8.在项目 vedio 下目录 app/dashboard/views,修改文件 auth.py,添加分页
# coding:utf-8
from django.views.generic import View
from django.shortcuts import redirect, reverse
from django.contrib.auth import login, logout, authenticate
from django.contrib.auth.models import User
from django.core.paginator import Paginator
from app.libs.base_render import render_to_response
class Login(View):
TEMPLATE = 'dashboard/auth/login.html'
def get(self, request):
if request.user.is_authenticated:
return redirect(reverse('dashboard_index'))
data = {'error': ''}
return render_to_response(request, self.TEMPLATE, data=data)
def post(self, request):
username = request.POST.get('username')
password = request.POST.get('password')
print(username, password)
data = {}
exists = User.objects.filter(username=username).exists()
data['error'] = '没有该用户'
if not exists:
return render_to_response(request, self.TEMPLATE, data=data)
user = authenticate(username=username, password=password)
if not user:
data['error'] = '密码错误'
return render_to_response(request, self.TEMPLATE, data=data)
if not user.is_superuser:
data['error'] = '你无权登录'
return render_to_response(request, self.TEMPLATE, data=data)
login(request, user)
return redirect(reverse('dashboard_index'))
class Logout(View):
def get(self, request):
logout(request)
return redirect(reverse('dashboard_login'))
class AdminManger(View):
TEMPLATE = 'dashboard/auth/admin.html'
def get(self, request):
users = User.objects.all()
page = request.GET.get('page', 1)
p = Paginator(users, 2)
total_page = p.num_pages
if int(page) <= 1:
page = 1
current_page = p.get_page(int(page)).object_list
data = {'users': current_page, 'total': total_page, 'page_num': int(page)}
return render_to_response(request, self.TEMPLATE, data)
class UpdateAdminStatus(View):
def get(self, request):
status = request.GET.get('status', 'on')
_status = True if status == 'on' else False
request.user.is_superuser = _status
request.user.save()
return redirect(reverse('admin_manger'))
9.测试


posted on 2020-02-22 06:15 herisson_pan 阅读(7) 评论(0) 收藏 举报
浙公网安备 33010602011771号