慕课网-Django入门到进阶-更适合Python小白的系统课程-第9章dashboard后端的搭建与开发-9-5dashboard搭建与管理员模块开发(5)
第9章 dashboard 后端的搭建与开发
9-5 dashboard搭建与管理员模块开发(5)
1.在项目 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, 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):
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'))
2.在项目 vedio 下目录 app/dashboard,修改文件 urls.py
# coding:utf-8
from django.urls import path
from .views.base import Index
from .views.auth import Login
urlpatterns = [
path('', Index.as_view(), name='dashboard_index'),
path('login', Login.as_view(), name='dashboard_login'),
]
3.在项目 vedio 下目录 templates/dashboard/auth,修改文件 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" href="/static/dashboard/css/bootstrap.min.css" />
<link rel="stylesheet" href="/static/dashboard/css/login.css" />
</head>
<body>
<form class="form-horizontal edit-area" action="/dashboard/login" method="post">
${csrf_token}
<div class="form-group">
<div class="col-sm-10">
<input type="text" name="username" class="form-control" placeholder="用户名">
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<input type="password" name="password" class="form-control" placeholder="密码">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">登录</button>${error}
</div>
</div>
</form>
</body>
</html>
4.在项目 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, 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'))
5.测试

6.在项目 vedio 下目录 app/dashboard/views,修改文件 auth.py,添加类 AdminManger
# coding:utf-8
from django.views.generic import View
from django.shortcuts import redirect, reverse
from django.contrib.auth import login, 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 AdminManger(View):
TEMPLATE = 'dashboard/auth/admin.html'
def get(self, request):
return render_to_response(request, self.TEMPLATE)
7.在项目 vedio 下目录 app/dashboard,修改文件 urls.py
# coding:utf-8
from django.urls import path
from .views.base import Index
from .views.auth import Login, AdminManger
urlpatterns = [
path('', Index.as_view(), name='dashboard_index'),
path('login', Login.as_view(), name='dashboard_login'),
path('admin/manger', AdminManger.as_view(), name='admin_manger'),
]
8.在项目 vedio 下目录 templates/dashboard/auth,添加文件 admin.html
<%inherit file="../base.html" />
9.测试

10.在项目 vedio 下目录 templates/dashboard/auth,修改文件 base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>${self.title()}</title>
<link rel="stylesheet" href="/static/dashboard/css/bootstrap.min.css" />
<link rel="stylesheet" href="/static/dashboard/css/base.css" />
${self.css()}
</head>
<body>
<%! from django.shortcuts import reverse %>
<%include file="nav.html" />
<div id="base-area">
<ul class="side-menu">
<li><a href="${reverse('admin_manger')}">管理员</a></li>
<li>用户</li>
<li>视频</li>
</ul>
<div class="base-content">
${self.content()}
</div>
</div>
</body>
<script src="/static/dashboard/js/jquery-1.12.4.min.js"></script>
<script src="/static/dashboard/js/bootstrap.min.js"></script>
${self.js()}
</html>
<%def name="title()"></%def>
<%def name="js()"></%def>
<%def name="css()"></%def>
<%def name="content()"></%def>
11.测试

12.在项目 vedio 下目录 templates/dashboard,修改文件 nav.html
<%! from django.shortcuts import reverse %>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a class="navbar-brand" href="${reverse('dashboard_index')}">dashboard</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">用户 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">注销</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
13.测试
14.在项目 vedio 下目录 app/libs,修改文件 base_render.py
# coding:utf-8
from django.conf import settings
from django.http import HttpResponse
from django.middleware.csrf import get_token
from django.template import RequestContext
from django.template.context import Context
from mako.lookup import TemplateLookup
def render_to_response(request, template, data=None):
# 与 jinjia2 不同,mako 的模板需要自己定义,于是有了本页的代码
context_instance = RequestContext(request)
path = settings.TEMPLATES[0]['DIRS'][0]
lookup = TemplateLookup(
directories=[path],
output_encoding='utf-8',
input_encoding='utf-8'
)
mako_template = lookup.get_template(template)
if not data:
data = {}
if context_instance:
context_instance.update(data)
else:
context_instance = Context(data)
result = {}
for d in context_instance:
result.update(d)
result['request'] = request
request.META["CSRF_COOKIE"] = get_token(request)
result['request'] = request
result['csrf_token'] = ('<div style="display:none">'
'<input type="hidden" '
'name="csrfmiddlewaretoken" '
'value="{0}"/>'
'</div>'.format(request.META['CSRF_COOKIE']))
return HttpResponse(mako_template.render(**result))
15.在项目 vedio 下目录 templates/dashboard,修改文件 nav.html
<%! from django.shortcuts import reverse %>
<nav class="navbar navbar-default">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a class="navbar-brand" href="${reverse('dashboard_index')}">dashboard</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">${request.user} <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#">注销</a></li>
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>
16.测试

17.在项目 vedio 下目录 app/dashboard/views,修改文件 auth.py,添加类 Logout
# 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):
return render_to_response(request, self.TEMPLATE)
posted on 2020-02-21 17:42 herisson_pan 阅读(4) 评论(0) 收藏 举报
浙公网安备 33010602011771号